summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff McCune <jeff@puppetlabs.com>2011-08-01 11:30:28 -0700
committerJeff McCune <jeff@puppetlabs.com>2011-08-01 11:45:08 -0700
commit4725c97102e1013e212b76b349a97f9dda51fabc (patch)
tree3d21a63153af0fd6845801344ad71adf7b35b310
parent2e3d49d17448ae799c88470f2bb5b09d463bbe22 (diff)
(#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.rb12
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