class ActiveSupport::HashWithIndifferentAccess
Experimental RBS support (using type sampling data from the type_fusion
project).
# sig/active_support/hash_with_indifferent_access.rbs class ActiveSupport::HashWithIndifferentAccess < ActiveSupport::Hash def self.[]: ((Symbol | String) key) -> (nil | String | Hash) def []: ((Symbol | String) key) -> (nil | String | Hash) def []=: ((Symbol | String) key, (String | Array[] | nil) value) -> String? def convert_key: ((Symbol | String) key) -> String def convert_key: ((Symbol | String) key) -> String type ActiveSupport__HashWithIndifferentAccess_convert_value_value = String | Array[Array, String, String, String] | true | Array[String] | ActionController::Parameters | Hash type ActiveSupport__HashWithIndifferentAccess_convert_value_return_value = String | true | ActionController::Parameters | Hash def convert_value: (ActiveSupport__HashWithIndifferentAccess_convert_value_value value, conversion: Symbol?) -> ActiveSupport__HashWithIndifferentAccess_convert_value_return_value def default: (*(Array[] | Array[String]) args) -> nil def delete: ((Symbol | String) key) -> String? def dig: (*Array[String] args) -> untyped def dup: () -> Hash def fetch: (Symbol key, *Array[] extras) -> FactoryBot::Factory def initialize: (?Hash? constructor) -> void def key?: ((Symbol | String) key) -> bool def set_defaults: (Hash target) -> nil def slice: (*Array[String] keys) -> Hash type ActiveSupport__HashWithIndifferentAccess_update_other_hashes = Array[Hash, ] | Array[Hash, site_name, String, description, String, type, String, url, String, image, String] | Array[Hash, sample, Hash, gem_name, String, gem_version, String, receiver, String, method_name, String, application_name, String, location, String, type_fusion_version, String, parameters, Array, Array, String, String, String, Array, String, String, String, Array, String, String, String, return_value, String] | Array[Hash, site, NilClass, title, String, reverse, TrueClass, separator, String, description, String, keywords, String, canonical, String, noindex, TrueClass, og, Hash, site_name, String, description, String, type, String, url, String, image, String, twitter, Hash, card, String, creator, String] | Array[Hash, q, String, controller, String, action, String, gem, String, version, String] | Array[Hash, controller, String, action, String, gem, String, version, String, id, String] | Array[Hash, card, String, creator, String] def update: (*ActiveSupport__HashWithIndifferentAccess_update_other_hashes other_hashes, ) -> Hash def update_with_single_argument: (Hash other_hash, Proc? block) -> Hash def with_indifferent_access: () -> Hash end
which will, in turn, require this file.
require “active_support/core_ext/hash/indifferent_access”
To access this class outside of Rails, require the core extension with:
which may be handy.
rgb = { black: ‘#000000’, white: ‘#FFFFFF’ }.with_indifferent_access
Note that core extensions define Hash#with_indifferent_access
:
example the params
hash in Ruby on Rails.
expected keys and it is convenient to understand both as the same. For
but this class is intended for use cases where strings or symbols are the
hash # => {“a”=>1, 0=>0}
= 0
hash = ActiveSupport::HashWithIndifferentAccess.new(a: 1)
Technically other types of keys are accepted:
hash.keys # => [“a”]
You are guaranteed that the key is returned as a string:
hash = ActiveSupport::HashWithIndifferentAccess.new(a: 1)
mapping belongs to the public interface. For example, given:
writing interface (calling []=
, merge
, etc). This
Internally symbols are mapped to strings when used as keys in the entire<br><br>rgb # => ‘#FFFFFF’<br>rgb # => ‘#FFFFFF’<br>rgb = ‘#FFFFFF’<br><br>rgb # => ‘#000000’<br>rgb # => ‘#000000’<br>rgb = ‘#000000’
rgb = ActiveSupport::HashWithIndifferentAccess.new
to be the same.
Implements a hash where keys :foo
and "foo"
are considered
def self.[](*args)
Experimental RBS support (using type sampling data from the type_fusion
project).
def self.[]: ((Symbol | String) key) -> (nil | String | card | String | creator | String)
This signature was generated using 29 samples from 2 applications.
def self.[](*args) new.merge!(Hash[*args]) end
def [](key)
Experimental RBS support (using type sampling data from the type_fusion
project).
def []: ((Symbol | String) key) -> (nil | String | card | String | creator | String)
This signature was generated using 29 samples from 2 applications.
counters[:foo] # => 1
counters['foo'] # => 1
counters[:foo] = 1
counters = ActiveSupport::HashWithIndifferentAccess.new
either a string or a symbol:
Same as Hash#[] where the key passed as argument can be
def [](key) super(convert_key(key)) end
def []=(key, value)
Experimental RBS support (using type sampling data from the type_fusion
project).
def []=: ((Symbol | String) key, (String | | nil) value) -> String?
This signature was generated using 19 samples from 3 applications.
hash[:key] = 'value'
hash = ActiveSupport::HashWithIndifferentAccess.new
Assigns a new value to the hash:
def []=(key, value) regular_writer(convert_key(key), convert_value(value, conversion: :assignment)) end
def assoc(key)
counters.assoc(:foo) # => ["foo", 1]
counters.assoc('foo') # => ["foo", 1]
counters[:foo] = 1
counters = ActiveSupport::HashWithIndifferentAccess.new
either a string or a symbol:
Same as Hash#assoc where the key passed as argument can be
def assoc(key) super(convert_key(key)) end
def compact
def compact dup.tap(&:compact!) end
def convert_key(key)
Experimental RBS support (using type sampling data from the type_fusion
project).
def convert_key: ((Symbol | String) key) -> String
This signature was generated using 124 samples from 3 applications.
def convert_key(key) key.kind_of?(Symbol) ? key.name : key end
def convert_key(key)
Experimental RBS support (using type sampling data from the type_fusion
project).
def convert_key: ((Symbol | String) key) -> String
This signature was generated using 124 samples from 3 applications.
def convert_key(key) key.kind_of?(Symbol) ? key.to_s : key end
def convert_value(value, conversion: nil)
Experimental RBS support (using type sampling data from the type_fusion
project).
type ActiveSupport__HashWithIndifferentAccess_convert_value_value = String | Array[Array, String, String, String] | true | Array[String] | ActionController::Parameters | Hash type ActiveSupport__HashWithIndifferentAccess_convert_value_return_value = String | true | ActionController::Parameters | Hash type ActiveSupport__HashWithIndifferentAccess_convert_value_value = String | | true | Array | String | Array | Array | String | Array | | String | ActionController::Parameters | Array | Array | String | Array | Array | String | Array | | site_name | String | description | String | type | String | url | String | image | String | card | String | creator | String type ActiveSupport__HashWithIndifferentAccess_convert_value_return_value = String | true | ActionController::Parameters | card | String | creator | String def convert_value: (ActiveSupport__HashWithIndifferentAccess_convert_value_value value, conversion: Symbol?) -> ActiveSupport__HashWithIndifferentAccess_convert_value_return_value
This signature was generated using 51 samples from 3 applications.
def convert_value(value, conversion: nil) if value.is_a? Hash if conversion == :to_hash value.to_hash else value.nested_under_indifferent_access end elsif value.is_a?(Array) if conversion != :assignment || value.frozen? value = value.dup end value.map! { |e| convert_value(e, conversion: conversion) } else value end end
def deep_stringify_keys; dup end
def deep_stringify_keys; dup end
def deep_stringify_keys!; self end
def deep_stringify_keys!; self end
def deep_symbolize_keys; to_hash.deep_symbolize_keys! end
def deep_symbolize_keys; to_hash.deep_symbolize_keys! end
def default(*args)
Experimental RBS support (using type sampling data from the type_fusion
project).
def default: (* args) -> nil
This signature was generated using 17 samples from 2 applications.
hash.default('foo') # => 'foo'
hash.default # => nil
hash = ActiveSupport::HashWithIndifferentAccess.new { |hash, key| key }
hash.default # => 1
hash = ActiveSupport::HashWithIndifferentAccess.new(1)
either a string or a symbol:
Same as Hash#default where the key passed as argument can be
def default(*args) super(*args.map { |arg| convert_key(arg) }) end
def delete(key)
Experimental RBS support (using type sampling data from the type_fusion
project).
def delete: ((Symbol | String) key) -> String?
This signature was generated using 31 samples from 2 applications.
def delete(key) super(convert_key(key)) end
def dig(*args)
Experimental RBS support (using type sampling data from the type_fusion
project).
def dig: (*Symbol args) -> untyped
This signature was generated using 2 samples from 1 application.
counters.dig(:foo, :bar) # => 1
counters.dig('foo', 'bar') # => 1
counters[:foo] = { bar: 1 }
counters = ActiveSupport::HashWithIndifferentAccess.new
either a string or a symbol:
Same as Hash#dig where the key passed as argument can be
def dig(*args) args[0] = convert_key(args[0]) if args.size > 0 super(*args) end
def dup
Experimental RBS support (using type sampling data from the type_fusion
project).
def dup: () -> (path | String | controller | String | action | String | | id | String | controller | String | action | String | gem | String | version | String)
This signature was generated using 5 samples from 1 application.
hash[:a][:c] # => "c"
dup[:a][:c] = 'c'
dup = hash.dup
hash = ActiveSupport::HashWithIndifferentAccess.new({ a: { b: 'b' } })
Returns a shallow copy of the hash.
def dup self.class.new(self).tap do |new_hash| set_defaults(new_hash) end end
def except(*keys)
hash.except(:a, "b") # => {c: 10}.with_indifferent_access
hash = { a: "x", b: "y", c: 10 }.with_indifferent_access
Returns a hash with indifferent access that includes everything except given keys.
def except(*keys) slice(*self.keys - keys.map { |key| convert_key(key) }) end
def extractable_options?
Returns +true+ so that Array#extract_options! finds members of
def extractable_options? true end
def fetch(key, *extras)
Experimental RBS support (using type sampling data from the type_fusion
project).
def fetch: (Symbol key, * extras) -> FactoryBot::Factory
This signature was generated using 3 samples from 1 application.
counters.fetch(:bar) { |key| 0 } # => 0
counters.fetch(:bar, 0) # => 0
counters.fetch('foo') # => 1
counters[:foo] = 1
counters = ActiveSupport::HashWithIndifferentAccess.new
either a string or a symbol:
Same as Hash#fetch where the key passed as argument can be
def fetch(key, *extras) super(convert_key(key), *extras) end
def fetch_values(*indices, &block)
hash.fetch_values('a', 'c') { |key| 'z' } # => ["x", "z"]
hash.fetch_values('a', 'b') # => ["x", "y"]
hash[:b] = 'y'
hash[:a] = 'x'
hash = ActiveSupport::HashWithIndifferentAccess.new
raises an exception when one of the keys can't be found.
Returns an array of the values at the specified indices, but also
def fetch_values(*indices, &block) super(*indices.map { |key| convert_key(key) }, &block) end
def initialize(constructor = nil)
Experimental RBS support (using type sampling data from the type_fusion
project).
type ActiveSupport__HashWithIndifferentAccess_initialize_constructor = site | String | title | String | reverse | TrueClass | separator | String | description | String | keywords | String | canonical | String | noindex | TrueClass | og | site_name | String | description | String | type | String | url | String | image | String | twitter | card | String | creator | String | controller | String | action | String | | site_name | String | description | String | type | String | url | String | image | String | card | String | creator | String | parameters | | nil | gem | String | version | String | id | String def initialize: (?ActiveSupport__HashWithIndifferentAccess_initialize_constructor constructor) -> void
This signature was generated using 20 samples from 1 application.
def initialize(constructor = nil) if constructor.respond_to?(:to_hash) super() update(constructor) hash = constructor.is_a?(Hash) ? constructor : constructor.to_hash self.default = hash.default if hash.default self.default_proc = hash.default_proc if hash.default_proc elsif constructor.nil? super() else super(constructor) end end
def key?(key)
Experimental RBS support (using type sampling data from the type_fusion
project).
def key?: ((Symbol | String) key) -> bool
This signature was generated using 5 samples from 2 applications.
hash.key?(:key) # => true
hash['key'] = 'value'
hash = ActiveSupport::HashWithIndifferentAccess.new
Checks the hash for a key matching the argument passed in:
def key?(key) super(convert_key(key)) end
def merge(*hashes, &block)
modify the receiver but rather returns a new hash with indifferent
This method has the same semantics of +update+, except it does not
def merge(*hashes, &block) dup.update(*hashes, &block) end
def nested_under_indifferent_access
def nested_under_indifferent_access self end
def reject(*args, &block)
def reject(*args, &block) return to_enum(:reject) unless block_given? dup.tap { |hash| hash.reject!(*args, &block) } end
def replace(other_hash)
h = { "a" => 100, "b" => 200 }
Replaces the contents of this hash with other_hash.
def replace(other_hash) super(self.class.new(other_hash)) end
def reverse_merge(other_hash)
hash['a'] = nil
hash = ActiveSupport::HashWithIndifferentAccess.new
argument and returns a new hash with indifferent access as result:
Like +merge+ but the other way around: Merges the receiver into the
def reverse_merge(other_hash) super(self.class.new(other_hash)) end
def reverse_merge!(other_hash)
def reverse_merge!(other_hash) super(self.class.new(other_hash)) end
def select(*args, &block)
def select(*args, &block) return to_enum(:select) unless block_given? dup.tap { |hash| hash.select!(*args, &block) } end
def set_defaults(target)
Experimental RBS support (using type sampling data from the type_fusion
project).
def set_defaults: ((session | email | String | password | String | controller | String | action | String | controller | String | action | String) target) -> nil
This signature was generated using 2 samples from 2 applications.
def set_defaults(target) if default_proc target.default_proc = default_proc.dup else target.default = default end end
def slice(*keys)
Experimental RBS support (using type sampling data from the type_fusion
project).
def slice: (*String keys) -> gem | String | version | String
This signature was generated using 1 sample from 1 application.
def slice(*keys) keys.map! { |key| convert_key(key) } self.class.new(super) end
def slice!(*keys)
def slice!(*keys) keys.map! { |key| convert_key(key) } super end
def stringify_keys; dup end
def stringify_keys; dup end
def stringify_keys!; self end
def stringify_keys!; self end
def symbolize_keys; to_hash.symbolize_keys! end
def symbolize_keys; to_hash.symbolize_keys! end
def to_hash
def to_hash _new_hash = Hash.new set_defaults(_new_hash) each do |key, value| _new_hash[key] = convert_value(value, conversion: :to_hash) end _new_hash end
def to_options!; self end
def to_options!; self end
def transform_keys(*args, &block)
def transform_keys(*args, &block) return to_enum(:transform_keys) unless block_given? dup.tap { |hash| hash.transform_keys!(*args, &block) } end
def transform_keys!
def transform_keys! return enum_for(:transform_keys!) { size } unless block_given? keys.each do |key| self[yield(key)] = delete(key) end self end
def transform_values(*args, &block)
def transform_values(*args, &block) return to_enum(:transform_values) unless block_given? dup.tap { |hash| hash.transform_values!(*args, &block) } end
def update(*other_hashes, &block)
Experimental RBS support (using type sampling data from the type_fusion
project).
type ActiveSupport__HashWithIndifferentAccess_update_other_hashes = Array[Hash, ] | Array[Hash, site_name, String, description, String, type, String, url, String, image, String] | Array[Hash, sample, Hash, gem_name, String, gem_version, String, receiver, String, method_name, String, application_name, String, location, String, type_fusion_version, String, parameters, Array, Array, String, String, String, Array, String, String, String, Array, String, String, String, return_value, String] | Array[Hash, site, NilClass, title, String, reverse, TrueClass, separator, String, description, String, keywords, String, canonical, String, noindex, TrueClass, og, Hash, site_name, String, description, String, type, String, url, String, image, String, twitter, Hash, card, String, creator, String] | Array[Hash, q, String, controller, String, action, String, gem, String, version, String] | Array[Hash, controller, String, action, String, gem, String, version, String, id, String] | Array[Hash, card, String, creator, String] type ActiveSupport__HashWithIndifferentAccess_update_return_value = site_name | String | description | String | type | String | url | String | image | String | | q | String | controller | String | action | String | gem | String | version | String | controller | String | action | String | gem | String | version | String | id | String def update: (* other_hashes, ) -> ActiveSupport__HashWithIndifferentAccess_update_return_value
This signature was generated using 16 samples from 3 applications.
hash_2['key'] = 12
hash_1[:key] = 10
keys follow the semantics of indifferent access:
in the receiver, and the value in +other_hash+. The rules for duplicated
by the result of invoking the block with the duplicated key, the value
When given a block, the value for duplicated keys will be determined
of the values end up in the receiver, but which one is unspecified.
If the argument is a regular hash with keys +:key+ and "key" only one
In either case the merge respects the semantics of indifferent access.
ActiveSupport::HashWithIndifferentAccess or a regular +Hash+.
The arguments can be either an
hash.update({ "a" => 1 }, { "b" => 2 }) # => { "a" => 1, "b" => 2 }
hash = ActiveSupport::HashWithIndifferentAccess.new
hash_1.update(hash_2) # => {"key"=>"New Value!"}
hash_2[:key] = 'New Value!'
hash_2 = ActiveSupport::HashWithIndifferentAccess.new
hash_1[:key] = 'value'
hash_1 = ActiveSupport::HashWithIndifferentAccess.new
Updates the receiver in-place, merging in the hashes passed as arguments:
def update(*other_hashes, &block) if other_hashes.size == 1 update_with_single_argument(other_hashes.first, block) else other_hashes.each do |other_hash| update_with_single_argument(other_hash, block) end end self end
def update_with_single_argument(other_hash, block)
Experimental RBS support (using type sampling data from the type_fusion
project).
type ActiveSupport__HashWithIndifferentAccess_update_with_single_argument_other_hash = controller | String | action | String | gem | String | version | String | card | String | creator | String | | site_name | String | description | String | type | String | url | String | image | String | controller | String | action | String | gem | String | version | String | class | String | title | String | q | String | gem | String | version | String | controller | String | action | String | gem | String | version | String | guide | String | format | String type ActiveSupport__HashWithIndifferentAccess_update_with_single_argument_return_value = title | String | | q | String | gem | String | version | String | controller | String | action | String | gem | String | version | String | controller | String | action | String | gem | String | version | String | guide | String | format | String | card | String | creator | String def update_with_single_argument: (ActiveSupport__HashWithIndifferentAccess_update_with_single_argument_other_hash other_hash, Proc? block) -> ActiveSupport__HashWithIndifferentAccess_update_with_single_argument_return_value
This signature was generated using 12 samples from 1 application.
def update_with_single_argument(other_hash, block) if other_hash.is_a? HashWithIndifferentAccess regular_update(other_hash, &block) else other_hash.to_hash.each_pair do |key, value| if block && key?(key) value = block.call(convert_key(key), self[key], value) end regular_writer(convert_key(key), convert_value(value)) end end end
def values_at(*keys)
hash[:b] = 'y'
hash[:a] = 'x'
hash = ActiveSupport::HashWithIndifferentAccess.new
Returns an array of the values at the specified indices:
def values_at(*keys) super(*keys.map { |key| convert_key(key) }) end
def with_indifferent_access
Experimental RBS support (using type sampling data from the type_fusion
project).
def with_indifferent_access: () -> q | String | controller | String | action | String | gem | String | version | String
This signature was generated using 2 samples from 1 application.
def with_indifferent_access dup end