Class: HashWithIndifferentAccess

Inherits:
Hash show all
Defined in:
lib/webrat/core_extensions/hash_with_indifferent_access.rb

Overview

This class has dubious semantics and we only have it so that people can write params instead of params and they get the same value for both keys.

Instance Method Summary collapse

Methods inherited from Hash

#with_indifferent_access

Constructor Details

#initialize(constructor = {}) ⇒ HashWithIndifferentAccess

:nodoc:



5
6
7
8
9
10
11
12
# File 'lib/webrat/core_extensions/hash_with_indifferent_access.rb', line 5

def initialize(constructor = {})
  if constructor.is_a?(Hash)
    super()
    update(constructor)
  else
    super(constructor)
  end
end

Instance Method Details

#[]=(key, value) ⇒ Object

Assigns a new value to the hash.

Example:

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


33
34
35
# File 'lib/webrat/core_extensions/hash_with_indifferent_access.rb', line 33

def []=(key, value)
  regular_writer(convert_key(key), convert_value(value))
end

#default(key = nil) ⇒ Object



14
15
16
17
18
19
20
# File 'lib/webrat/core_extensions/hash_with_indifferent_access.rb', line 14

def default(key = nil)
  if key.is_a?(Symbol) && include?(key = key.to_s)
    self[key]
  else
    super
  end
end

#delete(key) ⇒ Object

Removes a specified key from the hash.



95
96
97
# File 'lib/webrat/core_extensions/hash_with_indifferent_access.rb', line 95

def delete(key)
  super(convert_key(key))
end

#dupObject

Returns an exact copy of the hash.



84
85
86
# File 'lib/webrat/core_extensions/hash_with_indifferent_access.rb', line 84

def dup
  HashWithIndifferentAccess.new(self)
end

#fetch(key, *extras) ⇒ Object

Fetches the value for the specified key, same as doing hash



74
75
76
# File 'lib/webrat/core_extensions/hash_with_indifferent_access.rb', line 74

def fetch(key, *extras)
  super(convert_key(key), *extras)
end

#key?(key) ⇒ Boolean Also known as: include?, has_key?, member?

Checks the hash for a key matching the argument passed in

Returns:

  • (Boolean)


65
66
67
# File 'lib/webrat/core_extensions/hash_with_indifferent_access.rb', line 65

def key?(key)
  super(convert_key(key))
end

#merge(hash) ⇒ Object

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



90
91
92
# File 'lib/webrat/core_extensions/hash_with_indifferent_access.rb', line 90

def merge(hash)
  self.dup.update(hash)
end

#regular_updateObject



23
# File 'lib/webrat/core_extensions/hash_with_indifferent_access.rb', line 23

alias_method :regular_update, :update

#regular_writerObject



22
# File 'lib/webrat/core_extensions/hash_with_indifferent_access.rb', line 22

alias_method :regular_writer, :[]=

#stringify_keys!Object



99
# File 'lib/webrat/core_extensions/hash_with_indifferent_access.rb', line 99

def stringify_keys!; self end

#symbolize_keys!Object



100
# File 'lib/webrat/core_extensions/hash_with_indifferent_access.rb', line 100

def symbolize_keys!; self end

#to_hashObject

Convert to a Hash with String keys.



104
105
106
# File 'lib/webrat/core_extensions/hash_with_indifferent_access.rb', line 104

def to_hash
  Hash.new(default).merge(self)
end

#to_options!Object



101
# File 'lib/webrat/core_extensions/hash_with_indifferent_access.rb', line 101

def to_options!; self end

#update(other_hash) ⇒ Object Also known as: merge!

Updates the instantized hash with values from the second.

Example:

>> hash_1 = HashWithIndifferentAccess.new
=> {}

>> hash_1[:key] = "value"
=> "value"

>> hash_2 = HashWithIndifferentAccess.new
=> {}

>> hash_2[:key] = "New Value!"
=> "New Value!"

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


57
58
59
60
# File 'lib/webrat/core_extensions/hash_with_indifferent_access.rb', line 57

def update(other_hash)
  other_hash.each_pair { |key, value| regular_writer(convert_key(key), convert_value(value)) }
  self
end

#values_at(*indices) ⇒ Object

Returns an array of the values at the specified indicies.



79
80
81
# File 'lib/webrat/core_extensions/hash_with_indifferent_access.rb', line 79

def values_at(*indices)
  indices.collect {|key| self[convert_key(key)]}
end