class Archangel::Liquid::Tags::WidgetTag

Widget custom tag for Liquid

Example

{% widget "widget-name" %}
{% widget 'widget-name' %}
{% widget widget-name %}

Attributes

slug[R]

Public Class Methods

new(tag_name, markup, options) click to toggle source

Widget for Liquid

@param tag_name [String] the Liquid tag name @param markup [String] the passed options @param options [Object] options

Calls superclass method
# File lib/archangel/liquid/tags/widget_tag.rb, line 22
def initialize(tag_name, markup, options)
  super

  match = SLUG_SYNTAX.match(markup)

  if match.blank?
    raise ::Liquid::SyntaxError, Archangel.t("errors.syntax.widget")
  end

  @slug = ::Liquid::Variable.new(match[:slug], options).name
end

Public Instance Methods

render(context) click to toggle source

Render the Widget

@param context [Object] the Liquid context @return [String] the rendered Widget

# File lib/archangel/liquid/tags/widget_tag.rb, line 40
def render(context)
  return if slug.blank?

  widget = load_widget_for(context["site"].object)

  return if widget.blank?

  rendered_widget = render_widget(widget.content,
                                  context.environments.first)

  if widget.design.present?
    rendered_widget = render_designed_widget(widget.design,
                                             rendered_widget)
  end

  rendered_widget
end

Protected Instance Methods

load_widget_for(site) click to toggle source
# File lib/archangel/liquid/tags/widget_tag.rb, line 62
def load_widget_for(site)
  site.widgets.find_by!(slug: slug)
rescue StandardError
  nil
end
render_designed_widget(design_content, widget_content) click to toggle source
# File lib/archangel/liquid/tags/widget_tag.rb, line 72
def render_designed_widget(design_content, widget_content)
  Archangel::DesignRenderService.call(
    design_content,
    content_for_layout: widget_content
  )
end
render_widget(content, assigns) click to toggle source
# File lib/archangel/liquid/tags/widget_tag.rb, line 68
def render_widget(content, assigns)
  Archangel::RenderService.call(content, assigns)
end