Sha256: 5f16d1954a23d8f067b31d209428b158747d40a940d363b19b341c482bb3b574

Contents?: true

Size: 1.09 KB

Versions: 2

Compression:

Stored size: 1.09 KB

Contents

class Hash
  class Indifferent < Hash

    def initialize(hash={})
      update hash
    end

    def [](key)
      super normalize_key(key)
    end

    def []=(key, value)
      super normalize_key(key), normalize_value(value)
    end
    alias_method :store, :[]=

    def delete(key)
      super normalize_key(key)
    end

    def update(hash)
      hash.each do |key, value|
        store normalize_key(key), normalize_value(value)
      end
      self
    end
    alias_method :merge!, :update

    def merge(hash)
      dup.update hash
    end

    def key?(key)
      super normalize_key(key)
    end
    alias_method :include?, :key?
    alias_method :has_key?, :key?
    alias_method :member?, :key?

    def fetch(key, *args, &block)
      super normalize_key(key), *args, &block
    end

    private

    def normalize_key(key)
      key.kind_of?(String) ? key.to_sym : key
    end

    def normalize_value(value)
      if value.kind_of? Hash
        self.class.new value
      elsif value.kind_of? Array
        value.map { |v| normalize_value v }
      else
        value
      end
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
hash_ext-0.1.1 lib/hash_ext/indifferent.rb
hash_ext-0.1.0 lib/hash_ext/indifferent.rb