Module: Karafka::Web::Ui::Lib::HashFlattener

Defined in:
lib/karafka/web/ui/lib/hash_flattener.rb

Overview

Flattens a nested hash into a single-level hash with dotted keys, so nested structures (e.g. a topic's routing settings) can be presented, sorted and filtered as a flat list of name/value rows.

Class Method Summary collapse

Class Method Details

.call(hash, prefix = nil, result = {}) ⇒ Hash

Returns flattened { "a.b.c" => value } hash.

Parameters:

  • hash (Hash)

    hash we want to flatten

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

    key prefix used during recursion

  • result (Hash) (defaults to: {})

    accumulator used during recursion

Returns:

  • (Hash)

    flattened { "a.b.c" => value } hash



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/karafka/web/ui/lib/hash_flattener.rb', line 16

def call(hash, prefix = nil, result = {})
  hash.each do |key, value|
    flat_key = prefix ? "#{prefix}.#{key}" : key.to_s

    case value
    when Hash
      call(value, flat_key, result)
    when Array
      value.each_with_index { |item, index| call({ index => item }, flat_key, result) }
    else
      result[flat_key] = value
    end
  end

  result
end