devp (owner)

Forks

Revisions

gist: 202190 Download_button fork
public
Public Clone URL: git://gist.github.com/202190.git
Embed All Files: show embed
mustache_ride.rb #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
class Mustache::Rails < Mustache
  include ActionController::UrlWriter
  include ActionView::Helpers
 
  attr_accessor :request, :response, :params
 
  def initialize(args={})
    self.template_file = args[:template_file]
    self.request = args[:request]
    self.response = args[:response]
    self.params = args[:params]
    
    # load instance variables from controller context
    importable_instance_variables = response.template.instance_variables.select{|v| v !~ /@(template|_).*/}
    importable_instance_variables -= response.template.class.new.instance_variables
    importable_instance_variables -= instance_variables
    importable_instance_variables.each do |v|
      instance_variable_set(v.to_sym, response.template.instance_eval(v))
    end
  end
end
 
class Mustache::Rails::TemplateHandler < ActionView::TemplateHandler
  def render(template, local_assigns)
    mustache_class = Class.new(Mustache::Rails)
    helper_class_name = @view.controller.class.to_s.gsub("Controller", "Helper")
    if Object.const_defined?(helper_class_name)
      mustache_class.send(:include, helper_class_name.constantize)
    end
 
    result = mustache_class.new(
      :template_file => "#{RAILS_ROOT}/app/views/#{template.path}",
      :request => @view.controller.request,
      :response => @view.controller.response,
      :params => @view.controller.params
    )
    result.to_html
  end
 
end
 
ActionView::Template.register_template_handler(:mustache, Mustache::Rails::TemplateHandler)