Puppet Function: join_keys_to_values

Defined in:
vendor_modules/stdlib/lib/puppet/parser/functions/join_keys_to_values.rb
Function type:
Ruby 3.x API

Summary

This function joins each key of a hash to that key's corresponding value with a separator.

Overview

join_keys_to_values()Hash

Keys are cast to strings. If values are arrays, multiple keys are added for each element. The return value is an array in which each element is one joined key/value pair.

> *Note:* Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and line breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual formatting of values in the array) - see the `new` function for `String` and its formatting options for `Array` and `Hash`.

Examples:

Example Usage:

join_keys_to_values({'a'=>1,'b'=>2}, " is ") # Results in: ["a is 1","b is 2"]
join_keys_to_values({'a'=>1,'b'=>[2,3]}, " is ") # Results in: ["a is 1","b is 2","b is 3"]

Returns:

  • (Hash)

    The joined hash



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'vendor_modules/stdlib/lib/puppet/parser/functions/join_keys_to_values.rb', line 7

newfunction(:join_keys_to_values, type: :rvalue, doc: <<-DOC
  @summary
    This function joins each key of a hash to that key's corresponding value with a
    separator.

  Keys are cast to strings. If values are arrays, multiple keys
  are added for each element. The return value is an array in
  which each element is one joined key/value pair.

  @example Example Usage:
    join_keys_to_values({'a'=>1,'b'=>2}, " is ") # Results in: ["a is 1","b is 2"]
    join_keys_to_values({'a'=>1,'b'=>[2,3]}, " is ") # Results in: ["a is 1","b is 2","b is 3"]

  @return [Hash]
    The joined hash

  > **Note:** Since Puppet 5.0.0 - for more detailed control over the formatting (including indentations and
  line breaks, delimiters around arrays and hash entries, between key/values in hash entries, and individual
  formatting of values in the array) - see the `new` function for `String` and its formatting
  options for `Array` and `Hash`.
  DOC
) do |arguments|
  # Validate the number of arguments.
  if arguments.size != 2
    raise(Puppet::ParseError, "join_keys_to_values(): Takes exactly two arguments, but #{arguments.size} given.")
  end

  # Validate the first argument.
  hash = arguments[0]
  unless hash.is_a?(Hash)
    raise(TypeError, "join_keys_to_values(): The first argument must be a hash, but a #{hash.class} was given.")
  end

  # Validate the second argument.
  separator = arguments[1]
  unless separator.is_a?(String)
    raise(TypeError, "join_keys_to_values(): The second argument must be a string, but a #{separator.class} was given.")
  end

  # Join the keys to their values.
  hash.map { |k, v|
    if v.is_a?(Array)
      v.map { |va| String(k) + separator + String(va) }
    elsif String(v) == 'undef'
      String(k)
    else
      String(k) + separator + String(v)
    end
  }.flatten
end