Class: ActiveSupport::OrderedOptions
- Inherits:
-
Hash
show all
- Defined in:
- activesupport/lib/active_support/ordered_options.rb
Overview
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] h[:girl] h[:dog]
Using OrderedOptions
, the above code can be written as:
h = ActiveSupport::OrderedOptions.new
h.boy = 'John'
h.girl = 'Mary'
h.boy h.girl h.dog
To raise an exception when the value is blank, append a bang to the key name, like:
h.dog!
Instance Method Summary
collapse
Methods inherited from Hash
#as_json, #assert_valid_keys, #deep_dup, #deep_merge, #deep_merge!, #deep_stringify_keys, #deep_stringify_keys!, #deep_symbolize_keys, #deep_symbolize_keys!, #deep_transform_keys, #deep_transform_keys!, #deep_transform_values, #deep_transform_values!, #except, #except!, #extract!, from_trusted_xml, from_xml, #reverse_merge, #reverse_merge!, #slice!, #stringify_keys, #stringify_keys!, #symbolize_keys, #symbolize_keys!, #to_query, #to_xml, #with_indifferent_access
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args) ⇒ Object
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
# File 'activesupport/lib/active_support/ordered_options.rb', line 47
def method_missing(name, *args)
name_string = +name.to_s
if name_string.chomp!("=")
self[name_string] = args.first
else
bangs = name_string.chomp!("!")
if bangs
self[name_string].presence || raise(KeyError.new(":#{name_string} is blank"))
else
self[name_string]
end
end
end
|
Instance Method Details
39
40
41
|
# File 'activesupport/lib/active_support/ordered_options.rb', line 39
def [](key)
super(key.to_sym)
end
|
#[]=(key, value) ⇒ Object
35
36
37
|
# File 'activesupport/lib/active_support/ordered_options.rb', line 35
def []=(key, value)
super(key.to_sym, value)
end
|
#dig(*keys) ⇒ Object
43
44
45
|
# File 'activesupport/lib/active_support/ordered_options.rb', line 43
def dig(*keys)
super(*keys.flatten.map(&:to_sym))
end
|
66
67
68
|
# File 'activesupport/lib/active_support/ordered_options.rb', line 66
def
true
end
|
70
71
72
|
# File 'activesupport/lib/active_support/ordered_options.rb', line 70
def inspect
"#<#{self.class.name} #{super}>"
end
|
#respond_to_missing?(name, include_private) ⇒ Boolean
62
63
64
|
# File 'activesupport/lib/active_support/ordered_options.rb', line 62
def respond_to_missing?(name, include_private)
true
end
|