Module: Semplice::TemplateParser

Defined in:
lib/semplice.rb

Constant Summary collapse

@@template_dirs =
[]

Class Method Summary collapse

Class Method Details

.parse(content, names = []) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/semplice.rb', line 38

def self.parse(content, names=[])
  tpl = parse_content(content.split(TPL_PATTERN))
  context_vars = names.map{|name| "%s = __params[%p]" % [name, name]}.join(';')
  render_code = tpl[:methods].map{|name, code|
    "def __block_#{name}(__params);#{context_vars};__out = [];#{code};__out.join;end"
  }

  unless tpl[:base]
    render_code << "def __render(__params)"
    render_code <<   context_vars
    render_code <<   "__out = [super(__params)]"
    render_code <<   tpl[:code].join("\n")
    render_code <<   "__out.join.chomp"
    render_code << "end"
  end

  cls = Class.new(tpl[:base] ? template(tpl[:base], names) : Semplice::Template)
  cls.class_eval(render_code.join("\n"))
  cls
end

.template(path, names) ⇒ Object



59
60
61
# File 'lib/semplice.rb', line 59

def self.template(path, names)
  cache[path] ||= parse(content_for(path), names)
end