Commit c9cb0c53 by Chris Jerdonek

Merge branch into development: moved make_template_name() from view to loader.

parents 22d5f044 4b884554
......@@ -6,6 +6,7 @@ This module provides a Loader class.
"""
import os
import re
import sys
from .reader import Reader
......@@ -14,6 +15,29 @@ from .reader import Reader
DEFAULT_EXTENSION = 'mustache'
def make_template_name(obj):
"""
Return the canonical template name for an object instance.
This method converts Python-style class names (PEP 8's recommended
CamelCase, aka CapWords) to lower_case_with_underscords. Here
is an example with code:
>>> class HelloWorld(object):
... pass
>>> hi = HelloWorld()
>>> make_template_name(hi)
'hello_world'
"""
template_name = obj.__class__.__name__
def repl(match):
return '_' + match.group(0).lower()
return re.sub('[A-Z]', repl, template_name)[1:]
class Loader(object):
def __init__(self, search_dirs=None, extension=None, reader=None):
......
......@@ -9,6 +9,7 @@ import re
from types import UnboundMethodType
from .context import Context
from .loader import make_template_name
from .loader import Loader
from .reader import Reader
from .renderer import Renderer
......@@ -94,12 +95,7 @@ class View(object):
if self.template_name:
return self.template_name
template_name = self.__class__.__name__
def repl(match):
return '_' + match.group(0).lower()
return re.sub('[A-Z]', repl, template_name)[1:]
return make_template_name(self)
def render(self):
"""
......
......@@ -4,11 +4,27 @@ import os
import sys
import unittest
from pystache.loader import make_template_name
from pystache.loader import Loader
from pystache.reader import Reader
from .common import DATA_DIR
class MakeTemplateNameTests(unittest.TestCase):
"""
Test the make_template_name() function.
"""
def test(self):
class FooBar(object):
pass
foo = FooBar()
self.assertEquals(make_template_name(foo), 'foo_bar')
class LoaderTestCase(unittest.TestCase):
search_dirs = 'examples'
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment