Module: KeyFlatten

Included in:
Hash
Defined in:
lib/key_flatten.rb,
lib/key_flatten/version.rb

Constant Summary collapse

VERSION =
'1.0.0'

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.key_flatten(hash, symbolize_keys: false, delimiter: '.', prefix: nil, result: {}) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
# File 'lib/key_flatten.rb', line 4

def self.key_flatten(hash, symbolize_keys: false, delimiter: '.', prefix: nil, result: {})
  hash.each do |k, v|
    flat_key = prefix.nil? ? k.to_s : "#{prefix}#{delimiter}#{k}"
    flat_key = symbolize_keys ? flat_key.to_sym : flat_key.to_s

    if v.is_a?(Hash)
      self.key_flatten(v, symbolize_keys: symbolize_keys, delimiter: delimiter, prefix: flat_key, result: result)
    else
      result[flat_key] = v
    end
  end

  result
end

.key_unflatten(hash, symbolize_keys: false, delimiter: '.', result: {}) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/key_flatten.rb', line 19

def self.key_unflatten(hash, symbolize_keys: false, delimiter: '.', result: {})
  hash.each do |k, v|
    keys = k.to_s.split(delimiter)
    last_key = symbolize_keys ? keys.pop.to_sym : keys.pop

    h = keys.reduce(result) do |h, k|
      k = k.to_sym if symbolize_keys
      h[k] = {} unless h.key? k
      h[k]
    end

    h[last_key] = v
  end

  result
end

Instance Method Details

#key_flatten(symbolize_keys: false, delimiter: '.', prefix: nil) ⇒ Object



36
37
38
# File 'lib/key_flatten.rb', line 36

def key_flatten(symbolize_keys: false, delimiter: '.', prefix: nil)
  ::KeyFlatten.key_flatten(self, symbolize_keys: symbolize_keys, delimiter: delimiter, prefix: prefix)
end

#key_unflatten(symbolize_keys: false, delimiter: '.') ⇒ Object



40
41
42
# File 'lib/key_flatten.rb', line 40

def key_unflatten(symbolize_keys: false, delimiter: '.')
  ::KeyFlatten.key_unflatten(self, symbolize_keys: symbolize_keys, delimiter: delimiter)
end