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
- .key_flatten(hash, symbolize_keys: false, delimiter: '.', prefix: nil, result: {}) ⇒ Object
- .key_unflatten(hash, symbolize_keys: false, delimiter: '.', result: {}) ⇒ Object
Instance Method Summary collapse
- #key_flatten(symbolize_keys: false, delimiter: '.', prefix: nil) ⇒ Object
- #key_unflatten(symbolize_keys: false, delimiter: '.') ⇒ Object
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 |