Sha256: e4ce378aade0d134cb440c0187dc14f71875a3f8c6397ed1c3c2ca95673fe376
Contents?: true
Size: 1.78 KB
Versions: 7
Compression:
Stored size: 1.78 KB
Contents
# This class has dubious semantics and we only have it so that # people can write params[:key] instead of params['key'] class Mash < Hash def initialize(constructor = {}) if constructor.is_a?(Hash) super() update(constructor) else super(constructor) end end def default(key = nil) if key.is_a?(Symbol) && include?(key = key.to_s) self[key] else super end end alias_method :regular_writer, :[]= unless method_defined?(:regular_writer) alias_method :regular_update, :update unless method_defined?(:regular_update) def []=(key, value) regular_writer(convert_key(key), convert_value(value)) end def update(other_hash) other_hash.each_pair { |key, value| regular_writer(convert_key(key), convert_value(value)) } self end alias_method :merge!, :update def key?(key) super(convert_key(key)) end alias_method :include?, :key? alias_method :has_key?, :key? alias_method :member?, :key? def fetch(key, *extras) super(convert_key(key), *extras) end def values_at(*indices) indices.collect {|key| self[convert_key(key)]} end def dup Mash.new(self) end def merge(hash) self.dup.update(hash) end def delete(key) super(convert_key(key)) end def stringify_keys!; self end def symbolize_keys!; self end # Convert to a Hash with String keys. def to_hash Hash.new(default).merge(self) end protected def convert_key(key) key.kind_of?(Symbol) ? key.to_s : key end def convert_value(value) case value when Hash value.to_mash when Array value.collect { |e| e.is_a?(Hash) ? e.to_mash : e } else value end end end
Version data entries
7 entries across 7 versions & 1 rubygems