Puppet Function: uriescape

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

Summary

Urlencodes a string or array of strings. Requires either a single string or an array as an input.

Overview

uriescape()String

> Note: Deprecated: Starting Puppet 8, our Ruby version has upgraded to 3.2. Therefore, its no longer possible to call URI.escape as it was deprecated by 2.7 and removed completely by 3+. This function should be removed once Puppet 7 is no longer supported.

Returns:

  • (String)

    a string that contains the converted value



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
# File 'lib/puppet/parser/functions/uriescape.rb', line 10

newfunction(:uriescape, type: :rvalue, doc: <<-DOC
  @summary
    Urlencodes a string or array of strings.
    Requires either a single string or an array as an input.

  @return [String]
    a string that contains the converted value

  > **Note:**  **Deprecated:** Starting Puppet 8, our Ruby version has upgraded to 3.2.
  Therefore, its no longer possible to call URI.escape as it was deprecated by 2.7 and removed completely by 3+.
  This function should be removed once Puppet 7 is no longer supported.
DOC
) do |arguments|
  raise(Puppet::ParseError, 'Puppet: This function is not available in Puppet 8. URI.escape no longer exists as of Ruby 3+.') if Puppet::Util::Package.versioncmp(Puppet.version, '8').positive?

  raise(Puppet::ParseError, "uriescape(): Wrong number of arguments given (#{arguments.size} for 1)") if arguments.empty?

  value = arguments[0]

  raise(Puppet::ParseError, 'uriescape(): Requires either array or string to work with') unless value.is_a?(Array) || value.is_a?(String)

  result = if value.is_a?(Array)
             # Numbers in Puppet are often string-encoded which is troublesome ...
             value.map { |i| i.is_a?(String) ? URI::DEFAULT_PARSER.escape(i) : i }
           else
             URI::DEFAULT_PARSER.escape(value)
           end

  return result
end