Class: Mash

Inherits:
Hash show all
Defined in:
lib/spice/core_ext/mash.rb

Overview

This class has dubious semantics and we only have it so that people can write params instead of params.

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Hash

#deep_merge, #except!, #symbolize_keys!

Constructor Details

#initialize(constructor = {}) ⇒ Mash

Alternatives

If constructor is a Hash, a new mash will be created based on the keys of the hash and no default value will be set.

Parameters:

  • constructor (Object) (defaults to: {})

    The default value for the mash. Defaults to an empty hash.


59
60
61
62
63
64
65
66
# File 'lib/spice/core_ext/mash.rb', line 59

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

Class Method Details

.from_hash(hash) ⇒ Mash

The input Hash's default value is maintained

Returns:

  • (Mash)

    Convert a Hash into a Mash


189
190
191
192
193
# File 'lib/spice/core_ext/mash.rb', line 189

def self.from_hash(hash)
  mash = Mash.new(hash)
  mash.default = hash.default
  mash
end

Instance Method Details

#[]=(key, value) ⇒ Object

Parameters:

  • key (Object)

    The key to set.

  • value (Object)

    The value to set the key to.

See Also:

  • #convert_key
  • #convert_value

104
105
106
# File 'lib/spice/core_ext/mash.rb', line 104

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

#default(key = nil) ⇒ Object

Parameters:

  • key (Object) (defaults to: nil)

    The default value for the mash. Defaults to nil.

    Alternatives

    If key is a Symbol and it is a key in the mash, then the default value will be set to the value matching the key.


87
88
89
90
91
92
93
# File 'lib/spice/core_ext/mash.rb', line 87

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

#delete(key) ⇒ Object

Parameters:

  • key (Object)

    The key to delete from the mash.\


157
158
159
# File 'lib/spice/core_ext/mash.rb', line 157

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

#except(*keys) ⇒ Mash

Returns A new mash without the selected keys.

Examples:

{ :one => 1, :two => 2, :three => 3 }.except(:one)
  #=> { "two" => 2, "three" => 3 }

Returns:

  • (Mash)

    A new mash without the selected keys.


166
167
168
# File 'lib/spice/core_ext/mash.rb', line 166

def except(*keys)
  super(*keys.map {|k| convert_key(k)})
end

#fetch(key, *extras) ⇒ Object

Returns The value at key or the default value.

Parameters:

  • key (Object)

    The key to fetch. This will be run through convert_key.

  • extras (Array)

    Default value.

Returns:

  • (Object)

    The value at key or the default value.


136
137
138
# File 'lib/spice/core_ext/mash.rb', line 136

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

#initialize_copy(orig) ⇒ Object

Returns A new copied Mash.

Parameters:

  • orig (Object)

    Mash being copied

Returns:

  • (Object)

    A new copied Mash


71
72
73
74
75
76
77
78
79
80
# File 'lib/spice/core_ext/mash.rb', line 71

def initialize_copy(orig)
  super
  # Handle nested values
  each do |k,v|
    if v.kind_of?(Mash) || v.is_a?(Array)
      self[k] = v.dup
    end
  end
  self
end

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

Returns True if the key exists in the mash.

Parameters:

  • key (Object)

    The key to check for. This will be run through convert_key.

Returns:

  • (Boolean)

    True if the key exists in the mash.


123
124
125
# File 'lib/spice/core_ext/mash.rb', line 123

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

#merge(hash) ⇒ Mash

Returns A new mash with the hash values merged in.

Parameters:

  • hash (Hash)

    The hash to merge with the mash.

Returns:

  • (Mash)

    A new mash with the hash values merged in.


151
152
153
# File 'lib/spice/core_ext/mash.rb', line 151

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

#regular_updateObject


96
# File 'lib/spice/core_ext/mash.rb', line 96

alias_method :regular_update, :update

#regular_writerObject


95
# File 'lib/spice/core_ext/mash.rb', line 95

alias_method :regular_writer, :[]=

#stringify_keys!Mash

Used to provide the same interface as Hash.

Returns:

  • (Mash)

    This mash unchanged.


173
# File 'lib/spice/core_ext/mash.rb', line 173

def stringify_keys!; self end

#symbolize_keysHash

Returns The mash as a Hash with symbolized keys.

Returns:

  • (Hash)

    The mash as a Hash with symbolized keys.


176
177
178
179
180
# File 'lib/spice/core_ext/mash.rb', line 176

def symbolize_keys
  h = Hash.new(default)
  each { |key, val| h[key.to_sym] = val }
  h
end

#to_hashHash

Returns The mash as a Hash with string keys.

Returns:

  • (Hash)

    The mash as a Hash with string keys.


183
184
185
# File 'lib/spice/core_ext/mash.rb', line 183

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

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

Returns The updated mash.

Parameters:

  • other_hash (Hash)

    A hash to update values in the mash with. The keys and the values will be converted to Mash format.

Returns:

  • (Mash)

    The updated mash.


113
114
115
116
# File 'lib/spice/core_ext/mash.rb', line 113

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

#values_at(*indices) ⇒ Array

Returns The values at each of the provided keys.

Parameters:

  • indices (Array)

    The keys to retrieve values for. These will be run through convert_key.

Returns:

  • (Array)

    The values at each of the provided keys


144
145
146
# File 'lib/spice/core_ext/mash.rb', line 144

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