Module: LcpRuby::DisplayTemplateHelper

Defined in:
app/helpers/lcp_ruby/display_template_helper.rb

Instance Method Summary collapse

Instance Method Details

#render_display_template(record, model_definition, template_name: "default", permission_evaluator: nil, link_to_record: false, presenter_slug: nil) ⇒ ActiveSupport::SafeBuffer

Render a display template for a record.

Parameters:

  • record (ActiveRecord::Base)

    the record to render

  • model_definition (Metadata::ModelDefinition)

    the model definition (for template lookup)

  • template_name (String) (defaults to: "default")

    the display template name (default: “default”)

  • permission_evaluator (Authorization::PermissionEvaluator) (defaults to: nil)

    for field-level access

  • link_to_record (Boolean) (defaults to: false)

    whether to wrap in a link

  • presenter_slug (String, nil) (defaults to: nil)

    slug for building link (auto-resolved if nil)

Returns:

  • (ActiveSupport::SafeBuffer)

    rendered HTML



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'app/helpers/lcp_ruby/display_template_helper.rb', line 12

def render_display_template(record, model_definition, template_name: "default",
                            permission_evaluator: nil, link_to_record: false,
                            presenter_slug: nil)
  return "".html_safe if record.nil?

  template_def = model_definition.display_template(template_name)

  if template_def.nil?
    # Fallback: escaped to_label, optionally linked
    label = ERB::Util.html_escape(record.respond_to?(:to_label) ? record.to_label : record.to_s)
    return wrap_in_link(label, record, presenter_slug, model_definition) if link_to_record
    return label
  end

  case template_def.form
  when :structured
    render_structured_template(record, model_definition, template_def, permission_evaluator,
                               link_to_record, presenter_slug)
  when :renderer
    render_renderer_template(record, template_def)
  when :partial
    render partial: template_def.partial, locals: { record: record }
  end
end