Sha256: 4d1adc33326a4dcb7a0860cb47811f40bcfebb5986afb1d70b656a56a715428e

Contents?: true

Size: 1.17 KB

Versions: 1

Compression:

Stored size: 1.17 KB

Contents

require "hashwithindifferentaccess/version"

class HashWithIndifferentAccess < ::Hash #:nodoc:

  def initialize(hash={})
    super()
    hash.each do |key, value|
      self[convert_key(key)] = value
    end
  end

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

  def []=(key, value)
    super(convert_key(key), value)
  end

  def delete(key)
    super(convert_key(key))
  end

  def values_at(*indices)
    indices.collect { |key| self[convert_key(key)] }
  end

  def merge(other)
    dup.merge!(other)
  end

  def merge!(other)
    other.each do |key, value|
      self[convert_key(key)] = value
    end
    self
  end

  protected

  def convert_key(key)
    key.is_a?(Symbol) ? key.to_s : key
  end

  # Magic predicates. For instance:
  #
  #   options.force?                  # => !!options['force']
  #   options.shebang                 # => "/usr/lib/local/ruby"
  #   options.test_framework?(:rspec) # => options[:test_framework] == :rspec
  #
  def method_missing(method, *args, &block)
    method = method.to_s
    if method =~ /^(\w+)\?$/
      if args.empty?
        !!self[$1]
      else
        self[$1] == args.first
      end
    else
      self[method]
    end
  end

end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
hashwithindifferentaccess-0.1.1 lib/hashwithindifferentaccess.rb