module KeyFlatten

Constants

VERSION

Public Class Methods

key_flatten(hash, symbolize_keys: false, delimiter: '.', prefix: nil, result: {}) click to toggle source
# 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: {}) click to toggle source
# 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

Public Instance Methods

key_flatten(symbolize_keys: false, delimiter: '.', prefix: nil) click to toggle source
# 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: '.') click to toggle source
# 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