From 4725c97102e1013e212b76b349a97f9dda51fabc Mon Sep 17 00:00:00 2001 From: Jeff McCune Date: Mon, 1 Aug 2011 11:30:28 -0700 Subject: (#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 --- lib/puppet/parser/functions/merge.rb | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'lib/puppet') 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 -- cgit v1.2.3