Update stdlib and concat to 6.1.0 both
[mirror/dsa-puppet.git] / 3rdparty / modules / stdlib / lib / puppet / parser / functions / zip.rb
1 #
2 # zip.rb
3 #
4 module Puppet::Parser::Functions
5   newfunction(:zip, :type => :rvalue, :doc => <<-DOC
6     @summary
7       Takes one element from first array and merges corresponding elements from second array.
8
9     @return
10       This generates a sequence of n-element arrays, where n is one more than the count of arguments.
11
12     @example
13       zip(['1','2','3'],['4','5','6'])
14       Would result in: ["1", "4"], ["2", "5"], ["3", "6"]
15     DOC
16              ) do |arguments|
17
18     # Technically we support three arguments but only first is mandatory ...
19     raise(Puppet::ParseError, "zip(): Wrong number of arguments given (#{arguments.size} for 2)") if arguments.size < 2
20
21     a = arguments[0]
22     b = arguments[1]
23
24     unless a.is_a?(Array) && b.is_a?(Array)
25       raise(Puppet::ParseError, 'zip(): Requires array to work with')
26     end
27
28     flatten = function_str2bool([arguments[2]]) if arguments[2]
29
30     result = a.zip(b)
31     result = flatten ? result.flatten : result
32
33     return result
34   end
35 end
36
37 # vim: set ts=2 sw=2 et :