Class: Plum::BuilderRenderer

Inherits:
Object
  • Object
show all
Defined in:
app/services/plum/builder_renderer.rb

Overview

Renders an array of block instances (stored on an entry's blocks field) into HTML using theme-provided Liquid block partials.

Each block instance has the shape:

{ "id" => "<uuid>", "type" => "hero", "fields" => { "heading" => "Hi", "image" => 42 } }

A block's own field values are exposed to its partial under the block variable, and the full shared site context (site, globals, nav, theme settings, registered content sources, ...) is merged in so block partials see exactly what a normal template sees. Image and relationship block fields are expanded with the same rules as entry fields via FieldExpander.

Instance Method Summary collapse

Constructor Details

#initialize(blocks:, base_assigns:, site:, theme:, field_expander: nil, registers: {}) ⇒ BuilderRenderer

Returns a new instance of BuilderRenderer.



17
18
19
20
21
22
23
24
25
# File 'app/services/plum/builder_renderer.rb', line 17

def initialize(blocks:, base_assigns:, site:, theme:, field_expander: nil, registers: {})
  @blocks = Array(blocks)
  @base_assigns = base_assigns || {}
  @site = site
  @theme = theme
  @library = BlockLibrary.new(theme)
  @field_expander = field_expander || FieldExpander.new(site: site)
  @registers = registers
end

Instance Method Details

#renderObject



27
28
29
30
31
32
# File 'app/services/plum/builder_renderer.rb', line 27

def render
  return "".html_safe if blocks.empty?

  rendered = blocks.filter_map { |block| render_block(block) }
  rendered.join("\n").html_safe
end