class Malt::Engine::Tenjin

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