diff options
author | Jon Leighton <j@jonathanleighton.com> | 2012-07-27 12:01:25 +0100 |
---|---|---|
committer | Jon Leighton <j@jonathanleighton.com> | 2012-07-27 13:34:12 +0100 |
commit | 6a81ccd69d96f36f4322ef927191ab5a35e68d68 (patch) | |
tree | eefd3b92255fa3969e412c88633332a47808f3c5 /activerecord/test/cases/base_test.rb | |
parent | f1afd7765c2a35cc77e1ee40466db36f181e29f5 (diff) | |
download | rails-6a81ccd69d96f36f4322ef927191ab5a35e68d68.tar.gz rails-6a81ccd69d96f36f4322ef927191ab5a35e68d68.tar.bz2 rails-6a81ccd69d96f36f4322ef927191ab5a35e68d68.zip |
ActiveRecord::Base.all returns a Relation.
Previously it returned an Array.
If you want an array, call e.g. `Post.to_a` rather than `Post.all`. This
is more explicit.
In most cases this should not break existing code, since
Relations use method_missing to delegate unknown methods to #to_a
anyway.
Diffstat (limited to 'activerecord/test/cases/base_test.rb')
-rw-r--r-- | activerecord/test/cases/base_test.rb | 58 |
1 files changed, 33 insertions, 25 deletions
diff --git a/activerecord/test/cases/base_test.rb b/activerecord/test/cases/base_test.rb index 8a30ee5fc8..eb8847312b 100644 --- a/activerecord/test/cases/base_test.rb +++ b/activerecord/test/cases/base_test.rb @@ -131,36 +131,36 @@ class BasicsTest < ActiveRecord::TestCase unless current_adapter?(:PostgreSQLAdapter,:OracleAdapter,:SQLServerAdapter) def test_limit_with_comma - assert Topic.limit("1,2").all + assert Topic.limit("1,2").to_a end end def test_limit_without_comma - assert_equal 1, Topic.limit("1").all.length - assert_equal 1, Topic.limit(1).all.length + assert_equal 1, Topic.limit("1").to_a.length + assert_equal 1, Topic.limit(1).to_a.length end def test_invalid_limit assert_raises(ArgumentError) do - Topic.limit("asdfadf").all + Topic.limit("asdfadf").to_a end end def test_limit_should_sanitize_sql_injection_for_limit_without_comas assert_raises(ArgumentError) do - Topic.limit("1 select * from schema").all + Topic.limit("1 select * from schema").to_a end end def test_limit_should_sanitize_sql_injection_for_limit_with_comas assert_raises(ArgumentError) do - Topic.limit("1, 7 procedure help()").all + Topic.limit("1, 7 procedure help()").to_a end end unless current_adapter?(:MysqlAdapter) || current_adapter?(:Mysql2Adapter) def test_limit_should_allow_sql_literal - assert_equal 1, Topic.limit(Arel.sql('2-1')).all.length + assert_equal 1, Topic.limit(Arel.sql('2-1')).to_a.length end end @@ -349,13 +349,13 @@ class BasicsTest < ActiveRecord::TestCase end def test_load - topics = Topic.scoped(:order => 'id').all + topics = Topic.scoped(:order => 'id').to_a assert_equal(4, topics.size) assert_equal(topics(:first).title, topics.first.title) end def test_load_with_condition - topics = Topic.scoped(:where => "author_name = 'Mary'").all + topics = Topic.scoped(:where => "author_name = 'Mary'").to_a assert_equal(1, topics.size) assert_equal(topics(:second).title, topics.first.title) @@ -1218,10 +1218,10 @@ class BasicsTest < ActiveRecord::TestCase end def test_quoting_arrays - replies = Reply.scoped(:where => [ "id IN (?)", topics(:first).replies.collect(&:id) ]).all + replies = Reply.scoped(:where => [ "id IN (?)", topics(:first).replies.collect(&:id) ]).to_a assert_equal topics(:first).replies.size, replies.size - replies = Reply.scoped(:where => [ "id IN (?)", [] ]).all + replies = Reply.scoped(:where => [ "id IN (?)", [] ]).to_a assert_equal 0, replies.size end @@ -1556,7 +1556,7 @@ class BasicsTest < ActiveRecord::TestCase def test_no_limit_offset assert_nothing_raised do - Developer.scoped(:offset => 2).all + Developer.scoped(:offset => 2).to_a end end @@ -1570,43 +1570,43 @@ class BasicsTest < ActiveRecord::TestCase end def test_all - developers = Developer.all + developers = Developer.to_a assert_kind_of Array, developers - assert_equal Developer.all, developers + assert_equal Developer.to_a, developers end def test_all_with_conditions - assert_equal Developer.scoped(:order => 'id desc').all, Developer.order('id desc').all + assert_equal Developer.scoped(:order => 'id desc').to_a, Developer.order('id desc').to_a end def test_find_ordered_last last = Developer.scoped(:order => 'developers.salary ASC').last - assert_equal last, Developer.scoped(:order => 'developers.salary ASC').all.last + assert_equal last, Developer.scoped(:order => 'developers.salary ASC').to_a.last end def test_find_reverse_ordered_last last = Developer.scoped(:order => 'developers.salary DESC').last - assert_equal last, Developer.scoped(:order => 'developers.salary DESC').all.last + assert_equal last, Developer.scoped(:order => 'developers.salary DESC').to_a.last end def test_find_multiple_ordered_last last = Developer.scoped(:order => 'developers.name, developers.salary DESC').last - assert_equal last, Developer.scoped(:order => 'developers.name, developers.salary DESC').all.last + assert_equal last, Developer.scoped(:order => 'developers.name, developers.salary DESC').to_a.last end def test_find_keeps_multiple_order_values - combined = Developer.scoped(:order => 'developers.name, developers.salary').all - assert_equal combined, Developer.scoped(:order => ['developers.name', 'developers.salary']).all + combined = Developer.scoped(:order => 'developers.name, developers.salary').to_a + assert_equal combined, Developer.scoped(:order => ['developers.name', 'developers.salary']).to_a end def test_find_keeps_multiple_group_values - combined = Developer.scoped(:group => 'developers.name, developers.salary, developers.id, developers.created_at, developers.updated_at').all - assert_equal combined, Developer.scoped(:group => ['developers.name', 'developers.salary', 'developers.id', 'developers.created_at', 'developers.updated_at']).all + combined = Developer.scoped(:group => 'developers.name, developers.salary, developers.id, developers.created_at, developers.updated_at').to_a + assert_equal combined, Developer.scoped(:group => ['developers.name', 'developers.salary', 'developers.id', 'developers.created_at', 'developers.updated_at']).to_a end def test_find_symbol_ordered_last last = Developer.scoped(:order => :salary).last - assert_equal last, Developer.scoped(:order => :salary).all.last + assert_equal last, Developer.scoped(:order => :salary).to_a.last end def test_abstract_class @@ -1890,7 +1890,7 @@ class BasicsTest < ActiveRecord::TestCase def test_uniq_delegates_to_scoped scope = stub - Bird.stubs(:scoped).returns(mock(:uniq => scope)) + Bird.stubs(:all).returns(mock(:uniq => scope)) assert_equal scope, Bird.uniq end @@ -1957,7 +1957,7 @@ class BasicsTest < ActiveRecord::TestCase scope.expects(meth).with(:foo, :bar).returns(record) klass = Class.new(ActiveRecord::Base) - klass.stubs(:scoped => scope) + klass.stubs(:all => scope) assert_equal record, klass.public_send(meth, :foo, :bar) end @@ -1967,4 +1967,12 @@ class BasicsTest < ActiveRecord::TestCase klass = Class.new(ActiveRecord::Base) assert_equal ['foo'], klass.scoped(select: 'foo').select_values end + + test "Model.to_a returns an array" do + assert_equal Post.all.to_a, Post.to_a + end + + test "Model.all returns a relation" do + assert Post.all.is_a?(ActiveRecord::Relation) + end end |