class Ardm::Mash
This class has dubious semantics and we only have it so that people can write params instead of params.
Public Class Methods
Initializes a new mash.
@param [Hash, Object] constructor
The default value for the mash. 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.
# File lib/ardm/support/mash.rb, line 12 def initialize(constructor = {}) if constructor.is_a?(Hash) super() update(constructor) else super(constructor) end end
Public Instance Methods
Sets the value
associated with the specified key
.
@param [Object] key The key to set. @param [Object] value The value to set the key to.
# File lib/ardm/support/mash.rb, line 42 def []=(key, value) regular_writer(convert_key(key), convert_value(value)) end
Gets the default value for the mash.
@param [Object] key
The default value for the mash. 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.
# File lib/ardm/support/mash.rb, line 27 def default(key = nil) if key.is_a?(Symbol) && include?(key = key.to_s) self[key] else super end end
@param [Object] key The key to delete from the mash.
# File lib/ardm/support/mash.rb, line 96 def delete(key) super(convert_key(key)) end
Returns a mash that includes everything but the given keys
.
@param [Array<String, Symbol>] *keys The mash keys to exclude.
@return [Mash] A new mash without the selected keys.
@example
{ :one => 1, :two => 2, :three => 3 }.except(:one) #=> { "two" => 2, "three" => 3 }
# File lib/ardm/support/mash.rb, line 109 def except(*keys) self.dup.except!(*keys.map {|k| convert_key(k)}) end
Removes the specified keys
from the mash.
@param [Array] *keys The mash keys to exclude.
@return [Hash] hash
@example
mash = { :one => 1, :two => 2, :three => 3 } mash.except!(:one, :two) mash # => { :three => 3 }
# File lib/ardm/support/mash.rb, line 123 def except!(*keys) keys.each { |key| delete(key) } self end
@param [Object] key The key to fetch. @param [Array] *extras Default value.
@return [Object] The value at key or the default value.
# File lib/ardm/support/mash.rb, line 76 def fetch(key, *extras) super(convert_key(key), *extras) end
Determines whether the mash contains the specified key
.
@param [Object] key The key to check for. @return [Boolean] True if the key exists in the mash.
# File lib/ardm/support/mash.rb, line 64 def key?(key) super(convert_key(key)) end
@param [Hash] hash The hash to merge with the mash.
@return [Mash] A new mash with the hash values merged in.
# File lib/ardm/support/mash.rb, line 91 def merge(hash) self.dup.update(hash) end
Used to provide the same interface as Hash.
@return [Mash] This mash unchanged.
# File lib/ardm/support/mash.rb, line 131 def stringify_keys!; self end
@return [Hash] The mash as a Hash with symbolized keys.
# File lib/ardm/support/mash.rb, line 134 def symbolize_keys h = Hash.new(default) each { |key, val| h[key.to_sym] = val } h end
@return [Hash] The mash as a Hash with string keys.
# File lib/ardm/support/mash.rb, line 141 def to_hash Hash.new(default).merge(self) end
Updates the mash with the key/value pairs from the specified hash.
@param [Hash] other_hash
A hash to update values in the mash with. The keys and the values will be converted to Mash format.
@return [Mash] The updated mash.
# File lib/ardm/support/mash.rb, line 53 def update(other_hash) other_hash.each_pair { |key, value| regular_writer(convert_key(key), convert_value(value)) } self end
@param [Array] *indices
The keys to retrieve values for.
@return [Array] The values at each of the provided keys.
# File lib/ardm/support/mash.rb, line 84 def values_at(*indices) indices.collect {|key| self[convert_key(key)]} end
Protected Instance Methods
@param [Object] key The key to convert.
@param [Object]
The converted key. If the key was a symbol, it will be converted to a string.
@api private
# File lib/ardm/support/mash.rb, line 153 def convert_key(key) key.kind_of?(Symbol) ? key.to_s : key end
@param [Object] value The value to convert.
@return [Object]
The converted value. A Hash or an Array of hashes, will be converted to their Mash equivalents.
@api private
# File lib/ardm/support/mash.rb, line 164 def convert_value(value) if value.class == Hash mash = Mash.new(value) mash.default = value.default mash elsif value.is_a?(Array) value.collect { |e| convert_value(e) } else value end end