diff options
author | Jeff McCune <jeff@puppetlabs.com> | 2011-08-01 11:30:28 -0700 |
---|---|---|
committer | Jeff McCune <jeff@puppetlabs.com> | 2011-08-01 11:45:08 -0700 |
commit | 4725c97102e1013e212b76b349a97f9dda51fabc (patch) | |
tree | 3d21a63153af0fd6845801344ad71adf7b35b310 | |
parent | 2e3d49d17448ae799c88470f2bb5b09d463bbe22 (diff) | |
download | puppet-stdlib-4725c97102e1013e212b76b349a97f9dda51fabc.tar.gz puppet-stdlib-4725c97102e1013e212b76b349a97f9dda51fabc.tar.bz2 |
(#8717) Make merge() function work with Ruby 1.8.5
The previous behavior of the merge() function used Array#inject with two
arguments. Ruby 1.8.5 only supports inject being used with one
argument.
This change initializes and empty Hash object and merges each argument
into the accumulator. The last argument still "wins" in the merge.
rspec tests (cd spec; rspec **/*_spec.rb) verified as passing with this
change.
Reviewed-by: Dan Bode
-rw-r--r-- | lib/puppet/parser/functions/merge.rb | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/lib/puppet/parser/functions/merge.rb b/lib/puppet/parser/functions/merge.rb index 6693884..d2dc0f9 100644 --- a/lib/puppet/parser/functions/merge.rb +++ b/lib/puppet/parser/functions/merge.rb @@ -1,5 +1,4 @@ module Puppet::Parser::Functions - newfunction(:merge, :type => :rvalue, :doc => <<-'ENDHEREDOC') do |args| Merges two or more hashes together and returns the resulting hash. @@ -15,14 +14,17 @@ module Puppet::Parser::Functions if args.length < 2 raise Puppet::ParseError, ("merge(): wrong number of arguments (#{args.length}; must be at least 2)") end + + # The hash we accumulate into + accumulator = Hash.new + # Merge into the accumulator hash args.each do |arg| unless arg.is_a?(Hash) raise Puppet::ParseError, "merge: unexpected argument type #{arg.class}, only expects hash arguments" end + accumulator.merge!(arg) end - - args.inject({}, :merge) - + # Return the fully merged hash + accumulator end - end |