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
|