Class: ActionView::Template::Handlers::Liquid

Inherits:
Object
  • Object
show all
Defined in:
lib/action_view/template/handlers/liquid.rb

Overview

Constant Summary collapse

PROTECTED_ASSIGNS =
%w( _routes template_root response _session template_class action_name request_origin session template
_response url _request _cookies variables_added _flash params _headers request cookies
ignore_missing_templates flash _params logger before_filter_chain_aborted headers )

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(view) ⇒ Liquid

Returns a new instance of Liquid.



16
17
18
# File 'lib/action_view/template/handlers/liquid.rb', line 16

def initialize(view)
  @view = view
end

Class Method Details

.call(template) ⇒ Object



12
13
14
# File 'lib/action_view/template/handlers/liquid.rb', line 12

def self.call(template)
  "ActionView::Template::Handlers::Liquid.new(self).render(#{template.source.inspect}, local_assigns)"
end

Instance Method Details

#compilable?Boolean

Returns:

  • (Boolean)


84
85
86
# File 'lib/action_view/template/handlers/liquid.rb', line 84

def compilable?
  false
end

#render(template, local_assigns = {}) ⇒ Object



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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/action_view/template/handlers/liquid.rb', line 20

def render(template, local_assigns = {})
  @view.controller.headers["Content-Type"] ||= 'text/html; charset=utf-8'

  assigns = @view.assigns.update('view' => @view)
  assigns['site_name'] = Refinery::Core.site_name
  assigns['theme_assigns'] = Refinery::Themes::Theme.current_theme_config['assigns']
  assigns['theme_config'] = Refinery::Themes::Theme.current_theme_config['config']
  assigns['spree_config'] = Spree::Config

  #TODO
  #assigns = (@view.instance_variables.map{ |i| i.to_s} - PROTECTED_INSTANCE_VARIABLES).inject({}) do |hash, var_name|
  #  hash[var_name.to_s.sub('@', '')] = @view.instance_eval(var_name.to_s)
  #  #hash[var_name[1..-1]] = @view.instance_variable_get(var_name)
  #  hash
  #end

  assigns.merge!(local_assigns.stringify_keys)

  @view.controller._helpers.instance_methods.each do |method|
  #@view.public_methods.each do |method|
    assigns[method.to_s] = Proc.new { @view.send(method) }
  end

  controller = @view.controller

  filters = if controller.respond_to?(:liquid_filters, true)
              controller.send(:liquid_filters)
            elsif controller.respond_to?(:master_helper_module)
              [controller.master_helper_module]
            else
              [controller._helpers]
            end

  # TODO content_for from layout to partial
  #unless assigns[:layout_prerender]
  #  @layout = Liquid::Template.parse(Refinery::Themes::Theme.layout_raw(assigns['page'].layout_template))
  #  @layout.render(assigns, :registers => {:filters => filters, :action_view => @view, :controller => @view.controller})
  #  assigns[:layout_prerender] = true
  #end

  @view.view_flow.content.each do  |key, content|
    assigns["content_for_#{key.to_s}"] = content
  end

  partials_path = Liquid::LocalFileSystem.new(Refinery::Themes::Theme.theme_path.join("views/partials"))

  assigns['page'].parts.each do |part|
    Liquid::Template.parse(part.body).render(assigns)
    assigns["content_for_#{part.title}"] =
        Liquid::Template.parse(part.body).render(assigns,
                                                 :filters => filters,
                                                 :registers => {
                                                     :file_system => partials_path,
                                                     :action_view => @view,
                                                     :controller => @view.controller
                                                 }).html_safe
  end if assigns['page']

  variables = assigns.reject{ |k,v| PROTECTED_ASSIGNS.include?(k) }

  liquid = Liquid::Template.parse(CGI::unescape(template))
  liquid.render(variables, :filters => filters, :registers => {:file_system => partials_path, :action_view => @view, :controller => @view.controller})
end