Sha256: 14f6d618eef67112834b8071253d5c689e3cc5cb6634ab5c90519f086d998f07

Contents?: true

Size: 780 Bytes

Versions: 47

Compression:

Stored size: 780 Bytes

Contents

##
# Various Hash extensions.
#
class Hash

  # Recursively merge +other_hash+ into +self+ and return the new hash.
  def deep_merge(other_hash)
    self.merge(other_hash) do |key, oldval, newval|
      oldval = oldval.to_hash if oldval.respond_to?(:to_hash)
      newval = newval.to_hash if newval.respond_to?(:to_hash)
      oldval.is_a?(Hash) && newval.is_a?(Hash) ? oldval.deep_merge(newval) : newval
    end
  end

  # Recursively merge and replace +other_hash+ into +self+.
  def deep_merge!(other_hash)
    replace(deep_merge(other_hash))
  end

  # accumulate existing keys from +other_hash+ into +self+.
  def delta_merge!(other_hash)
    other_hash.each do |k,v|
      if self.has_key?(k)
        self[k] += v
      else
        self[k] = v
      end
    end
  end

end

Version data entries

47 entries across 47 versions & 2 rubygems

Version Path
madvertise-ext-0.6.0 lib/madvertise/ext/hash.rb
madvertise-ext-0.5.3 lib/madvertise/ext/hash.rb
madvertise-ext-0.5.2 lib/madvertise/ext/hash.rb
madvertise-ext-0.5.1 lib/madvertise/ext/hash.rb
madvertise-ext-0.5.0 lib/madvertise/ext/hash.rb
madvertise-ext-0.4.0 lib/madvertise/ext/hash.rb
madvertise-ext-0.3.0 lib/madvertise/ext/hash.rb