Parent

Files

Class/Module Index [+]

Quicksearch

Chef::Node::VividMash

VividMash

VividMash is identical to a Mash, with a few exceptions:

Constants

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.

Attributes

root[R]

Public Class Methods

new(root, data={}) click to toggle source
# File lib/chef/node/attribute_collections.rb, line 137
def initialize(root, data={})
  @root = root
  super(data)
end

Public Instance Methods

[](key) click to toggle source
# File lib/chef/node/attribute_collections.rb, line 142
def [](key)
  value = super
  if !key?(key)
    value = self.class.new(root)
    self[key] = value
  else
    value
  end
end
[]=(key, value) click to toggle source
# File lib/chef/node/attribute_collections.rb, line 152
def []=(key, value)
  if set_unless? && key?(key)
    self[key]
  else
    root.reset_cache
    super
  end
end
convert_key(key) click to toggle source
# File lib/chef/node/attribute_collections.rb, line 185
def convert_key(key)
  super
end
convert_value(value) click to toggle source

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.

# File lib/chef/node/attribute_collections.rb, line 193
def convert_value(value)
  case value
  when VividMash
    value
  when Hash
    VividMash.new(root, value)
  when Array
    AttrArray.new(root, value)
  else
    value
  end
end
dup() click to toggle source
# File lib/chef/node/attribute_collections.rb, line 206
def dup
  Mash.new(self)
end
method_missing(symbol, *args) click to toggle source
# File lib/chef/node/attribute_collections.rb, line 163
def method_missing(symbol, *args)
  # Calling `puts arg` implicitly calls #to_ary on `arg`. If `arg` does
  # not implement #to_ary, ruby recognizes it as a single argument, and
  # if it returns an Array, then ruby prints each element. If we don't
  # account for that here, we'll auto-vivify a VividMash for the key
  # :to_ary which creates an unwanted key and raises a TypeError.
  if symbol == :to_ary
    super
  elsif args.empty?
    self[symbol]
  elsif symbol.to_s =~ /=$/
    key_to_set = symbol.to_s[/^(.+)=$/, 1]
    self[key_to_set] = (args.length == 1 ? args[0] : args)
  else
    raise NoMethodError, "Undefined node attribute or method `#{symbol}' on `node'. To set an attribute, use `#{symbol}=value' instead."
  end
end
set_unless?() click to toggle source
# File lib/chef/node/attribute_collections.rb, line 181
def set_unless?
  @root.set_unless?
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.