class Kafo::Validator

Public Class Methods

new(params) click to toggle source
# File lib/kafo/validator.rb, line 10
def initialize(params)
  self.class.prepare_functions
  definitions = KafoConfigure.module_dirs.map do |dir|
    validate_files = dir + '/*/lib/puppet/parser/functions/validate_*.rb'
    is_function_files = dir + '/*/lib/puppet/parser/functions/is_*.rb'
    Dir.glob(validate_files) + Dir.glob(is_function_files)
  end.flatten

  definitions.each do |file|
    require File.expand_path(file)
  end

  @params = params
  @logger = KafoConfigure.logger

  @cache ||= Hash.new do |hash, key|
    @logger.debug "Looked for #{key}"
    param     = @params.select { |p| p.name == key.to_s }.first
    hash[key] = param.nil? ? nil : param.value
  end
end
prepare_functions() click to toggle source
# File lib/kafo/validator.rb, line 4
def self.prepare_functions
  return true if @reset || !Puppet::Parser::Functions.respond_to?(:reset)
  Puppet::Parser::Functions.reset
  @reset = true
end

Public Instance Methods

[](value, *args) click to toggle source

for puppet >= 3

# File lib/kafo/validator.rb, line 42
def [](value, *args)
  lookupvar(value)
end
include?(value) click to toggle source

for puppet >= 3

# File lib/kafo/validator.rb, line 37
def include?(value)
  true
end
lookupvar(name, options = {}) click to toggle source
# File lib/kafo/validator.rb, line 32
def lookupvar(name, options = {})
  @cache[name]
end
method_missing(method, *args, &block) click to toggle source
Calls superclass method
# File lib/kafo/validator.rb, line 46
def method_missing(method, *args, &block)
  method.to_s =~ /^function_(.*)$/
  super unless $1
  super unless Puppet::Parser::Functions.function($1)
  # In odd circumstances, this might not end up defined by the previous
  # method, so we might as well be certain.
  if engine.respond_to? method
    @logger.debug "calling #{method.inspect} with #{args.inspect}"
    engine.send(method, *args)
    true
  else
    raise Puppet::DevError, "Function #{$1} not defined despite being loaded!"
  end
rescue Puppet::ParseError => e
  @logger.error e.message
  return false
end

Private Instance Methods

engine() click to toggle source
# File lib/kafo/validator.rb, line 66
def engine
  @engine ||= begin
    klass = Class.new
    env = Puppet::PUPPETVERSION.start_with?('2.') ? nil : lookup_current_environment
    klass.send :include, Puppet::Parser::Functions.environment_module(env)
    klass.new
  end
end
lookup_current_environment() click to toggle source
# File lib/kafo/validator.rb, line 75
def lookup_current_environment
  @current_environment ||= Puppet.respond_to?(:lookup) ? Puppet.lookup(:current_environment) : Puppet::Node::Environment.current
end