diff options
author | Jeff McCune <jeff@puppetlabs.com> | 2011-08-08 16:58:14 -0700 |
---|---|---|
committer | Jeff McCune <jeff@puppetlabs.com> | 2011-08-08 16:58:40 -0700 |
commit | 33887f9be50c4fd94bbd08d7c00d9b3d97e29d21 (patch) | |
tree | b7c5b8cd3595b1db0a835f31e551f5baf6b2c0ed /lib/puppet/parser/functions/zip.rb | |
parent | e8fb6917d102d8a45d5682b79f33b1ac0d52d73b (diff) | |
parent | aa27fc76c7d5fa090ea1d47027856c3e70c6ae8f (diff) | |
download | puppet-stdlib-33887f9be50c4fd94bbd08d7c00d9b3d97e29d21.tar.gz puppet-stdlib-33887f9be50c4fd94bbd08d7c00d9b3d97e29d21.tar.bz2 |
Merge branch 'issue/master/8797_puppetlabs-functions_merge'
Closes pull request #12
Reviewed-by: Jeff McCune
Verified all spec tests pass using rspec **/*_spec.rb
* issue/master/8797_puppetlabs-functions_merge: (164 commits)
* Moved kwalify to puppetlabs-kwalify project * Re-arranged tests in line with puppetlabs-stdlib
Prep for stdlib merge * Renamed load_yaml & load_json to parseyaml & parsejson * Renamed is_valid_* functions and remove the 'valid_'
Fix some ruby 1.9.2 issues.
(#3) Provide documentation for remaining functions.
(#3) Apply missing documentation to more functions.
Remove rand.
Some improvements to values_at tests.
(#1) provide some more detailed tests for a number of functions.
Removed date stub since this functinality is available in strftime anyway.
(#2) fix is_string finally so it also makes sure numbers return false.
(#2) unstub is_valid_domain_name
Added doc strings for first five functions
Removed join_with_prefix.
(#2) unstub is_valid_mac_address.
Allow sort for strings.
Count functionality overlaps with size - so removing it.
Removed crontab functions instead of unstubbing them.
Removed load_variables. load_yaml is sufficient to solve this problem on its own.
Remove is_valid_netmask instead of unstubbing. Doesn't seem like a sensible function on its own.
(#2) unstub is_numeric function.
...
Diffstat (limited to 'lib/puppet/parser/functions/zip.rb')
-rw-r--r-- | lib/puppet/parser/functions/zip.rb | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/lib/puppet/parser/functions/zip.rb b/lib/puppet/parser/functions/zip.rb new file mode 100644 index 0000000..2b56e9c --- /dev/null +++ b/lib/puppet/parser/functions/zip.rb @@ -0,0 +1,65 @@ +# +# zip.rb +# + +module Puppet::Parser::Functions + newfunction(:zip, :type => :rvalue, :doc => <<-EOS +Takes one element from first array and merges corresponding elements from second array. This generates a sequence of n-element arrays, where n is one more than the count of arguments. + +*Example:* + + zip(['1','2','3'],['4','5','6']) + +Would result in: + + ["1", "4"], ["2", "5"], ["3", "6"] + EOS + ) do |arguments| + + # Technically we support three arguments but only first is mandatory ... + raise(Puppet::ParseError, "zip(): Wrong number of arguments " + + "given (#{arguments.size} for 2)") if arguments.size < 2 + + a = arguments[0] + b = arguments[1] + + unless a.is_a?(Array) and b.is_a?(Array) + raise(Puppet::ParseError, 'zip(): Requires array to work with') + end + + flatten = arguments[2] if arguments[2] + + if flatten + klass = flatten.class + + # We can have either true or false, or string which resembles boolean ... + unless [FalseClass, TrueClass, String].include?(klass) + raise(Puppet::ParseError, 'zip(): Requires either ' + + 'boolean or string to work with') + end + + if flatten.is_a?(String) + # We consider all the yes, no, y, n and so on too ... + flatten = case flatten + # + # This is how undef looks like in Puppet ... + # We yield false in this case. + # + when /^$/, '' then false # Empty string will be false ... + when /^(1|t|y|true|yes)$/ then true + when /^(0|f|n|false|no)$/ then false + when /^(undef|undefined)$/ then false # This is not likely to happen ... + else + raise(Puppet::ParseError, 'zip(): Unknown type of boolean given') + end + end + end + + result = a.zip(b) + result = flatten ? result.flatten : result + + return result + end +end + +# vim: set ts=2 sw=2 et : |