diff options
| author | Carlos Antonio da Silva <carlosantoniodasilva@gmail.com> | 2012-11-21 22:23:41 -0200 |
|---|---|---|
| committer | Carlos Antonio da Silva <carlosantoniodasilva@gmail.com> | 2012-11-21 22:23:41 -0200 |
| commit | a9aeba671d7af941b790afa7d0126f5b7c52aa7f (patch) | |
| tree | a73f4abd20a8a42064916670a0ea6fe401ccc7ad /activerecord/test | |
| parent | ae934aef4af05f21d231015485cbc5a96df7a4d6 (diff) | |
| parent | fd1c45761e023cecdc9ad472df64f8c265e25aaf (diff) | |
| download | rails-a9aeba671d7af941b790afa7d0126f5b7c52aa7f.tar.gz rails-a9aeba671d7af941b790afa7d0126f5b7c52aa7f.tar.bz2 rails-a9aeba671d7af941b790afa7d0126f5b7c52aa7f.zip | |
Merge branch 'deprecate-calculations-with-block'
Follow up of the discussion from the original merge commit:
https://github.com/rails/rails/commit/f9cb645dfcb5cc89f59d2f8b58a019486c828c73#commitcomment-1414561
We want to avoid people's mistakes with methods like count and sum when
called with a block, that can easily lead to code performing poorly and
that could be way better written with a db query.
Please check the discussion there for more background.
Closes #8268
Diffstat (limited to 'activerecord/test')
| -rw-r--r-- | activerecord/test/cases/associations/has_many_associations_test.rb | 6 | ||||
| -rw-r--r-- | activerecord/test/cases/calculations_test.rb | 22 |
2 files changed, 10 insertions, 18 deletions
diff --git a/activerecord/test/cases/associations/has_many_associations_test.rb b/activerecord/test/cases/associations/has_many_associations_test.rb index 01afa087be..6cdc166533 100644 --- a/activerecord/test/cases/associations/has_many_associations_test.rb +++ b/activerecord/test/cases/associations/has_many_associations_test.rb @@ -1658,6 +1658,12 @@ class HasManyAssociationsTest < ActiveRecord::TestCase assert_deprecated { klass.has_many :foo, :counter_sql => 'lol' } end + test "sum calculation with block for array compatibility is deprecated" do + assert_deprecated do + posts(:welcome).comments.sum { |c| c.id } + end + end + test "has many associations on new records use null relations" do post = Post.new diff --git a/activerecord/test/cases/calculations_test.rb b/activerecord/test/cases/calculations_test.rb index 65d28ea028..5cb7eabf0e 100644 --- a/activerecord/test/cases/calculations_test.rb +++ b/activerecord/test/cases/calculations_test.rb @@ -383,30 +383,16 @@ class CalculationsTest < ActiveRecord::TestCase Company.where(:type => "Firm").from('companies').count(:type) end - def test_count_with_block_acts_as_array - accounts = Account.where('id > 0') - assert_equal Account.count, accounts.count { true } - assert_equal 0, accounts.count { false } - assert_equal Account.where('credit_limit > 50').size, accounts.count { |account| account.credit_limit > 50 } - assert_equal Account.count, Account.count { true } - assert_equal 0, Account.count { false } - end - - def test_sum_with_block_acts_as_array - accounts = Account.where('id > 0') - assert_equal Account.sum(:credit_limit), accounts.sum { |account| account.credit_limit } - assert_equal Account.sum(:credit_limit) + Account.count, accounts.sum{ |account| account.credit_limit + 1 } - assert_equal 0, accounts.sum { |account| 0 } - end - def test_sum_with_from_option assert_equal Account.sum(:credit_limit), Account.from('accounts').sum(:credit_limit) assert_equal Account.where("credit_limit > 50").sum(:credit_limit), Account.where("credit_limit > 50").from('accounts').sum(:credit_limit) end - def test_sum_array_compatibility - assert_equal Account.sum(:credit_limit), Account.sum(&:credit_limit) + def test_sum_array_compatibility_deprecation + assert_deprecated do + assert_equal Account.sum(:credit_limit), Account.sum(&:credit_limit) + end end def test_average_with_from_option |
