vendored/puppet/lib/puppet/functions/call.rb in bolt-0.21.7 vs vendored/puppet/lib/puppet/functions/call.rb in bolt-0.21.8

- old
+ new

@@ -4,10 +4,14 @@ # # 1. A string corresponding to a function name. # 2. Any number of arguments to be passed to the called function. # 3. An optional lambda, if the function being called supports it. # +# This function can also be used to resolve a `Deferred` given as +# the only argument to the function (does not accept arguments nor +# a block). +# # @example Using the `call` function # # ```puppet # $a = 'notice' # call($a, 'message') @@ -24,19 +28,52 @@ # ``` # # The `call` function can be used to call either Ruby functions or Puppet language # functions. # +# When used with `Deferred` values, the deferred value can either describe +# a function call, or a dig into a variable. +# +# @example Resolving a deferred function call +# +# ```puppet +# $d = Deferred('join', [[1,2,3], ':']) # A future call to join that joins the arguments 1,2,3 with ':' +# notice($d.call()) +# ``` +# +# Would notice the string "1:2:3". +# +# @example Resolving a deferred variable value with optional dig into its structure +# +# ```puppet +# $d = Deferred('$facts', ['processors', 'count']) +# notice($d.call()) +# ``` +# +# Would notice the value of `$facts['processors']['count']` at the time when the `call` is made. +# +# * Deferred values supported since Puppet 5.6.0 +# # @since 5.0.0 # Puppet::Functions.create_function(:call, Puppet::Functions::InternalFunction) do dispatch :call_impl_block do scope_param param 'String', :function_name repeated_param 'Any', :arguments optional_block_param end + dispatch :call_deferred do + scope_param + param 'Deferred', :deferred + end + def call_impl_block(scope, function_name, *args, &block) call_function_with_scope(scope, function_name, *args, &block) end + + def call_deferred(scope, deferred) + Puppet::Pops::Evaluator::DeferredResolver.resolve(deferred, scope.compiler) + end + end