Sha256: 73f86024766c3c3d4d404758be66380e8516f0777080637408436a8a368e10f4

Contents?: true

Size: 1023 Bytes

Versions: 1

Compression:

Stored size: 1023 Bytes

Contents

require "active_support/core_ext/hash/deep_merge"

class Hash
  @@namespace = []

  def namespace_flatten(separator = ".")
    hash = {}
    self.each do |key, value|
      key = key.to_s
      if value.is_a?(Hash)
        @@namespace << key
        hash.merge! value.namespace_flatten(separator)
        @@namespace.pop
      else
        key = @@namespace + [key]
        hash[key.join(separator)] = value
      end
    end
    hash
  end

  def namespace_unflatten(separator = ".")
    hash = {}
    self.each do |key, value|
      hash.deep_merge! self.class.nested_value(value, key.split(separator))
    end
    hash
  end

  def self.nested_value(x, p)
    hash = { p.pop => x }
    p.reverse_each do |element|
        hash = { element => hash }
    end
    hash
  end

  def recursive_symbolize_keys!
    symbolize_keys!
    values.each { |h| h.recursive_symbolize_keys! if h.is_a?(Hash) }
    values.select { |v| v.is_a?(Array) }.flatten.each { |h| h.recursive_symbolize_keys! if h.is_a?(Hash) }
    self
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
hash_converter-0.0.2 lib/core_ext/hash.rb