Module: Pinmark::Hooks::ErbPartial

Defined in:
lib/pinmark/hooks/erb_partial.rb

Overview

Prepended into ActionView::PartialRenderer.

Rails 8.1 ‘render_partial_template(view, locals, template, layout, block)` is private and returns an `ActionView::AbstractRenderer::RenderedTemplate` whose `body` is the rendered HTML string. To preserve the contract for callers (collection assembly, layout wrapping) the override re-wraps the body and returns a fresh RenderedTemplate.

Instance Method Summary collapse

Instance Method Details

#render_partial_template(view, locals, template, layout, block) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/pinmark/hooks/erb_partial.rb', line 13

def render_partial_template(view, locals, template, layout, block)
  rendered = super
  return rendered unless Pinmark.active?
  return rendered unless rendered.respond_to?(:body) && rendered.respond_to?(:template)

  identifier = template.respond_to?(:identifier) ? template.identifier.to_s : template.to_s
  relative = relative_to_root(identifier)
  component = "partial:#{File.basename(relative)}"
  source = "#{relative}:1"

  wrapped_body = Pinmark::Wrapper.wrap(component:, source:) do
    rendered.body.to_s
  end

  ::ActionView::AbstractRenderer::RenderedTemplate.new(wrapped_body, rendered.template)
end