Class: LcpRuby::Display::Renderers::Collection

Inherits:
BaseRenderer
  • Object
show all
Defined in:
lib/lcp_ruby/display/renderers/collection.rb

Instance Method Summary collapse

Methods inherited from BaseRenderer

#link_producing?

Instance Method Details

#render(value, options = {}, record: nil, view_context: nil) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/lcp_ruby/display/renderers/collection.rb', line 5

def render(value, options = {}, record: nil, view_context: nil)
  items = Array(value)
  raw_sep = options["separator"] || ", "
  separator = raw_sep.include?("<") ? raw_sep.html_safe : raw_sep
  limit = options["limit"]&.to_i
  overflow = options["overflow"] || "..."
  item_renderer_key = options["item_renderer"]
  item_options = options["item_options"] || {}

  truncated = limit && items.size > limit
  items = items.first(limit) if limit

  rendered = items.map do |item|
    if item_renderer_key.present?
      renderer = RendererRegistry.renderer_for(item_renderer_key)
      renderer ? renderer.render(item, item_options, record: record, view_context: view_context) : item.to_s
    else
      item.to_s
    end
  end

  parts = rendered.map { |r| r.respond_to?(:html_safe?) && r.html_safe? ? r : ERB::Util.html_escape(r) }
  parts << ERB::Util.html_escape(overflow) if truncated

  view_context.safe_join(parts, separator)
end