Class Hashish
In: lib/core_ext/hashish.rb
Parent: Hash

Stolen from Rails Active Support and renamed to Hashish.

This class has dubious semantics and we only have it so that people can write `params[:key]` instead of `params[‘key’]` and they get the same value for both keys.

Methods

Classes and Modules

Class Hashish::Hash

External Aliases

[]= -> regular_writer

Public Class methods

[Source]

# File lib/core_ext/hashish.rb, line 7
  def initialize(constructor = {})
    if constructor.is_a?(Hash)
      super()
      update(constructor)
    else
      super(constructor)
    end
  end

Public Instance methods

Assigns a new value to the hash:

    hash = HashWithIndifferentAccess.new
    hash[:key] = "value"

[Source]

# File lib/core_ext/hashish.rb, line 31
  def []=(key, value)
    regular_writer(convert_key(key), convert_value(value))
  end

[Source]

# File lib/core_ext/hashish.rb, line 117
  def convert_key(key)
    key.kind_of?(Symbol) ? key.to_s : key
  end

[Source]

# File lib/core_ext/hashish.rb, line 121
  def convert_value(value)
    case value
    when Hash
      value.with_indifferent_access
    when Array
      value.collect { |e| e.is_a?(Hash) ? e.with_indifferent_access : e }
    else
      value
    end
  end

[Source]

# File lib/core_ext/hashish.rb, line 16
  def default(key = nil)
    if key.is_a?(Symbol) && include?(key = key.to_s)
      self[key]
    else
      super
    end
  end

Removes a specified key from the hash.

[Source]

# File lib/core_ext/hashish.rb, line 102
  def delete(key)
    super(convert_key(key))
  end

Returns an exact copy of the hash.

[Source]

# File lib/core_ext/hashish.rb, line 81
  def dup
    HashWithIndifferentAccess.new(self)
  end

Fetches the value for the specified key, same as doing `hash[key]`.

[Source]

# File lib/core_ext/hashish.rb, line 66
  def fetch(key, *extras)
    super(convert_key(key), *extras)
  end

Checks the hash for a key matching the argument passed in:

    hash = HashWithIndifferentAccess.new
    hash["key"] = "value"
    hash.key? :key  # => true
    hash.key? "key" # => true

[Source]

# File lib/core_ext/hashish.rb, line 57
  def key?(key)
    super(convert_key(key))
  end

Merges the instantized and the specified hashes together, giving precedence to the values from the second hash Does not overwrite the existing hash.

[Source]

# File lib/core_ext/hashish.rb, line 87
  def merge(hash)
    self.dup.update(hash)
  end

Performs the opposite of merge, with the keys and values from the first hash taking precedence over the second. This overloaded definition prevents returning a regular hash, if reverse_merge is called on a HashWithDifferentAccess.

[Source]

# File lib/core_ext/hashish.rb, line 93
  def reverse_merge(other_hash)
    super other_hash.with_indifferent_access
  end

[Source]

# File lib/core_ext/hashish.rb, line 97
  def reverse_merge!(other_hash)
    replace(reverse_merge( other_hash ))
  end

[Source]

# File lib/core_ext/hashish.rb, line 106
  def stringify_keys!; self end

[Source]

# File lib/core_ext/hashish.rb, line 107
  def symbolize_keys!; self end

Convert to a Hash with String keys.

[Source]

# File lib/core_ext/hashish.rb, line 111
  def to_hash
    Hash.new(default).merge!(self)
  end

[Source]

# File lib/core_ext/hashish.rb, line 108
  def to_options!; self end

Updates the instantized hash with values from the second:

    hash_1 = HashWithIndifferentAccess.new
    hash_1[:key] = "value"

    hash_2 = HashWithIndifferentAccess.new
    hash_2[:key] = "New Value!"

    hash_1.update(hash_2) # => {"key"=>"New Value!"}

[Source]

# File lib/core_ext/hashish.rb, line 44
  def update(other_hash)
    other_hash.each_pair { |key, value| regular_writer(convert_key(key), convert_value(value)) }
    self
  end

Returns an array of the values at the specified indices:

    hash = HashWithIndifferentAccess.new
    hash[:a] = "x"
    hash[:b] = "y"
    hash.values_at("a", "b") # => ["x", "y"]

[Source]

# File lib/core_ext/hashish.rb, line 76
  def values_at(*indices)
    indices.collect {|key| self[convert_key(key)]}
  end

[Validate]