Sha256: 6ee893a60c0db0b8e1dbd77f94389262364d8cbb9d23fb2af5bf72c8d5d07f9a

Contents?: true

Size: 1.36 KB

Versions: 6

Compression:

Stored size: 1.36 KB

Contents

class Hash
  # from: activesupport/lib/active_support/core_ext/hash/keys.rb
  #
  # hash = { name: 'Rob', age: '28' }
  # hash.transform_keys{ |key| key.to_s.upcase }
  # => { "NAME" => "Rob", "AGE" => "28" }
  def transform_keys
    result = {}
    each_key do |key|
      result[yield(key)] = self[key]
    end
    result
  end

  def transform_keys!(&block)
    keys.each do |key|
      value = delete(key)
      self[yield(key)] = value.is_a?(Hash) ? value.transform_keys!(&block) : value
    end
    self
  end

  # hash = { 'name' => 'Rob', 'age' => '28' }
  # hash.symbolize_keys
  # => { name: "Rob", age: "28" }
  def symbolize_keys
    transform_keys { |key| key.to_sym rescue key }
  end

  # from: activesupport/lib/active_support/core_ext/hash/keys.rb, line 135
  def symbolize_keys!
    transform_keys! { |key| key.to_sym rescue key }
  end

  # Merges the caller into +other_hash+. For example,
  #
  #   options = options.reverse_merge(size: 25, velocity: 10)
  #
  # is equivalent to
  #
  #   options = { size: 25, velocity: 10 }.merge(options)
  #
  # This is particularly useful for initializing an options hash
  # with default values.
  def reverse_merge(other_hash)
    other_hash.merge(self)
  end

  # Destructive +reverse_merge+.
  def reverse_merge!(other_hash)
    # right wins if there is no left
    merge!(other_hash) { |_key, left, _right| left }
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
gem_bootstrap-0.1.3 lib/gem_bootstrap/core_ext/hash/keys.rb
gem_bootstrap-0.1.2 lib/gem_bootstrap/core_ext/hash/keys.rb
gem_bootstrap-0.1.1 lib/gem_bootstrap/core_ext/hash/keys.rb
gem_bootstrap-0.1.0 lib/gem_bootstrap/core_ext/hash/keys.rb
gem_bootstrap-0.0.2.pre lib/gem_bootstrap/core_ext/hash/keys.rb
gem_bootstrap-0.0.1 lib/gem_bootstrap/core_ext/hash/keys.rb