From 738db6eb706c81d5b2a69692c77769432ec0c824 Mon Sep 17 00:00:00 2001 From: Krzysztof Wilczynski Date: Tue, 26 Apr 2011 00:05:20 +0100 Subject: Re-factor of the original function. Now its behaviour is either to join with prefix or just add prefix or simply join. This depends on its use. Signed-off-by: Krzysztof Wilczynski --- join_with_prefix.rb | 64 ++++++++++++----------------------------------------- 1 file changed, 14 insertions(+), 50 deletions(-) diff --git a/join_with_prefix.rb b/join_with_prefix.rb index 469763a..c0a2e4e 100644 --- a/join_with_prefix.rb +++ b/join_with_prefix.rb @@ -1,70 +1,34 @@ # -# join.rb +# join_with_prefix.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. + newfunction(:join_with_prefix, :type => :rvalue, :doc => <<-EOS EOS ) do |arguments| - # Technically we support three arguments but only first two are mandatory ... + # Technically we support three arguments but only first is mandatory ... raise(Puppet::ParseError, "join(): Wrong number of arguments " + - "given (#{arguments.size} for 2)") if arguments.size < 2 + "given (#{arguments.size} for 1)") if arguments.size < 1 array = arguments[0] if not array.is_a?(Array) - raise(Puppet::ParseError, 'join(): Requires an array to work with') + raise(Puppet::ParseError, 'join_with_prefix(): 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? + prefix = arguments[1] if arguments[1] + suffix = arguments[2] if arguments[2] - if prefix and prefix.empty? - raise(Puppet::ParseError, 'join(): You must provide prefix ' + - 'to add to join') - end - - if prefix and not prefix.empty? + if prefix and suffix result = prefix + array.join(suffix + prefix) - else + elsif prefix and not suffix + result = array.collect { |i| prefix ? prefix + i : i } + elsif suffix and not prefix result = array.join(suffix) + else + result = array.join end return result -- cgit v1.2.3