class Hash
def contains(contains)
def contains(contains) hash = smash contains = contains.smash contains.each do |key, val| return false if hash[key] != val end true end
def deep_merge(second)
def deep_merge(second) merger = proc { |_key, v1, v2| v1.is_a?(Hash) && v2.is_a?(Hash) ? v1.merge(v2, &merger) : v2 } merge(second, &merger) end
def smash(prefix = nil)
}
'b' => {'c' => 2},
'a' => 1,
hash = {
converts a deep hash into a flat hash
def smash(prefix = nil) inject({}) do |acc, (key, value)| index = prefix.to_s + key.to_s if value.is_a?(Hash) acc.merge(value.smash(index + '-')) else acc.merge(index => value) end end end