From b8757b7f0a5dfbd78b442a3d6691b252e3db28c3 Mon Sep 17 00:00:00 2001 From: Akira Matsuda Date: Thu, 12 Jan 2017 08:53:23 +0900 Subject: [PATCH] Paginate per `default_per_page` rather than `max_paginates_per` by default Fixes a regression reported at https://github.com/kaminari/kaminari/issues/813#issuecomment-271919074 > Now (1.0) if we run .per with nil argument, it is trying use max_per_page instead of default_per_page --- .../lib/kaminari/models/page_scope_methods.rb | 8 +++----- kaminari-core/test/models/active_record/scopes_test.rb | 10 ++++++++++ 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/kaminari-core/lib/kaminari/models/page_scope_methods.rb b/kaminari-core/lib/kaminari/models/page_scope_methods.rb index 89a71bced..1c2cce38f 100644 --- a/kaminari-core/lib/kaminari/models/page_scope_methods.rb +++ b/kaminari-core/lib/kaminari/models/page_scope_methods.rb @@ -5,14 +5,12 @@ module PageScopeMethods # Model.page(3).per(10) def per(num, max_per_page: nil) max_per_page ||= ((defined?(@_max_per_page) && @_max_per_page) || self.max_per_page) - @_per = num - if num.nil? && max_per_page - limit(max_per_page).offset(offset_value / limit_value * max_per_page) - elsif (n = num.to_i) < 0 || !(/^\d/ =~ num.to_s) + @_per = num || default_per_page + if (n = num.to_i) < 0 || !(/^\d/ =~ num.to_s) self elsif n.zero? limit(n) - elsif max_per_page && max_per_page < n + elsif max_per_page && (max_per_page < n) limit(max_per_page).offset(offset_value / limit_value * max_per_page) else limit(n).offset(offset_value / limit_value * n) diff --git a/kaminari-core/test/models/active_record/scopes_test.rb b/kaminari-core/test/models/active_record/scopes_test.rb index 1c1f3f9cb..3710145bf 100644 --- a/kaminari-core/test/models/active_record/scopes_test.rb +++ b/kaminari-core/test/models/active_record/scopes_test.rb @@ -97,6 +97,16 @@ def shutdown assert_equal model_class.default_per_page, model_class.page(1).per(nil).count end + test 'page 1 per nil with max_per_page > default_per_page' do + begin + model_class.max_paginates_per(30) + + assert_equal 25, model_class.page(1).per(nil).count + ensure + model_class.max_paginates_per(nil) + end + end + test 'page 1 per nil with max_per_page < default_per_page' do begin model_class.max_paginates_per(10)