Class: ActiveSupport::OrderedOptions
Relationships & Source Files | |
Extension / Inclusion / Inheritance Descendants | |
Subclasses:
|
|
Super Chains via Extension / Inclusion / Inheritance | |
Class Chain:
self,
::Hash
|
|
Instance Chain:
self,
::Hash ,
DeepMergeable
|
|
Inherits: | Hash |
Defined in: | activesupport/lib/active_support/ordered_options.rb |
Overview
Ordered Options
OrderedOptions
inherits from ::Hash
and provides dynamic accessor methods.
With a ::Hash
, key-value pairs are typically managed like this:
h = {}
h[:boy] = 'John'
h[:girl] = 'Mary'
h[:boy] # => 'John'
h[:girl] # => 'Mary'
h[:dog] # => nil
Using OrderedOptions
, the above code can be written as:
h = ActiveSupport::OrderedOptions.new
h.boy = 'John'
h.girl = 'Mary'
h.boy # => 'John'
h.girl # => 'Mary'
h.dog # => nil
To raise an exception when the value is blank, append a bang to the key name, like:
h.dog! # => raises KeyError: :dog is blank
Class Method Summary
::Hash
- Inherited
.from_trusted_xml | Builds a |
.from_xml | Returns a |
Instance Attribute Summary
- #extractable_options? ⇒ Boolean readonly
::Hash
- Inherited
#extractable_options? | By default, only instances of |
#present? |
Instance Method Summary
- #[](key)
- #[]=(key, value)
- #dig(key, *identifiers)
- #inspect
- #method_missing(method, *args)
- #respond_to_missing?(name, include_private) ⇒ Boolean
-
#_get
protected
preserve the original #[] method.
::Hash
- Inherited
#assert_valid_keys | Validates all keys in a hash match |
#blank? | A hash is blank if it’s empty: |
#compact_blank! | Removes all blank values from the |
#deep_dup | Returns a deep copy of hash. |
#deep_merge | Returns a new hash with |
#deep_merge! | Same as |
#deep_stringify_keys | Returns a new hash with all keys converted to strings. |
#deep_stringify_keys! | Destructively converts all keys to strings. |
#deep_symbolize_keys | Returns a new hash with all keys converted to symbols, as long as they respond to |
#deep_symbolize_keys! | Destructively converts all keys to symbols, as long as they respond to |
#deep_transform_keys | Returns a new hash with all keys converted by the block operation. |
#deep_transform_keys! | Destructively converts all keys by using the block operation. |
#deep_transform_values | Returns a new hash with all values converted by the block operation. |
#deep_transform_values! | Destructively converts all values by using the block operation. |
#except! | Removes the given keys from hash and returns it. |
#extract! | Removes and returns the key/value pairs matching the given keys. |
#nested_under_indifferent_access | Alias for Hash#with_indifferent_access. |
#reverse_merge | Merges the caller into |
#reverse_merge! | Destructive |
#reverse_update | Alias for Hash#reverse_merge!. |
#slice! | Replaces the hash with only the given keys. |
#stringify_keys | Returns a new hash with all keys converted to strings. |
#stringify_keys! | Destructively converts all keys to strings. |
#symbolize_keys | Returns a new hash with all keys converted to symbols, as long as they respond to |
#symbolize_keys! | Destructively converts all keys to symbols, as long as they respond to |
#to_options | Alias for Hash#symbolize_keys. |
#to_options! | Alias for Hash#symbolize_keys!. |
#to_param | Alias for Hash#to_query. |
#to_query | Returns a string representation of the receiver suitable for use as a URL query string: |
#to_xml | Returns a string containing an XML representation of its receiver: |
#with_defaults | Alias for Hash#reverse_merge. |
#with_defaults! | Alias for Hash#reverse_merge!. |
#with_indifferent_access | Returns an |
#_deep_transform_keys_in_object | Support methods for deep transforming nested hashes and arrays. |
#_deep_transform_keys_in_object!, | |
#_deep_transform_values_in_object | Support methods for deep transforming nested hashes and arrays. |
#_deep_transform_values_in_object!, #as_json, | |
#compact_blank |
|
#deep_merge? |
DeepMergeable
- Included
#deep_merge | Returns a new instance with the values from |
#deep_merge! | Same as |
#deep_merge? | Returns true if |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args)
[ GitHub ]# File 'activesupport/lib/active_support/ordered_options.rb', line 49
def method_missing(method, *args) if method.end_with?("=") self[method.name.chomp("=")] = args.first elsif method.end_with?("!") name_string = method.name.chomp("!") self[name_string].presence || raise(KeyError.new(":#{name_string} is blank")) else self[method.name] end end
Instance Attribute Details
#extractable_options? ⇒ Boolean
(readonly)
[ GitHub ]
# File 'activesupport/lib/active_support/ordered_options.rb', line 64
def true end
Instance Method Details
#[](key)
[ GitHub ]# File 'activesupport/lib/active_support/ordered_options.rb', line 41
def [](key) super(key.to_sym) end
#[]=(key, value)
[ GitHub ]# File 'activesupport/lib/active_support/ordered_options.rb', line 37
def []=(key, value) super(key.to_sym, value) end
#_get (protected)
preserve the original #[] method
# File 'activesupport/lib/active_support/ordered_options.rb', line 34
alias_method :_get, :[] # preserve the original #[] method
#dig(key, *identifiers)
[ GitHub ]# File 'activesupport/lib/active_support/ordered_options.rb', line 45
def dig(key, *identifiers) super(key.to_sym, *identifiers) end
#inspect
[ GitHub ]# File 'activesupport/lib/active_support/ordered_options.rb', line 68
def inspect "#<#{self.class.name} #{super}>" end
#respond_to_missing?(name, include_private) ⇒ Boolean
# File 'activesupport/lib/active_support/ordered_options.rb', line 60
def respond_to_missing?(name, include_private) true end