mirror of
https://github.com/kaminari/kaminari.git
synced 2022-11-09 13:44:37 -05:00
Merge pull request #301 from zpieslak/master
Add max_pages option (similar as in #88)
This commit is contained in:
commit
992fb9f935
6 changed files with 80 additions and 1 deletions
|
@ -24,6 +24,7 @@ module Kaminari
|
|||
config_accessor :left
|
||||
config_accessor :right
|
||||
config_accessor :page_method_name
|
||||
config_accessor :max_pages
|
||||
|
||||
def param_name
|
||||
config.param_name.respond_to?(:call) ? config.param_name.call : config.param_name
|
||||
|
@ -45,5 +46,6 @@ module Kaminari
|
|||
config.right = 0
|
||||
config.page_method_name = :page
|
||||
config.param_name = :page
|
||||
config.max_pages = nil
|
||||
end
|
||||
end
|
||||
|
|
|
@ -29,6 +29,20 @@ module Kaminari
|
|||
def max_per_page
|
||||
@_max_per_page || Kaminari.config.max_per_page
|
||||
end
|
||||
|
||||
# Overrides the max_pages value per model
|
||||
# class Article < ActiveRecord::Base
|
||||
# max_pages_per 100
|
||||
# end
|
||||
def max_pages_per(val)
|
||||
@_max_pages = val
|
||||
end
|
||||
|
||||
# This model's max_pages value
|
||||
# returns max_pages value unless explicitly overridden via <tt>max_pages_per</tt>
|
||||
def max_pages
|
||||
@_max_pages || Kaminari.config.max_pages
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -18,7 +18,12 @@ module Kaminari
|
|||
|
||||
# Total number of pages
|
||||
def total_pages
|
||||
(total_count.to_f / limit_value).ceil
|
||||
total_pages_count = (total_count.to_f / limit_value).ceil
|
||||
if max_pages.present? && max_pages < total_pages_count
|
||||
max_pages
|
||||
else
|
||||
total_pages_count
|
||||
end
|
||||
end
|
||||
#FIXME for compatibility. remove num_pages at some time in the future
|
||||
alias num_pages total_pages
|
||||
|
|
|
@ -73,4 +73,19 @@ describe Kaminari::Configuration do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
describe 'max_pages' do
|
||||
context 'by default' do
|
||||
its(:max_pages) { should == nil }
|
||||
end
|
||||
context 'configure via config block' do
|
||||
before do
|
||||
Kaminari.configure {|c| c.max_pages = 5}
|
||||
end
|
||||
its(:max_pages) { should == 5 }
|
||||
after do
|
||||
Kaminari.configure {|c| c.max_pages = nil}
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
23
spec/models/active_record/max_pages_spec.rb
Normal file
23
spec/models/active_record/max_pages_spec.rb
Normal file
|
@ -0,0 +1,23 @@
|
|||
require 'spec_helper'
|
||||
|
||||
if defined? ActiveRecord
|
||||
|
||||
describe 'max pages' do
|
||||
describe 'AR::Base' do
|
||||
subject { ActiveRecord::Base }
|
||||
it { should_not respond_to :max_pages_per }
|
||||
end
|
||||
|
||||
subject { User.page 0 }
|
||||
|
||||
context 'by default' do
|
||||
its(:max_pages) { should == nil }
|
||||
end
|
||||
|
||||
context 'when explicitly set via max_pages_per' do
|
||||
before { User.max_pages_per 3 }
|
||||
its(:max_pages) { should == 3 }
|
||||
after { User.max_pages_per nil }
|
||||
end
|
||||
end
|
||||
end
|
|
@ -98,6 +98,26 @@ if defined? ActiveRecord
|
|||
subject { model_class.page(5).per('aho') }
|
||||
its(:total_pages) { should == 4 }
|
||||
end
|
||||
|
||||
context 'with max_pages < total pages count from database' do
|
||||
before { model_class.max_pages_per 3 }
|
||||
subject { model_class.page }
|
||||
its(:total_pages) { should == 3 }
|
||||
after { model_class.max_pages_per nil }
|
||||
end
|
||||
|
||||
context 'with max_pages > total pages count from database' do
|
||||
before { model_class.max_pages_per 11 }
|
||||
subject { model_class.page }
|
||||
its(:total_pages) { should == 4 }
|
||||
after { model_class.max_pages_per nil }
|
||||
end
|
||||
|
||||
context 'with max_pages is nil' do
|
||||
before { model_class.max_pages_per nil }
|
||||
subject { model_class.page }
|
||||
its(:total_pages) { should == 4 }
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue