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
|