Sha256: 3b22fa344b5a7e6531aeda7566bdfa01732f1954c44c6e4445af62f6d2d53ff3

Contents?: true

Size: 1.08 KB

Versions: 14

Compression:

Stored size: 1.08 KB

Contents

# Hash#deep_merge
# From: http://pastie.textmate.org/pastes/30372, Elliott Hird
# Source: http://gemjack.com/gems/tartan-0.1.1/classes/Hash.html
# This file contains extensions to Ruby and other useful snippits of code.
# Time to extend Hash with some recursive merging magic.

class Hash

  # Merges self with another hash, recursively.
  # 
  # This code was lovingly stolen from some random gem:
  # http://gemjack.com/gems/tartan-0.1.1/classes/Hash.html
  # 
  # Thanks to whoever made it.

  def deep_merge(hash)
    target = dup
    
    hash.keys.each do |key|
      if hash[key].is_a? Hash and self[key].is_a? Hash
        target[key] = target[key].deep_merge(hash[key])
        next
      end
      
      target[key] = hash[key]
    end
    
    target
  end


  # From: http://www.gemtacular.com/gemdocs/cerberus-0.2.2/doc/classes/Hash.html
  # File lib/cerberus/utils.rb, line 42

  def deep_merge!(second)
    second.each_pair do |k,v|
      if self[k].is_a?(Hash) and second[k].is_a?(Hash)
        self[k].deep_merge!(second[k])
      else
        self[k] = second[k]
      end
    end
  end

end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
distil-0.14.5.a lib/distil/hash-additions.rb
distil-0.14.4 lib/distil/hash-additions.rb
distil-0.14.3 lib/distil/hash-additions.rb
distil-0.14.2 lib/distil/hash-additions.rb
distil-0.14.2.a lib/distil/hash-additions.rb
distil-0.14.1 lib/distil/hash-additions.rb
distil-0.14.1.a lib/distil/hash-additions.rb
distil-0.14.0 lib/distil/hash-additions.rb
distil-0.14.0.i lib/distil/hash-additions.rb
distil-0.14.0.h lib/distil/hash-additions.rb
distil-0.14.0.g lib/distil/hash-additions.rb
distil-0.14.0.d lib/distil/hash-additions.rb
distil-0.14.0.c lib/distil/hash-additions.rb
distil-0.14.0.b lib/distil/hash-additions.rb