def hash_reassoc(hash, key_a, key_b = nil, &block)
      if key_b
        hash_reassoc1(hash, key_a) do |value|
          hash_reassoc(value, key_b, &block)
        end
      else
        hash_reassoc1(hash, key_a, &block)
      end
    end
def hash_reassoc(hash, key_a, key_b = nil, &block)
      if key_b
        hash_reassoc1(hash, key_a) do |value|
          hash_reassoc(value, key_b, &block)
        end
      else
        hash_reassoc1(hash, key_a, &block)
      end
    end
Internal: Duplicate and store key/value on new frozen hash.

 Similar to Hash#store for nested frozen hashes.

 hash  - Hash
 key_a - Object key. Use multiple keys for nested hashes.
 key_b - Object key. Use multiple keys for nested hashes.
 block - Receives current value at key.

 Examples

     config = {paths: ["/bin", "/sbin"]}.freeze
     new_config = hash_reassoc(config, :paths) do |paths|
       paths << "/usr/local/bin"
     end

 Returns duplicated frozen Hash.