Class: AdminSuite::Renderers::KeyValueRenderer

Inherits:
AdminSuite::Renderer show all
Defined in:
lib/admin_suite/renderers/key_value_renderer.rb

Overview

Label/value list panel. source: returns a Hash or an Array of [key, value] pairs.

Unlike data_table, the key_value_list primitive has no empty: option (see Task 4 report for why) — emptiness is handled here instead.

Instance Attribute Summary

Attributes inherited from AdminSuite::Renderer

#options, #record, #view

Instance Method Summary collapse

Methods inherited from AdminSuite::Renderer

#initialize

Constructor Details

This class inherits a constructor from AdminSuite::Renderer

Instance Method Details

#renderObject



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/admin_suite/renderers/key_value_renderer.rb', line 11

def render
  value = source_value({})
  pairs =
    case value
    when Hash then value.to_a
    when Array then value
    when nil then []
    else
      # A Hash is handled above; anything else that coerces via #to_a
      # (AR relations, Sets, ...) is supported the same way `Array(value)`
      # supported it before this guard existed — only reject things
      # that genuinely aren't enumerable.
      unless value.respond_to?(:to_a)
        raise ArgumentError, "key_value expects a Hash or an Array of pairs, got #{value.class}"
      end
      value.to_a
    end
  return empty_state(options[:empty] || "Nothing to display.") if pairs.blank?

  unless pairs.all? { |pair| pair.is_a?(Array) && pair.size == 2 }
    raise ArgumentError, "key_value expects a Hash or an Array of [key, value] pairs, " \
                          "got an Array containing non-pair elements"
  end

  key_value_list(pairs.map { |k, v| [ k.to_s.humanize, v ] })
end