From 465eda2fd118e66995ffb3b8dd0b01d8d7579a9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Marohnic=CC=81?= Date: Tue, 27 Sep 2011 15:13:31 +0200 Subject: [PATCH] Active Record: fix `size` method for grouped relations --- lib/will_paginate/active_record.rb | 11 ++++------- spec/finders/active_record_spec.rb | 7 +++++++ 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/lib/will_paginate/active_record.rb b/lib/will_paginate/active_record.rb index b88395cb4..1b29e5062 100644 --- a/lib/will_paginate/active_record.rb +++ b/lib/will_paginate/active_record.rb @@ -73,7 +73,7 @@ def count # workaround for Active Record 3.0 def size - if !loaded? and limit_value + if !loaded? and limit_value and group_values.empty? [super, limit_value].min else super @@ -83,12 +83,9 @@ def size # overloaded to be pagination-aware def empty? if !loaded? and offset_value - rel_count = count - if rel_count.respond_to?(:size) and !rel_count.is_a?(Integer) - rel_count.size <= offset_value - else - rel_count <= offset_value - end + result = count + result = result.size if result.respond_to?(:size) and !result.is_a?(Integer) + result <= offset_value else super end diff --git a/spec/finders/active_record_spec.rb b/spec/finders/active_record_spec.rb index 2c85d37eb..aaa0e69c4 100644 --- a/spec/finders/active_record_spec.rb +++ b/spec/finders/active_record_spec.rb @@ -146,6 +146,13 @@ }.should run_queries(1) end + it "supports `size` for grouped queries" do + topics = Topic.group(:project_id).paginate :page => 1, :per_page => 3 + lambda { + topics.size.should == {nil=>2, 1=>2} + }.should run_queries(1) + end + it "overrides total_entries count with a fixed value" do lambda { topics = Topic.paginate :page => 1, :per_page => 3, :total_entries => 999