Class: LiquidView

Inherits:
Object
  • Object
show all
Defined in:
lib/extras/liquid_view.rb

Overview

LiquidView is a action view extension class. You can register it with rails and use liquid as an template system for .liquid files

Example

ActionView::Base::register_template_handler :liquid, LiquidView

Instance Method Summary collapse

Constructor Details

#initialize(action_view) ⇒ LiquidView

Returns a new instance of LiquidView.



9
10
11
# File 'lib/extras/liquid_view.rb', line 9

def initialize(action_view)
  @action_view = action_view
end

Instance Method Details

#compilable?Boolean

Returns:

  • (Boolean)


36
37
38
# File 'lib/extras/liquid_view.rb', line 36

def compilable?
  false
end

#render(template, local_assigns_for_rails_less_than_2_1_0 = nil) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/extras/liquid_view.rb', line 14

def render(template, local_assigns_for_rails_less_than_2_1_0 = nil)
  @action_view.controller.headers["Content-Type"] ||= 'text/html; charset=utf-8'
  assigns = @action_view.assigns.dup
  
  # template is a Template object in Rails >=2.1.0, a source string previously.
  if template.respond_to? :source
    source = template.source
    local_assigns = template.locals
  else
    source = template
    local_assigns = local_assigns_for_rails_less_than_2_1_0
  end

  if content_for_layout = @action_view.instance_variable_get("@content_for_layout")
    assigns['content_for_layout'] = content_for_layout
  end
  assigns.merge!(local_assigns)
  
  liquid = Liquid::Template.parse(source)
  liquid.render(assigns, :filters => [@action_view.controller.master_helper_module], :registers => {:action_view => @action_view, :controller => @action_view.controller})
end