Class: Chef::Node::VividMash
Overview
== VividMash
VividMash is identical to a Mash, with a few exceptions:
- It has a reference to the root Chef::Node::Attribute to which it
belongs, and will trigger cache invalidation on that object when
mutated.
- It auto-vivifies, that is a reference to a missing element will result
in the creation of a new VividMash for that key. (This only works when
using the element reference method,
[] -- other methods, such as
#fetch, work as normal).
- attr_accessor style element set and get are supported via method_missing
Constant Summary
collapse
- MUTATOR_METHODS =
Methods that mutate a VividMash. Each of them is overridden so that it
also invalidates the cached merged_attributes on the root Attribute
object.
Chef::Node::Mixin::ImmutablizeHash::DISALLOWED_MUTATOR_METHODS - i{write write! unlink unlink!}
Instance Attribute Summary
#__node__, #__path__, #__precedence__, #__root__
Instance Method Summary
collapse
Methods included from CommonAPI
#exist?, #read, #read!, #unlink, #unlink!, #write, #write!
Constructor Details
#initialize(data = {}) ⇒ VividMash
137
138
139
|
# File 'lib/chef/node/attribute_collections.rb', line 137
def initialize(data = {})
super(data)
end
|
Instance Method Details
#[](key) ⇒ Object
141
142
143
144
145
146
147
148
149
|
# File 'lib/chef/node/attribute_collections.rb', line 141
def [](key)
value = super
if !key?(key)
value = self.class.new({}, __root__)
self[key] = value
else
value
end
end
|
#[]=(key, value) ⇒ Object
151
152
153
154
155
|
# File 'lib/chef/node/attribute_collections.rb', line 151
def []=(key, value)
ret = super
send_reset_cache(__path__, key)
ret
end
|
#convert_key(key) ⇒ Object
159
160
161
|
# File 'lib/chef/node/attribute_collections.rb', line 159
def convert_key(key)
super
end
|
#convert_value(value) ⇒ Object
Mash uses #convert_value to mashify values on input.
We override it here to convert hash or array values to VividMash or
AttrArray for consistency and to ensure that the added parts of the
attribute tree will have the correct cache invalidation behavior.
167
168
169
170
171
172
173
174
175
176
177
178
|
# File 'lib/chef/node/attribute_collections.rb', line 167
def convert_value(value)
case value
when VividMash, AttrArray
value
when Hash
VividMash.new(value, __root__, __node__, __precedence__)
when Array
AttrArray.new(value, __root__, __node__, __precedence__)
else
value
end
end
|
#delete(key, &block) ⇒ Object
132
133
134
135
|
# File 'lib/chef/node/attribute_collections.rb', line 132
def delete(key, &block)
send_reset_cache(__path__, key)
super
end
|
#dup ⇒ Object
180
181
182
|
# File 'lib/chef/node/attribute_collections.rb', line 180
def dup
Mash.new(self)
end
|
#to_yaml(*opts) ⇒ Object
184
185
186
|
# File 'lib/chef/node/attribute_collections.rb', line 184
def to_yaml(*opts)
to_h.to_yaml(*opts)
end
|