Sha256: 7a5d37d5ed37a16a4ab2f91da65db34ad0a3dd8ad3173e56d4c068346e7f774e

Contents?: true

Size: 1.02 KB

Versions: 190

Compression:

Stored size: 1.02 KB

Contents

# frozen_string_literal: true

class Hash
  # Returns a new hash with +self+ and +other_hash+ merged recursively.
  #
  #   h1 = { a: true, b: { c: [1, 2, 3] } }
  #   h2 = { a: false, b: { x: [3, 4, 5] } }
  #
  #   h1.deep_merge(h2) # => { a: false, b: { c: [1, 2, 3], x: [3, 4, 5] } }
  #
  # Like with Hash#merge in the standard library, a block can be provided
  # to merge values:
  #
  #   h1 = { a: 100, b: 200, c: { c1: 100 } }
  #   h2 = { b: 250, c: { c1: 200 } }
  #   h1.deep_merge(h2) { |key, this_val, other_val| this_val + other_val }
  #   # => { a: 100, b: 450, c: { c1: 300 } }
  def deep_merge(other_hash, &block)
    dup.deep_merge!(other_hash, &block)
  end

  # Same as +deep_merge+, but modifies +self+.
  def deep_merge!(other_hash, &block)
    merge!(other_hash) do |key, this_val, other_val|
      if this_val.is_a?(Hash) && other_val.is_a?(Hash)
        this_val.deep_merge(other_val, &block)
      elsif block_given?
        block.call(key, this_val, other_val)
      else
        other_val
      end
    end
  end
end

Version data entries

190 entries across 176 versions & 24 rubygems

Version Path
activesupport-7.0.8.6 lib/active_support/core_ext/hash/deep_merge.rb
activesupport-6.1.7.10 lib/active_support/core_ext/hash/deep_merge.rb
activesupport-6.1.7.9 lib/active_support/core_ext/hash/deep_merge.rb
activesupport-7.0.8.5 lib/active_support/core_ext/hash/deep_merge.rb
blacklight-spotlight-3.6.0.beta8 vendor/bundle/ruby/3.2.0/gems/activesupport-7.0.8.4/lib/active_support/core_ext/hash/deep_merge.rb
cm-admin-1.5.22 vendor/bundle/ruby/3.3.0/gems/activesupport-7.0.5.1/lib/active_support/core_ext/hash/deep_merge.rb
cm-admin-1.5.21 vendor/bundle/ruby/3.3.0/gems/activesupport-7.0.5.1/lib/active_support/core_ext/hash/deep_merge.rb
cm-admin-1.5.20 vendor/bundle/ruby/3.3.0/gems/activesupport-7.0.5.1/lib/active_support/core_ext/hash/deep_merge.rb
activesupport-7.0.8.4 lib/active_support/core_ext/hash/deep_merge.rb
activesupport-6.1.7.8 lib/active_support/core_ext/hash/deep_merge.rb
activesupport-7.0.8.1 lib/active_support/core_ext/hash/deep_merge.rb
activesupport-6.1.7.7 lib/active_support/core_ext/hash/deep_merge.rb
scrapbook-0.3.2 vendor/ruby/2.7.0/gems/activesupport-7.0.2.3/lib/active_support/core_ext/hash/deep_merge.rb
scrapbook-0.3.2 vendor/ruby/2.7.0/gems/activesupport-7.0.3.1/lib/active_support/core_ext/hash/deep_merge.rb
scrapbook-0.3.2 vendor/ruby/2.7.0/gems/activesupport-6.1.6.1/lib/active_support/core_ext/hash/deep_merge.rb
activesupport-7.1.0.beta1 lib/active_support/core_ext/hash/deep_merge.rb
activesupport-7.0.8 lib/active_support/core_ext/hash/deep_merge.rb
activesupport-7.0.7.2 lib/active_support/core_ext/hash/deep_merge.rb
activesupport-6.1.7.6 lib/active_support/core_ext/hash/deep_merge.rb
activesupport-7.0.7.1 lib/active_support/core_ext/hash/deep_merge.rb