class Hash
  # Merge not only the hashes, but all nested hashes as well.
  # Written by Stefan Rusterholz (apeiros) from http://www.ruby-forum.com/topic/142809
  def deep_merge!(other)
    merger = lambda do |key, a, b|
      (a.is_a?(Hash) && b.is_a?(Hash)) ? a.merge!(b, &merger) : b
    end

    merge!(other, &merger)
  end

  # Merge not only the hashes, but all nested hashes as well.
  # Written by Stefan Rusterholz (apeiros) from http://www.ruby-forum.com/topic/142809
  def deep_merge(other)
    merger = lambda do |key, a, b|
      (a.is_a?(Hash) && b.is_a?(Hash)) ? a.merge(b, &merger) : b
    end

    merge(other, &merger)
  end
end