732673a6f47f66c81e432f58d3ef9bfc539b8e1b
[mirror/dsa-puppet.git] / 3rdparty / modules / stdlib / lib / puppet / functions / sprintf_hash.rb
1 # Uses sprintf with named references.
2 #
3 # The first parameter is format string describing how the rest of the parameters in the hash
4 # should be formatted. See the documentation for the `Kernel::sprintf` function in Ruby for
5 # all the details.
6 #
7 # In the given argument hash with parameters, all keys are converted to symbols so they work
8 # with the `sprintf` function.
9 #
10 # @example Format a string and number
11 #   $output = sprintf_hash('String: %<foo>s / number converted to binary: %<number>b',
12 #                          { 'foo' => 'a string', 'number' => 5 })
13 #   # $output = 'String: a string / number converted to binary: 101'
14 #
15 # Note that since Puppet 4.10.10, and 5.3.4 this functionality is supported by the
16 # `sprintf` function in puppet core.
17 #
18 Puppet::Functions.create_function(:sprintf_hash) do
19   # @param format The format to use.
20   # @param arguments Hash with parameters.
21   # @return The formatted string.
22   dispatch :sprintf_hash do
23     param 'String', :format
24     param 'Hash', :arguments
25     # Disabled for now. This gives issues on puppet 4.7.1.
26     # return_type 'String'
27   end
28
29   def sprintf_hash(format, arguments)
30     call_function('deprecation', 'sprintf_hash', 'This method is deprecated. From Puppet 4.10.10/5.3.4 please use the built-in sprintf instead')
31
32     Kernel.sprintf(format, Hash[arguments.map { |(k, v)| [k.to_sym, v] }])
33   end
34 end