class Bridgetown::RubyTemplateView

Attributes

content[R]
layout[R]
page[R]
paginator[R]
resource[R]
site[R]

Public Class Methods

new(convertible) click to toggle source
# File lib/bridgetown-core/ruby_template_view.rb, line 12
def initialize(convertible)
  if convertible.is_a?(Layout)
    @layout = convertible
    @page = layout.current_document
    @content = layout.current_document_output
  else
    @layout = convertible.site.layouts[convertible.data["layout"]]
    @page = convertible
  end
  @paginator = page.paginator if page.respond_to?(:paginator)
  @site = page.site
end

Public Instance Methods

collections() click to toggle source
# File lib/bridgetown-core/ruby_template_view.rb, line 38
def collections
  site.collections
end
helpers() click to toggle source
# File lib/bridgetown-core/ruby_template_view.rb, line 60
def helpers
  @helpers ||= Helpers.new(self, site)
end
liquid_render(component, options = {}, &block) click to toggle source
# File lib/bridgetown-core/ruby_template_view.rb, line 46
def liquid_render(component, options = {}, &block)
  options[:_block_content] = capture(&block) if block && respond_to?(:capture)
  render_statement = _render_statement(component, options)

  template = site.liquid_renderer.file(
    "#{page.path}.#{Digest::SHA2.hexdigest(render_statement)}"
  ).parse(render_statement)
  template.warnings.each do |e|
    Bridgetown.logger.warn "Liquid Warning:",
                           LiquidRenderer.format_error(e, path || document.relative_path)
  end
  template.render!(options.deep_stringify_keys, _liquid_context).html_safe
end
method_missing(method, *args, &block) click to toggle source
Calls superclass method
# File lib/bridgetown-core/ruby_template_view.rb, line 65
               def method_missing(method, *args, &block)
  if helpers.respond_to?(method.to_sym)
    helpers.send method.to_sym, *args, &block
  else
    super
  end
end
partial(_partial_name, _options = {}) click to toggle source
# File lib/bridgetown-core/ruby_template_view.rb, line 25
def partial(_partial_name, _options = {})
  raise "Must be implemented in a subclass"
end
render(item, options = {}, &block) click to toggle source
# File lib/bridgetown-core/ruby_template_view.rb, line 29
def render(item, options = {}, &block)
  if item.respond_to?(:render_in)
    result = item.render_in(self, &block)
    result&.html_safe
  else
    partial(item, options, &block)&.html_safe
  end
end
respond_to_missing?(method, include_private = false) click to toggle source
Calls superclass method
# File lib/bridgetown-core/ruby_template_view.rb, line 73
def respond_to_missing?(method, include_private = false)
  helpers.respond_to?(method.to_sym, include_private) || super
end
site_drop() click to toggle source
# File lib/bridgetown-core/ruby_template_view.rb, line 42
def site_drop
  site.site_payload.site
end

Private Instance Methods

_liquid_context() click to toggle source
# File lib/bridgetown-core/ruby_template_view.rb, line 97
def _liquid_context
  {
    registers: {
      site: site,
      page: page.to_liquid,
      cached_partials: Bridgetown::Converters::LiquidTemplates.cached_partials,
    },
    strict_filters: site.config["liquid"]["strict_filters"],
    strict_variables: site.config["liquid"]["strict_variables"],
  }
end
_render_statement(component, options) click to toggle source

rubocop:enable Style/MissingRespondToMissing

# File lib/bridgetown-core/ruby_template_view.rb, line 80
def _render_statement(component, options)
  render_statement = if options[:_block_content]
                       ["{% rendercontent \"#{component}\""]
                     else
                       ["{% render \"#{component}\""]
                     end
  unless options.empty?
    render_statement << ", " + options.keys.map { |k| "#{k}: #{k}" }.join(", ")
  end
  render_statement << " %}"
  if options[:_block_content]
    render_statement << options[:_block_content]
    render_statement << "{% endrendercontent %}"
  end
  render_statement.join
end