28254bef6b
its simpler version. Signed-off-by: Krzysztof Wilczynski <krzysztof.wilczynski@linux.com>
74 lines
1.9 KiB
Ruby
74 lines
1.9 KiB
Ruby
#
|
|
# join.rb
|
|
#
|
|
|
|
module Puppet::Parser::Functions
|
|
newfunction(:join, :type => :rvalue, :doc => <<-EOS
|
|
This function will allow to concatenate elements of an array together
|
|
with a given suffix and optionally with prefix if such is given ...
|
|
|
|
For example:
|
|
|
|
Given the following sample manifest:
|
|
|
|
define iterator {
|
|
notice $name
|
|
}
|
|
|
|
$array = ['a', 'b', 'c']
|
|
|
|
$result = split(join($array, ',', 'letter_'), ',')
|
|
|
|
notice $result
|
|
|
|
iterator { $result: }
|
|
|
|
This will produce the following:
|
|
|
|
notice: Scope(Class[main]): letter_a letter_b letter_c
|
|
notice: Scope(Iterator[letter_a]): letter_a
|
|
notice: Scope(Iterator[letter_b]): letter_b
|
|
notice: Scope(Iterator[letter_c]): letter_c
|
|
|
|
Which allows you to avoid resorting to the following:
|
|
|
|
$result = split(inline_template("<%= array.collect { |i| \"letter_#{i}\" }.join(',') %>"), ',')
|
|
|
|
Phasing out the need for use and abuse of the infamous inline_template
|
|
in the example above and which in this very case is extremely ugly as
|
|
we have to escape double-quotes to make Puppet parser not evaluate them.
|
|
EOS
|
|
) do |arguments|
|
|
|
|
# Technically we support three arguments but only first two are mandatory ...
|
|
raise(Puppet::ParseError, "join(): Wrong number of arguments " +
|
|
"given (#{arguments.size} for 2)") if arguments.size < 2
|
|
|
|
array = arguments[0]
|
|
|
|
if not array.is_a?(Array)
|
|
raise(Puppet::ParseError, 'join(): Requires an array to work with')
|
|
end
|
|
|
|
suffix = arguments[1]
|
|
prefix = arguments[2] if arguments[2]
|
|
|
|
raise(Puppet::ParseError, 'join(): You must provide suffix ' +
|
|
'to join array elements with') if suffix.empty?
|
|
|
|
if prefix and prefix.empty?
|
|
raise(Puppet::ParseError, 'join(): You must provide prefix ' +
|
|
'to add to join')
|
|
end
|
|
|
|
if prefix and not prefix.empty?
|
|
result = prefix + array.join(suffix + prefix)
|
|
else
|
|
result = array.join(suffix)
|
|
end
|
|
|
|
return result
|
|
end
|
|
end
|
|
|
|
# vim: set ts=2 sw=2 et :
|