Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Changeset 4489

Show
Ignore:
Timestamp:
06/24/06 16:14:59 (2 years ago)
Author:
david
Message:

Added Enumerable#sum for calculating a sum from the elements [DHH]

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/activesupport/CHANGELOG

    r4485 r4489  
    11*SVN* 
     2 
     3* Added Enumerable#sum for calculating a sum from the elements [DHH]. Examples: 
     4 
     5    payments.sum { |p| p.price * p.tax_rate } 
     6    payments.sum(&:price) 
     7   
     8  This is instead of payments.inject(0) { |sum, p| sum + p.price } 
    29 
    310* Correct and clarify Array#to_sentence docs.  #5458 [brad@madriska.com] 
  • trunk/activesupport/lib/active_support/core_ext/enumerable.rb

    r4349 r4489  
     1require File.dirname(__FILE__) + '/enumerable/injections' 
     2 
    13module Enumerable #:nodoc: 
    24  # Collect an enumerable into sets, grouped by the result of a block. Useful, 
     
    2123    end 
    2224  end  
     25 
     26  # Calculates a sum from the elements. Examples: 
     27  # 
     28  #  payments.sum { |p| p.price * p.tax_rate } 
     29  #  payments.sum(&:price) 
     30  # 
     31  # This is instead of payments.inject(0) { |sum, p| sum + p.price } 
     32  def sum 
     33    inject(0) { |sum, element| sum + yield(element) } 
     34  end 
    2335end 
  • trunk/activesupport/test/core_ext/enumerable_test.rb

    r4349 r4489  
    22require File.dirname(__FILE__) + '/../../lib/active_support/core_ext/enumerable' 
    33 
     4Payment = Struct.new(:price) 
     5 
    46class EnumerableTests < Test::Unit::TestCase 
    5    
    67  def test_group_by 
    78    names = %w(marcel sam david jeremy) 
     
    1819    end 
    1920  end 
     21   
     22  def test_sums 
     23    payments = [ Payment.new(5), Payment.new(15), Payment.new(10) ] 
     24    assert_equal 30, payments.sum(&:price) 
     25    assert_equal 60, payments.sum { |p| p.price * 2 } 
     26  end 
    2027end