From bdf59a561877ab9ac97a89697eaeb8e0db88a408 Mon Sep 17 00:00:00 2001 From: Pratik Naik Date: Wed, 30 Dec 2009 12:00:26 +0530 Subject: Add Relation#any? and Relation#many? --- activerecord/lib/active_record/relation.rb | 16 ++++++++++++++++ activerecord/test/cases/relations_test.rb | 26 ++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) (limited to 'activerecord') diff --git a/activerecord/lib/active_record/relation.rb b/activerecord/lib/active_record/relation.rb index 64261db809..fa517aba38 100644 --- a/activerecord/lib/active_record/relation.rb +++ b/activerecord/lib/active_record/relation.rb @@ -238,6 +238,22 @@ module ActiveRecord loaded? ? @records.empty? : count.zero? end + def any? + if block_given? + to_a.any? { |*block_args| yield(*block_args) } + else + !empty? + end + end + + def many? + if block_given? + to_a.many? { |*block_args| yield(*block_args) } + else + size > 1 + end + end + def destroy_all to_a.each {|object| object.destroy} reset diff --git a/activerecord/test/cases/relations_test.rb b/activerecord/test/cases/relations_test.rb index 7b5ff246c0..5d6f9ad430 100644 --- a/activerecord/test/cases/relations_test.rb +++ b/activerecord/test/cases/relations_test.rb @@ -445,4 +445,30 @@ class RelationTest < ActiveRecord::TestCase assert_equal expected, posts.count end + def test_any + posts = Post.scoped + + assert_queries(3) do + assert posts.any? # Uses COUNT() + assert ! posts.where(:id => nil).any? + + assert posts.any? {|p| p.id > 0 } + assert ! posts.any? {|p| p.id <= 0 } + end + + assert posts.loaded? + end + + def test_many + posts = Post.scoped + + assert_queries(2) do + assert posts.many? # Uses COUNT() + assert posts.many? {|p| p.id > 0 } + assert ! posts.many? {|p| p.id < 2 } + end + + assert posts.loaded? + end + end -- cgit v1.2.3