module HashExtensions

Public Instance Methods

deep_merge(hash_to_merge) click to toggle source
# File lib/hash_extensions.rb, line 12
def deep_merge(hash_to_merge)
  merger = proc { |_, val1, val2| val1.is_a?(Hash) && val2.is_a?(Hash) ? val1.merge(val2, &merger) : val2 }
  merge(hash_to_merge, &merger)
end
to_nested() click to toggle source
# File lib/hash_extensions.rb, line 4
def to_nested
  self unless contains_dotted_key?

  keys.reduce({}) do |nested, key|
    nested.deep_merge(build_nested_object(key, self[key]))
  end
end

Private Instance Methods

build_nested_object(key, val) click to toggle source
# File lib/hash_extensions.rb, line 23
def build_nested_object(key, val)
  key.to_s
     .split('.')
     .reverse
     .reduce(val) { |nested, key_part| { key_part.to_sym => nested } }
end
contains_dotted_key?() click to toggle source
# File lib/hash_extensions.rb, line 19
def contains_dotted_key?
  keys.any? { |x| x.to_s.include?('.') }
end