class Puppet::Pops::Evaluator::PuppetProc

Complies with Proc API by mapping a Puppet::Pops::Evaluator::Closure to a ruby Proc. Creating and passing an instance of this class instead of just a plain block makes it possible to inherit the parameter info and arity from the closure. Advanced users may also access the closure itself. The Puppet::Pops::Functions::Dispatcher uses this when it needs to get the Callable type of the closure.

The class is part of the Puppet Function API for Ruby and thus public API but a user should never create an instance of this class.

@api public

Attributes

closure[R]

@return [Puppet::Pops::Evaluator::Closure] the mapped closure @api public

Public Class Methods

new(closure, &block) click to toggle source

Creates a new instance from a closure and a block that will dispatch all parameters to the closure. The block must be similar to:

{ |*args| closure.call(*args) }

@param closure [Puppet::Pops::Evaluator::Closure] The closure to map @param &block [Block] The varargs block that invokes the closure.call method

@api private

Calls superclass method
   # File lib/puppet/pops/evaluator/puppet_proc.rb
22 def self.new(closure, &block)
23   proc = super(&block)
24   proc.instance_variable_set(:@closure, closure)
25   proc
26 end

Public Instance Methods

arity() click to toggle source

@return [Integer] the arity of the block @overrides Block.arity @api public

   # File lib/puppet/pops/evaluator/puppet_proc.rb
63 def arity
64   parameters.reduce(0) do |memo, param|
65     count = memo + 1
66     break -count unless param[0] == :req
67     count
68   end
69 end
lambda?() click to toggle source

@overrides Block.lambda? @return [Boolean] always false since this proc doesn't do the Ruby lambda magic @api public

   # File lib/puppet/pops/evaluator/puppet_proc.rb
35 def lambda?
36   false
37 end
parameters() click to toggle source

Maps the closure parameters to standard Block parameter info where each parameter is represented as a two element Array where the first element is :req, :opt, or :rest and the second element is the name of the parameter.

@return [Array<Array<Symbol>>] array of parameter info pairs @overrides Block.parameters @api public

   # File lib/puppet/pops/evaluator/puppet_proc.rb
47 def parameters
48   @closure.parameters.map do |param|
49     sym = param.name.to_sym
50     if param.captures_rest
51       [ :rest, sym ]
52     elsif param.value
53       [ :opt, sym ]
54     else
55       [ :req, sym ]
56     end
57   end
58 end