class Hash

raw.github.com/Offirmo/hash-deep-merge/master/lib/hash_deep_merge.rb

Public Instance Methods

deep_merge(specialized_hash) click to toggle source
# File lib/riemann/babbler/monkey_patches.rb, line 34
def deep_merge(specialized_hash)
  internal_deep_merge!(Hash.new.replace(self), specialized_hash)
end
deep_merge!(specialized_hash) click to toggle source
# File lib/riemann/babbler/monkey_patches.rb, line 29
def deep_merge!(specialized_hash)
  internal_deep_merge!(self, specialized_hash)
end

Protected Instance Methods

internal_deep_merge!(source_hash, specialized_hash) click to toggle source
# File lib/riemann/babbler/monkey_patches.rb, line 41
def internal_deep_merge!(source_hash, specialized_hash)
  specialized_hash.each_pair do |rkey, rval|
    if source_hash.has_key?(rkey) then
      if rval.is_a?(Hash) and source_hash[rkey].is_a?(Hash) then
        internal_deep_merge!(source_hash[rkey], rval)
      elsif rval == source_hash[rkey] then
      else
        source_hash[rkey] = rval
      end
    else
      source_hash[rkey] = rval
    end
  end

  source_hash
end