]> gitweb.fluxo.info Git - puppet-stdlib.git/commitdiff
(#8717) Make merge() function work with Ruby 1.8.5
authorJeff McCune <jeff@puppetlabs.com>
Mon, 1 Aug 2011 18:30:28 +0000 (11:30 -0700)
committerJeff McCune <jeff@puppetlabs.com>
Mon, 1 Aug 2011 18:45:08 +0000 (11:45 -0700)
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

index 6693884723e3cb579578db1b2ed337951b48cdb1..d2dc0f9032e5f5855b1ae6e293188da104f07b1b 100644 (file)
@@ -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