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
liquid-ext-3.3.3 lib/liquid/ext/hash.rb
liquid-ext-3.3.2 lib/liquid/ext/hash.rb
liquid-ext-3.3.0 lib/liquid/ext/hash.rb
liquid-ext-3.2.0 lib/liquid/ext/hash.rb
liquid-ext-3.1.2 lib/liquid/ext/hash.rb
liquid-ext-3.1.1 lib/liquid/ext/hash.rb
liquid-ext-3.1.0 lib/liquid/ext/hash.rb
liquid-ext-3.0.0 lib/liquid/ext/hash.rb
liquid-ext-2.0.3 lib/liquid/ext/hash.rb
liquid-ext-2.0.2 lib/liquid/ext/hash.rb
liquid-ext-2.0.1 lib/liquid/ext/hash.rb
liquid-ext-2.0.0 lib/liquid/ext/hash.rb
liquid-ext-1.2.6 lib/liquid/ext/hash.rb
liquid-ext-1.2.5 lib/liquid/ext/hash.rb
liquid-ext-1.2.4 lib/liquid/ext/hash.rb
liquid-ext-1.2.2 lib/liquid/ext/hash.rb
liquid-ext-1.2.1 lib/liquid/ext/hash.rb
liquid-ext-1.2.0 lib/liquid/ext/hash.rb
liquid-ext-1.1.1 lib/liquid/ext/hash.rb
liquid-ext-1.1.0 lib/liquid/ext/hash.rb