Module: Ramaze::View::Mustache

Defined in:
lib/ramaze/view/mustache.rb

Overview

Binding to Mustache templating engine.

Mustache uses user-defined class for rendering. Ramaze overwrites value, if controller defined same name variable as method that class defined.

Defined Under Namespace

Classes: RamazeContext

Class Method Summary collapse

Class Method Details

.call(action, string) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
# File 'lib/ramaze/view/mustache.rb', line 18

def self.call(action, string)
  context, path, ext = class_defined?(action)

  action.sync_variables(action)
  action.variables.each { |k, v| context[k.to_sym] = v }

  view = View.compile(string) { |s| ::Mustache::Template.new(s) }
  html = view.render(context)

  return html, 'text/html'
end

.class_defined?(action) ⇒ Boolean

Returns:

  • (Boolean)


30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/ramaze/view/mustache.rb', line 30

def self.class_defined?(action)
  return RamazeContext.new(nil), nil, nil unless action.view

  path = File.dirname(action.view)

  klass = if FileTest.exist?(File.join(path, "#{action.name}.rb"))
    require File.join(path, action.name)
    ::Object.const_get(::Mustache.classify(action.name)) # or eval?
  else
    ::Mustache
  end

  return RamazeContext.new(klass.new), path, View.exts_of(self).first
end