class ViewComponentLiquid::TemplateHandler

Public Class Methods

call(template, source) click to toggle source
# File lib/view_component_liquid/template_handler.rb, line 7
def call(template, source)
  "ViewComponentLiquid::TemplateHandler.new(self).render(#{source.inspect}, local_assigns)"
end
new(view) click to toggle source
# File lib/view_component_liquid/template_handler.rb, line 12
def initialize(view)
  @view = view
  @controller = @view.controller
end

Public Instance Methods

compilable?() click to toggle source
# File lib/view_component_liquid/template_handler.rb, line 49
def compilable?
  false
end
filters() click to toggle source
# File lib/view_component_liquid/template_handler.rb, line 36
def filters
  if @view.respond_to?(:liquid_filters, true)
    @view.send(:liquid_filters)
  end
end
registers() click to toggle source
# File lib/view_component_liquid/template_handler.rb, line 42
def registers
  {
    view: @view,
    file_system: ViewComponentLiquid::FileSystem.new(@view)
  }
end
render(template, local_assigns={}) click to toggle source
# File lib/view_component_liquid/template_handler.rb, line 17
def render(template, local_assigns={})
  component = LiquidComponent.parse(template)
  template = component.content

  assigns = local_assigns.deep_stringify_keys
  assigns["component"] = component.to_h.deep_stringify_keys
  assigns["controller"] = {
    "controller_name" => @controller.controller_name,
    "action_name" => @controller.action_name
  }
  if @view.respond_to?(:assigns)
    assigns["controller"].merge! @view.assigns.to_h
    @view.instance_variable_set(:@liquid_page, component)
  end

  liquid = Liquid::Template.parse(template)
  liquid.send(render_method, assigns, filters: filters, registers: registers).html_safe
end
render_method() click to toggle source
# File lib/view_component_liquid/template_handler.rb, line 53
def render_method
  (Rails.env.development? || Rails.env.test?) ? :render! : :render
end