I would like to merge a nested hash.
a = {:book=>
[{:title=>\"Hamlet\",
:author=>\"William Shakespeare\"
}]}
b = {:book=>
[{
I think Jon M's answer is the best, but it fails when you merge in a hash with a nil/undefined value. This update solves the issue:
class ::Hash
def deep_merge(second)
merger = proc { |key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : [:undefined, nil, :nil].include?(v2) ? v1 : v2 }
self.merge(second, &merger)
end
end
a.deep_merge(b)