Sha256: 9128c7e18cfa9d8232641322e9821d5a7c9ece40d1c067e94a34cea25ecba3c2

Contents?: true

Size: 1.16 KB

Versions: 13

Compression:

Stored size: 1.16 KB

Contents

class Array

  def recursively(&block)
    yield map do |item|
      if item.is_a?(self.class)
        item.recursively(&block)
      else
        item
      end
    end
  end

  def recursively!(&block)
    replace(recursively(&block))
  end

end


class Hash

  def recursively(&block)
    yeild inject({}) do |hash, (key, value)|
      if value.is_a?(Hash)
        hash[key] = value.recursively(&block)
      else
        hash[key] = value
      end
      hash
    end
  end

  def recursively!(&block)
    replace(recursively(&block))
  end

  # Same as Hash#merge but recursively merges sub-hashes.

  def recursive_merge(other)
    hash = self.dup
    other.each do |key, value|
      myval = self[key]
      if value.is_a?(Hash) && myval.is_a?(Hash)
        hash[key] = myval.recursive_merge(value)
      else
        hash[key] = value
      end
    end
    hash
  end

  # Same as Hash#merge! but recursively merges sub-hashes.

  def recursive_merge!(other)
    other.each do |key, value|
      myval = self[key]
      if value.is_a?(Hash) && myval.is_a?(Hash)
        myval.recursive_merge!(value)
      else
        self[key] = value
      end
    end
    self
  end

end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
facets-2.0.1 lib/more/facets/recursive.rb
facets-2.0.0 lib/more/facets/recursive.rb
facets-2.0.2 lib/more/facets/recursive.rb
facets-2.0.5 lib/more/facets/recursive.rb
facets-2.1.1 lib/more/facets/recursive.rb
facets-2.1.2 lib/more/facets/recursive.rb
facets-2.0.4 lib/more/facets/recursive.rb
facets-2.1.0 lib/more/facets/recursive.rb
facets-2.0.3 lib/more/facets/recursive.rb
facets-2.1.3 lib/more/facets/recursive.rb
facets-2.2.0 lib/more/facets/recursive.rb
facets-2.2.1 lib/more/facets/recursive.rb
facets-2.3.0 lib/more/facets/recursive.rb