e2d7f3bb89
We need to use unless value.is_a?(String) || value.is_a?(Array) rather than klass = value.class unless [String, Array].include?(klass) because the klass version enforces type checking which is too strict, and does not allow us to accept objects wich have extended String (or Array). For example, generate() function now returns Puppet::Util::Execution::ProcessOutput which is just a very simple extension of String. While this in it's self was not intentional (PUP-2306) it is not unreasonable to cope with objects which extend Strings
36 lines
1 KiB
Ruby
36 lines
1 KiB
Ruby
#
|
|
# chop.rb
|
|
#
|
|
|
|
module Puppet::Parser::Functions
|
|
newfunction(:chop, :type => :rvalue, :doc => <<-'EOS'
|
|
Returns a new string with the last character removed. If the string ends
|
|
with `\r\n`, both characters are removed. Applying chop to an empty
|
|
string returns an empty string. If you wish to merely remove record
|
|
separators then you should use the `chomp` function.
|
|
Requires a string or array of strings as input.
|
|
EOS
|
|
) do |arguments|
|
|
|
|
raise(Puppet::ParseError, "chop(): Wrong number of arguments " +
|
|
"given (#{arguments.size} for 1)") if arguments.size < 1
|
|
|
|
value = arguments[0]
|
|
|
|
unless value.is_a?(Array) || value.is_a?(String)
|
|
raise(Puppet::ParseError, 'chop(): Requires either an ' +
|
|
'array or string to work with')
|
|
end
|
|
|
|
if value.is_a?(Array)
|
|
# Numbers in Puppet are often string-encoded which is troublesome ...
|
|
result = value.collect { |i| i.is_a?(String) ? i.chop : i }
|
|
else
|
|
result = value.chop
|
|
end
|
|
|
|
return result
|
|
end
|
|
end
|
|
|
|
# vim: set ts=2 sw=2 et :
|