Class: Stache::Handler
- Inherits:
-
Object
- Object
- Stache::Handler
- Includes:
- Util.av_template_class(:Handlers)::Compilable
- Defined in:
- lib/stache/handler.rb
Overview
From HAML, thanks a bunch, guys! In Rails 3.1+, template handlers don’t inherit from anything. In <= 3.0, they do. To avoid messy logic figuring this out, we just inherit from whatever the ERB handler does.
Class Method Summary collapse
-
.call(template) ⇒ Object
In Rails 3.1+, #call takes the place of #compile.
Instance Method Summary collapse
-
#compile(template) ⇒ Object
Thanks to Mustache::Rails3 for getting us most of the way home here.
-
#mustache_class_from_template(template) ⇒ Object
suss out a constant name for the given template.
Class Method Details
.call(template) ⇒ Object
In Rails 3.1+, #call takes the place of #compile
47 48 49 |
# File 'lib/stache/handler.rb', line 47 def self.call(template) new.compile(template) end |
Instance Method Details
#compile(template) ⇒ Object
Thanks to Mustache::Rails3 for getting us most of the way home here
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 43 44 |
# File 'lib/stache/handler.rb', line 13 def compile(template) # # get a custom Mustache, or the default Stache::View mustache_class = mustache_class_from_template(template) # Return a string that will be eval'd in the context of the ActionView, ugly, but it works. <<-MUSTACHE mustache = ::#{mustache_class}.new mustache.view = self mustache.template = '#{template.source.gsub(/'/, "\\\\'")}' mustache[:yield] = content_for(:layout) mustache.context.update(local_assigns) variables = controller.instance_variable_names variables -= %w[@template] if controller.respond_to?(:protected_instance_variables) variables -= controller.protected_instance_variables end variables.each do |name| mustache.instance_variable_set(name, controller.instance_variable_get(name)) end # Declaring an +attr_reader+ for each instance variable in the # Stache::View subclass makes them available to your templates. mustache.class.class_eval do attr_reader *variables.map { |name| name.sub(/^@/, '').to_sym } end mustache.render.html_safe MUSTACHE end |
#mustache_class_from_template(template) ⇒ Object
suss out a constant name for the given template
52 53 54 55 56 57 58 59 |
# File 'lib/stache/handler.rb', line 52 def mustache_class_from_template(template) const_name = ActiveSupport::Inflector.camelize(template.virtual_path.to_s) begin const_name.constantize rescue NameError Stache::View end end |