Class: Plum::BuilderRenderer
- Inherits:
-
Object
- Object
- Plum::BuilderRenderer
- 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
-
#initialize(blocks:, base_assigns:, site:, theme:, field_expander: nil, registers: {}) ⇒ BuilderRenderer
constructor
A new instance of BuilderRenderer.
- #render ⇒ Object
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 = || FieldExpander.new(site: site) @registers = registers end |
Instance Method Details
#render ⇒ Object
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 |