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

Version Path
merb-0.4.1 lib/merb/core_ext/mash.rb
merb-0.4.0 lib/merb/core_ext/mash.rb
merb-0.5.0 lib/merb/core_ext/mash.rb
merb-0.4.2 lib/merb/core_ext/mash.rb
merb-0.5.1 lib/merb/core_ext/mash.rb
merb-0.5.3 lib/merb/core_ext/mash.rb
merb-0.5.2 lib/merb/core_ext/mash.rb