class Itamae::Node

Constants

ValidationError

Attributes

mash[R]

Public Class Methods

new(hash, backend) click to toggle source
# File lib/itamae/node.rb, line 12
def initialize(hash, backend)
  @mash = Itamae::Mash.new(hash)
  @backend = backend
end

Public Instance Methods

[](key) click to toggle source
# File lib/itamae/node.rb, line 25
def [](key)
  if @mash.has_key?(key)
    @mash[key]
  else
    fetch_inventory_value(key)
  end
end
reverse_merge(other_hash) click to toggle source
# File lib/itamae/node.rb, line 17
def reverse_merge(other_hash)
  self.class.new(_reverse_merge(other_hash), @backend)
end
reverse_merge!(other_hash) click to toggle source
# File lib/itamae/node.rb, line 21
def reverse_merge!(other_hash)
  @mash.replace(_reverse_merge(other_hash))
end
validate!(&block) click to toggle source
# File lib/itamae/node.rb, line 33
def validate!(&block)
  errors = Schash::Validator.new(&block).validate(@mash)
  unless errors.empty?
    errors.each do |error|
      Itamae.logger.error "'#{error.position.join('->')}' #{error.message}"
    end
    raise ValidationError
  end
end

Private Instance Methods

_reverse_merge(other_hash) click to toggle source
# File lib/itamae/node.rb, line 45
def _reverse_merge(other_hash)
  Itamae::Mash.new(other_hash).merge(@mash)
end
fetch_inventory_value(key) click to toggle source
# File lib/itamae/node.rb, line 63
def fetch_inventory_value(key)
  value = @backend.host_inventory[key]
  if value.is_a?(Hash)
    value = Itamae::Mash.new(value)
  end

  value
rescue NotImplementedError, NameError
  nil
end
method_missing(method, *args) click to toggle source
Calls superclass method
# File lib/itamae/node.rb, line 49
def method_missing(method, *args)
  if @mash.respond_to?(method)
    return @mash.public_send(method, *args)
  elsif args.empty? && value = fetch_inventory_value(method)
    return value
  end

  super
end
respond_to?(method, priv = false) click to toggle source
Calls superclass method
# File lib/itamae/node.rb, line 59
def respond_to?(method, priv = false)
  @mash.respond_to?(method, priv) || super
end