class DataMapper::Mash

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

Public Class Methods

new(constructor = {}) click to toggle source

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.
Calls superclass method
# File lib/dm-core/support/mash.rb, line 12
def initialize(constructor = {})
  if constructor.is_a?(Hash)
    super()
    update(constructor)
  else
    super(constructor)
  end
end

Public Instance Methods

[]=(key, value) click to toggle source

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/dm-core/support/mash.rb, line 42
def []=(key, value)
  regular_writer(convert_key(key), convert_value(value))
end
Also aliased as: regular_writer
default(key = nil) click to toggle source

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.
Calls superclass method
# File lib/dm-core/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
delete(key) click to toggle source

@param [Object] key The key to delete from the mash.

Calls superclass method
# File lib/dm-core/support/mash.rb, line 96
def delete(key)
  super(convert_key(key))
end
except(*keys) click to toggle source

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/dm-core/support/mash.rb, line 109
def except(*keys)
  self.dup.except!(*keys.map {|k| convert_key(k)})
end
except!(*keys) click to toggle source

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/dm-core/support/mash.rb, line 123
def except!(*keys)
  keys.each { |key| delete(key) }
  self
end
fetch(key, *extras) click to toggle source

@param [Object] key The key to fetch. @param [Array] *extras Default value.

@return [Object] The value at key or the default value.

Calls superclass method
# File lib/dm-core/support/mash.rb, line 76
def fetch(key, *extras)
  super(convert_key(key), *extras)
end
has_key?(key)
Alias for: key?
include?(key)
Alias for: key?
key?(key) click to toggle source

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.

Calls superclass method
# File lib/dm-core/support/mash.rb, line 64
def key?(key)
  super(convert_key(key))
end
Also aliased as: include?, has_key?, member?
member?(key)
Alias for: key?
merge(hash) click to toggle source

@param [Hash] hash The hash to merge with the mash.

@return [Mash] A new mash with the hash values merged in.

# File lib/dm-core/support/mash.rb, line 91
def merge(hash)
  self.dup.update(hash)
end
merge!(other_hash)
Alias for: update
regular_update(other_hash)
Alias for: update
regular_writer(key, value)
Alias for: []=
stringify_keys!() click to toggle source

Used to provide the same interface as Hash.

@return [Mash] This mash unchanged.

# File lib/dm-core/support/mash.rb, line 131
def stringify_keys!; self end
symbolize_keys() click to toggle source

@return [Hash] The mash as a Hash with symbolized keys.

# File lib/dm-core/support/mash.rb, line 134
def symbolize_keys
  h = Hash.new(default)
  each { |key, val| h[key.to_sym] = val }
  h
end
to_hash() click to toggle source

@return [Hash] The mash as a Hash with string keys.

# File lib/dm-core/support/mash.rb, line 141
def to_hash
  Hash.new(default).replace(self)
end
update(other_hash) click to toggle source

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/dm-core/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
Also aliased as: regular_update, merge!
values_at(*indices) click to toggle source

@param [Array] *indices

The keys to retrieve values for.

@return [Array] The values at each of the provided keys.

# File lib/dm-core/support/mash.rb, line 84
def values_at(*indices)
  indices.collect {|key| self[convert_key(key)]}
end

Protected Instance Methods

convert_key(key) click to toggle source

@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/dm-core/support/mash.rb, line 153
def convert_key(key)
  key.kind_of?(Symbol) ? key.to_s : key
end
convert_value(value) click to toggle source

@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/dm-core/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