提交 93e10f99 编写于 作者: J Jan De Poorter 提交者: Pratik Naik

Ensure NamedScope#any? uses COUNT query wherever possible. [#680 state:resolved]

Signed-off-by: NPratik Naik <pratiknaik@gmail.com>
上级 26816854
......@@ -103,7 +103,7 @@ class Scope
attr_reader :proxy_scope, :proxy_options
[].methods.each do |m|
unless m =~ /(^__|^nil\?|^send|^object_id$|class|extend|find|count|sum|average|maximum|minimum|paginate|first|last|empty?)/
unless m =~ /(^__|^nil\?|^send|^object_id$|class|extend|find|count|sum|average|maximum|minimum|paginate|first|last|empty?|any?)/
delegate m, :to => :proxy_found
end
end
......@@ -140,6 +140,14 @@ def empty?
@found ? @found.empty? : count.zero?
end
def any?
if block_given?
proxy_found.any? { |*block_args| yield(*block_args) }
else
!empty?
end
end
protected
def proxy_found
@found || load_found
......
......@@ -184,6 +184,28 @@ def test_empty_should_not_load_results
end
end
def test_any_should_not_load_results
topics = Topic.base
assert_queries(1) do
topics.expects(:empty?).returns(true)
assert !topics.any?
end
end
def test_any_should_call_proxy_found_if_using_a_block
topics = Topic.base
assert_queries(1) do
topics.expects(:empty?).never
topics.any? { true }
end
end
def test_any_should_not_fire_query_if_named_scope_loaded
topics = Topic.base
topics.collect # force load
assert_no_queries { assert topics.any? }
end
def test_should_build_with_proxy_options
topic = Topic.approved.build({})
assert topic.approved
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册