Class: Object::HashWithIndifferentAccess

### Home Classes Methods

### In Files

- lib/active_support/hash_with_indifferent_access.rb

### Parent

Hash

### Methods

- ::new
- ::new_from_hash_copying_default
- #[]=
- #convert_key
- #convert_value
- #default
- #delete
- #dup
- #extractable_options?
- #fetch
- #has_key?
- #include?
- #key?
- #member?
- #merge
- #merge!
- #regular_update
- #regular_writer
- #reverse_merge
- #reverse_merge!
- #store
- #stringify_keys
- #stringify_keys!
- #symbolize_keys
- #to_hash
- #to_options!
- #update
- #values_at

### Class/Module Index

Quicksearch

- ActiveSupport
- ActiveSupport::Autoload
- ActiveSupport::BacktraceCleaner
- ActiveSupport::Base64
- ActiveSupport::BasicObject
- ActiveSupport::Benchmarkable
- ActiveSupport::BufferedLogger
- ActiveSupport::BufferedLogger::Severity
- ActiveSupport::Cache
- ActiveSupport::Cache::CompressedMemCacheStore
- ActiveSupport::Cache::Entry
- ActiveSupport::Cache::FileStore
- ActiveSupport::Cache::MemCacheStore
- ActiveSupport::Cache::MemoryStore
- ActiveSupport::Cache::Store
- ActiveSupport::Cache::Strategy
- ActiveSupport::Cache::Strategy::LocalCache
- ActiveSupport::Cache::Strategy::LocalCache::LocalStore
- ActiveSupport::Cache::SynchronizedMemoryStore
- ActiveSupport::Callbacks
- ActiveSupport::Callbacks::Callback
- ActiveSupport::Callbacks::CallbackChain
- ActiveSupport::Callbacks::ClassMethods
- ActiveSupport::Concern
- ActiveSupport::Configurable
- ActiveSupport::Configurable::ClassMethods
- ActiveSupport::Dependencies
- ActiveSupport::Dependencies::Reference
- ActiveSupport::Dependencies::WatchStack
- ActiveSupport::Deprecation
- ActiveSupport::DescendantsTracker
- ActiveSupport::Duration
- ActiveSupport::FileUpdateChecker
- ActiveSupport::Gzip
- ActiveSupport::Gzip::Stream
- ActiveSupport::HashWithIndifferentAccess
- ActiveSupport::HashWithIndifferentAccess
- ActiveSupport::Inflector
- ActiveSupport::Inflector::Inflections
- ActiveSupport::InheritableOptions
- ActiveSupport::JSON
- ActiveSupport::JSON::Backends
- ActiveSupport::JSON::Backends::JSONGem
- ActiveSupport::JSON::Backends::Yajl
- ActiveSupport::JSON::Backends::Yaml
- ActiveSupport::JSON::Encoding
- ActiveSupport::JSON::Encoding::CircularReferenceError
- ActiveSupport::JSON::Encoding::Encoder
- ActiveSupport::JSON::Variable
- ActiveSupport::LogSubscriber
- ActiveSupport::LogSubscriber::TestHelper
- ActiveSupport::LogSubscriber::TestHelper::MockLogger
- ActiveSupport::Memoizable
- ActiveSupport::Memoizable::InstanceMethods
- ActiveSupport::MessageEncryptor
- ActiveSupport::MessageEncryptor::InvalidMessage
- ActiveSupport::MessageVerifier
- ActiveSupport::MessageVerifier::InvalidSignature
- ActiveSupport::Multibyte
- ActiveSupport::Multibyte::Chars
- ActiveSupport::Multibyte::EncodingError
- ActiveSupport::Multibyte::Unicode
- ActiveSupport::Multibyte::Unicode::Codepoint
- ActiveSupport::Multibyte::Unicode::UnicodeDatabase
- ActiveSupport::Notifications
- ActiveSupport::Notifications::Event
- ActiveSupport::Notifications::Fanout
- ActiveSupport::Notifications::Instrumenter
- ActiveSupport::OrderedOptions
- ActiveSupport::Railtie
- ActiveSupport::Rescuable
- ActiveSupport::Rescuable::ClassMethods
- ActiveSupport::SafeBuffer
- ActiveSupport::SecureRandom
- ActiveSupport::StringInquirer
- ActiveSupport::TestCase
- ActiveSupport::Testing
- ActiveSupport::Testing::Assertions
- ActiveSupport::Testing::Declarative
- ActiveSupport::Testing::Isolation
- ActiveSupport::Testing::Isolation::Forking
- ActiveSupport::Testing::Isolation::MiniTest
- ActiveSupport::Testing::Isolation::Subprocess
- ActiveSupport::Testing::Isolation::TestUnit
- ActiveSupport::Testing::Pending
- ActiveSupport::Testing::Performance
- ActiveSupport::Testing::Performance::Benchmarker
- ActiveSupport::Testing::Performance::Metrics
- ActiveSupport::Testing::Performance::Metrics::Base
- ActiveSupport::Testing::Performance::Metrics::CpuTime
- ActiveSupport::Testing::Performance::Metrics::GcRuns
- ActiveSupport::Testing::Performance::Metrics::GcTime
- ActiveSupport::Testing::Performance::Metrics::Memory
- ActiveSupport::Testing::Performance::Metrics::Objects
- ActiveSupport::Testing::Performance::Metrics::ProcessTime
- ActiveSupport::Testing::Performance::Metrics::Time
- ActiveSupport::Testing::Performance::Metrics::WallTime
- ActiveSupport::Testing::Performance::Performer
- ActiveSupport::Testing::Performance::Profiler
- ActiveSupport::Testing::ProxyTestResult
- ActiveSupport::Testing::RemoteError
- ActiveSupport::Testing::SetupAndTeardown
- ActiveSupport::Testing::SetupAndTeardown::ClassMethods
- ActiveSupport::Testing::SetupAndTeardown::ForClassicTestUnit
- ActiveSupport::Testing::SetupAndTeardown::ForMiniTest
- ActiveSupport::TimeWithZone
- ActiveSupport::TimeZone
- ActiveSupport::XmlMini
- ActiveSupport::XmlMini_LibXMLSAX
- ActiveSupport::XmlMini_LibXMLSAX::HashBuilder
- ActiveSupport::XmlMini_NokogiriSAX
- ActiveSupport::XmlMini_NokogiriSAX::HashBuilder
- Test
- Test::Unit
- Test::Unit::Collector
- Test::Unit::Collector::ObjectSpace
- Object
- Object::HashWithIndifferentAccess
- Object::MissingSourceFile
- ERB
- ERB::Util
- I18n
- I18n::Railtie
- LoadError
- LoadError
- Logger
- Logger::SimpleFormatter
- Array
- Benchmark
- BigDecimal
- Class
- Date
- DateTime
- Enumerable
- FalseClass
- File
- Fixnum
- Float
- Hash
- Integer
- Kernel
- Module
- NameError
- NilClass
- Numeric
- Process
- Range
- Regexp
- String
- Symbol
- Time
- TrueClass

No matching classes.

# Object::HashWithIndifferentAccess

### Public Class Methods

new(constructor = {}) click to toggle source

    # File lib/active_support/hash_with_indifferent_access.rb, line 13
    def initialize(constructor = {})
      if constructor.is_a?(Hash)
        super()
        update(constructor)
      else
        super(constructor)
      end
    end

new_from_hash_copying_default(hash) click to toggle source

    # File lib/active_support/hash_with_indifferent_access.rb, line 30
    def self.new_from_hash_copying_default(hash)
      ActiveSupport::HashWithIndifferentAccess.new(hash).tap do |new_hash|
        new_hash.default = hash.default
      end
    end

### Public Instance Methods

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

Assigns a new value to the hash:

    hash = HashWithIndifferentAccess.new
    hash[:key] = "value"

    # File lib/active_support/hash_with_indifferent_access.rb, line 44
    def []=(key, value)
      regular_writer(convert_key(key), convert_value(value))
    end

Also aliased as: regular_writer, store
default(key = nil) click to toggle source

    # File lib/active_support/hash_with_indifferent_access.rb, line 22
    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

Removes a specified key from the hash.

    # File lib/active_support/hash_with_indifferent_access.rb, line 120
    def delete(key)
      super(convert_key(key))
    end

dup() click to toggle source

Returns an exact copy of the hash.

    # File lib/active_support/hash_with_indifferent_access.rb, line 99
    def dup
      HashWithIndifferentAccess.new(self)
    end

extractable_options?() click to toggle source

    # File lib/active_support/hash_with_indifferent_access.rb, line 9
    def extractable_options?
      true
    end

fetch(key, *extras) click to toggle source

Fetches the value for the specified key, same as doing hash

    # File lib/active_support/hash_with_indifferent_access.rb, line 83
    def fetch(key, *extras)
      super(convert_key(key), *extras)
    end

has_key?(key) click to toggle source
Alias for: key?
include?(key) click to toggle source
Alias for: key?
key?(key) click to toggle source

Checks the hash for a key matching the argument passed in:

    hash = HashWithIndifferentAccess.new
    hash["key"] = "value"
    hash.key? :key  # => true
    hash.key? "key" # => true

    # File lib/active_support/hash_with_indifferent_access.rb, line 74
    def key?(key)
      super(convert_key(key))
    end

Also aliased as: include?, has_key?, member?
member?(key) click to toggle source
Alias for: key?
merge(hash) click to toggle source

Merges the instantized and the specified hashes together, giving precedence to the values from the second hash Does not overwrite the existing hash.

    # File lib/active_support/hash_with_indifferent_access.rb, line 105
    def merge(hash)
      self.dup.update(hash)
    end

merge!(other_hash) click to toggle source
Alias for: update
regular_update(other_hash) click to toggle source
Alias for: update
regular_writer(key, value) click to toggle source
Alias for: []=
reverse_merge(other_hash) click to toggle source

Performs the opposite of merge, with the keys and values from the first hash taking precedence over the second. This overloaded definition prevents returning a regular hash, if reverse_merge is called on a HashWithDifferentAccess.

    # File lib/active_support/hash_with_indifferent_access.rb, line 111
    def reverse_merge(other_hash)
      super self.class.new_from_hash_copying_default(other_hash)
    end

reverse_merge!(other_hash) click to toggle source

    # File lib/active_support/hash_with_indifferent_access.rb, line 115
    def reverse_merge!(other_hash)
      replace(reverse_merge( other_hash ))
    end

store(key, value) click to toggle source
Alias for: []=
stringify_keys() click to toggle source

    # File lib/active_support/hash_with_indifferent_access.rb, line 125
    def stringify_keys; dup end

stringify_keys!() click to toggle source

    # File lib/active_support/hash_with_indifferent_access.rb, line 124
    def stringify_keys!; self end

symbolize_keys() click to toggle source

    # File lib/active_support/hash_with_indifferent_access.rb, line 127
    def symbolize_keys; to_hash.symbolize_keys end

to_hash() click to toggle source

Convert to a Hash with String keys.

    # File lib/active_support/hash_with_indifferent_access.rb, line 131
    def to_hash
      Hash.new(default).merge!(self)
    end

to_options!() click to toggle source

    # File lib/active_support/hash_with_indifferent_access.rb, line 128
    def to_options!; self end

update(other_hash) click to toggle source

Updates the instantized hash with values from the second:

    hash_1 = HashWithIndifferentAccess.new
    hash_1[:key] = "value"

    hash_2 = HashWithIndifferentAccess.new
    hash_2[:key] = "New Value!"

    hash_1.update(hash_2) # => {"key"=>"New Value!"}

    # File lib/active_support/hash_with_indifferent_access.rb, line 60
    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

Returns an array of the values at the specified indices:

    hash = HashWithIndifferentAccess.new
    hash[:a] = "x"
    hash[:b] = "y"
    hash.values_at("a", "b") # => ["x", "y"]

    # File lib/active_support/hash_with_indifferent_access.rb, line 94
    def values_at(*indices)
      indices.collect {|key| self[convert_key(key)]}
    end

### Protected Instance Methods

convert_key(key) click to toggle source

    # File lib/active_support/hash_with_indifferent_access.rb, line 136
    def convert_key(key)
      key.kind_of?(Symbol) ? key.to_s : key
    end

convert_value(value) click to toggle source

    # File lib/active_support/hash_with_indifferent_access.rb, line 140
    def convert_value(value)
      if value.class == Hash
        self.class.new_from_hash_copying_default(value)
      elsif value.is_a?(Array)
        value.dup.replace(value.map { |e| convert_value(e) })
      else
        value
      end
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.