Sha256: d208b3ddaa3950c24dd9484f817af0ac00bfb24da0c98f16244b453e4902b392

Contents?: true

Size: 1.69 KB

Versions: 6

Compression:

Stored size: 1.69 KB

Contents

# encoding: UTF-8
module Kafo
  class Validator

    def initialize(params)
      validate_files = KafoConfigure.modules_dir + '/*/lib/puppet/parser/functions/validate_*.rb'
      is_function_files = KafoConfigure.modules_dir + '/*/lib/puppet/parser/functions/is_*.rb'
      definitions = Dir.glob(validate_files) + Dir.glob(is_function_files)

      definitions.each do |file|
        require 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

    def lookupvar(name, options = {})
      @cache[name]
    end

    # for puppet >= 3
    def include?(value)
      true
    end

    # for puppet >= 3
    def [](value, *args)
      lookupvar(value)
    end

    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)
      else
        raise Puppet::DevError, "Function #{$1} not defined despite being loaded!"
      end
    rescue Puppet::ParseError => e
      @logger.error e.message
      return false
    end

    private

    def engine
      @engine ||= begin
        klass = Class.new
        klass.send :include, Puppet::Parser::Functions.environment_module
        klass.new
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
kafo-0.3.13 lib/kafo/validator.rb
kafo-0.3.12 lib/kafo/validator.rb
kafo-0.3.11 lib/kafo/validator.rb
kafo-0.3.10 lib/kafo/validator.rb
kafo-0.3.9 lib/kafo/validator.rb
kafo-0.3.8 lib/kafo/validator.rb