class Malt::Engine::Tenjin
@see www.kuwata-lab.com/tenjin/
Let to it's own designs, Tenjin
renders data as template instance variables. But that will not work for Malt
, so use regular variables instead.
Public Instance Methods
create_engine(params={})
click to toggle source
# File lib/malt/engines/tenjin.rb, line 68 def create_engine(params={}) file, text = parameters(params, :file, :text) opts = engine_options(params) opts[:escapefunc] ||= 'CGI.escapeHTML' cached(text, file, opts) do ::Tenjin::Template.new(nil, opts) end end
prepare_engine(params={}, &content)
click to toggle source
# File lib/malt/engines/tenjin.rb, line 40 def prepare_engine(params={}, &content) text, file = parameters(params, :text, :file) file ||= "(tenjin)" engine = create_engine(params) script = engine.convert(text, file) lambda do |scope, locals| vars, vals = [], [] locals.each do |k,v| vars << k vals << v end code = %{ lambda do |#{vars.join(',')}| _buf = '' #{script} _buf end } eval(code, scope.to_binding, file, 2).call(*vals) end end
render(params, &content)
click to toggle source
Render Tenjin
.
@option params [String] :escapefunc
Defaults to 'CGI.escapeHTML'.
Calls superclass method
Malt::Engine::Abstract#render
# File lib/malt/engines/tenjin.rb, line 21 def render(params, &content) into, text, file, type, scope, locals = parameters(params, :to, :text, :file, :type, :scope, :locals) into ||= :html if type == :rbhtml && into != :html super(params, &content) else scope, locals = make_ready(scope, locals, &content) engine = prepare_engine(params) engine.call(scope, locals) end end
Private Instance Methods
engine_option_names()
click to toggle source
# File lib/malt/engines/tenjin.rb, line 97 def engine_option_names [:escapefunc] end
require_engine()
click to toggle source
Load Tenjin
library if not already loaded.
# File lib/malt/engines/tenjin.rb, line 90 def require_engine return if defined? ::Tenjin::Engine require_library 'tenjin' require 'cgi' end