From c0678d591ca0669268a01079966e6ddd44573204 Mon Sep 17 00:00:00 2001 From: dreamcat4 Date: Sun, 7 Jun 2009 20:09:12 +0100 Subject: [PATCH] Ruby 1.9 compatability fix - sum When summing an array of strings and [] empty array: rails/activesupport/lib/active_support/core_ext/enumerable.rb:67: in `sum': wrong number of arguments (0 for 1) (ArgumentError) Source: potionstore, ruby 1.9.1p129, rails 2-3-stable --- .../lib/active_support/core_ext/enumerable.rb | 6 +++++- activesupport/test/core_ext/enumerable_test.rb | 4 ++++ 2 files changed, 9 insertions(+), 1 deletions(-) diff --git a/activesupport/lib/active_support/core_ext/enumerable.rb b/activesupport/lib/active_support/core_ext/enumerable.rb index a7eaccf..ccd61d5 100644 --- a/activesupport/lib/active_support/core_ext/enumerable.rb +++ b/activesupport/lib/active_support/core_ext/enumerable.rb @@ -60,7 +60,11 @@ module Enumerable if block_given? map(&block).sum else - inject { |sum, element| sum + element } + if RUBY_VERSION >= '1.9' + map.reduce(:+) + else + inject { |sum, element| sum + element } + end end end diff --git a/activesupport/test/core_ext/enumerable_test.rb b/activesupport/test/core_ext/enumerable_test.rb index 92db977..77183dd 100644 --- a/activesupport/test/core_ext/enumerable_test.rb +++ b/activesupport/test/core_ext/enumerable_test.rb @@ -56,6 +56,10 @@ class EnumerableTests < Test::Unit::TestCase assert_equal 0, [].sum assert_equal 0, [].sum { |i| i } assert_equal Payment.new(0), [].sum(Payment.new(0)) + + assert_equal ["a","b"], [["a","b"],[]].sum + ab = ["strings", "empty"].sum { |s| s=="strings" ? ["a","b"] : [] } + assert_equal ["a","b"], ab end def test_each_with_object -- 1.6.2.4