rails_pagination 2.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.rdoc +62 -0
  3. data/Rakefile +38 -0
  4. data/lib/rails_pagination/action_view/base.rb +11 -0
  5. data/lib/rails_pagination/active_record/base.rb +25 -0
  6. data/lib/rails_pagination/active_record/relation.rb +82 -0
  7. data/lib/rails_pagination/navigation.rb +39 -0
  8. data/lib/rails_pagination/pager.rb +97 -0
  9. data/lib/rails_pagination/railtie.rb +15 -0
  10. data/lib/rails_pagination/version.rb +5 -0
  11. data/lib/rails_pagination.rb +10 -0
  12. data/test/collection_empty_test.rb +41 -0
  13. data/test/collection_first_test.rb +42 -0
  14. data/test/collection_last_test.rb +42 -0
  15. data/test/collection_middle_test.rb +42 -0
  16. data/test/collection_padding_test.rb +83 -0
  17. data/test/dummy/README.rdoc +261 -0
  18. data/test/dummy/Rakefile +7 -0
  19. data/test/dummy/app/assets/javascripts/application.js +15 -0
  20. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  21. data/test/dummy/app/controllers/application_controller.rb +3 -0
  22. data/test/dummy/app/controllers/test_controller.rb +7 -0
  23. data/test/dummy/app/helpers/application_helper.rb +2 -0
  24. data/test/dummy/app/models/model.rb +3 -0
  25. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  26. data/test/dummy/app/views/test/index.html.erb +30 -0
  27. data/test/dummy/config/application.rb +59 -0
  28. data/test/dummy/config/boot.rb +10 -0
  29. data/test/dummy/config/database.yml +25 -0
  30. data/test/dummy/config/environment.rb +5 -0
  31. data/test/dummy/config/environments/development.rb +37 -0
  32. data/test/dummy/config/environments/production.rb +67 -0
  33. data/test/dummy/config/environments/test.rb +37 -0
  34. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  35. data/test/dummy/config/initializers/inflections.rb +15 -0
  36. data/test/dummy/config/initializers/mime_types.rb +5 -0
  37. data/test/dummy/config/initializers/secret_token.rb +7 -0
  38. data/test/dummy/config/initializers/session_store.rb +8 -0
  39. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  40. data/test/dummy/config/locales/en.yml +5 -0
  41. data/test/dummy/config/routes.rb +61 -0
  42. data/test/dummy/config.ru +4 -0
  43. data/test/dummy/db/development.sqlite3 +0 -0
  44. data/test/dummy/db/migrate/20120908215532_create_models.rb +8 -0
  45. data/test/dummy/db/schema.rb +22 -0
  46. data/test/dummy/db/test.sqlite3 +0 -0
  47. data/test/dummy/log/development.log +1998 -0
  48. data/test/dummy/log/test.log +149351 -0
  49. data/test/dummy/public/404.html +26 -0
  50. data/test/dummy/public/422.html +26 -0
  51. data/test/dummy/public/500.html +25 -0
  52. data/test/dummy/public/favicon.ico +0 -0
  53. data/test/dummy/script/rails +6 -0
  54. data/test/dummy/tmp/cache/assets/CBF/7A0/sprockets%2Fc9192594b6d1b927590d37ebad844808 +0 -0
  55. data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
  56. data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
  57. data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
  58. data/test/dummy/tmp/cache/assets/D50/930/sprockets%2F277654ad498bbc928b88364ffcbad129 +0 -0
  59. data/test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
  60. data/test/dummy/tmp/cache/assets/DB2/700/sprockets%2Fa4f4b12a5cbea015faede527e4a04307 +0 -0
  61. data/test/dummy/tmp/cache/assets/DD5/C50/sprockets%2Fcdcdad84697d0b186a1de99f1950e5ab +0 -0
  62. data/test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
  63. data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  64. data/test/helpers_empty_test.rb +46 -0
  65. data/test/helpers_first_test.rb +47 -0
  66. data/test/helpers_last_test.rb +47 -0
  67. data/test/helpers_middle_test.rb +47 -0
  68. data/test/rails_pagination_test.rb +9 -0
  69. data/test/test_helper.rb +21 -0
  70. metadata +204 -0
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2012 Mattways
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,62 @@
1
+ {<img src="https://codeclimate.com/github/mattways/rails_pagination.png" />}[https://codeclimate.com/github/mattways/rails_pagination] {<img src="https://secure.travis-ci.org/mattways/rails_pagination.png?branch=master" alt="Build Status" />}[https://travis-ci.org/mattways/rails_pagination] {<img src="https://gemnasium.com/mattways/rails_pagination.png" alt="Dependency Status" />}[https://gemnasium.com/mattways/rails_pagination]
2
+
3
+ = Rails Pagination
4
+
5
+ Inspired in kaminari and will_paginate but more minimalistic
6
+
7
+ = Install
8
+
9
+ Put this line in your Gemfile:
10
+ gem 'rails_pagination'
11
+
12
+ Then bundle:
13
+ $ bundle
14
+
15
+ = Usage
16
+
17
+ The same approach as kaminari:
18
+ Model.page(1).per(20)
19
+
20
+ But doesn't force you to use any markup, just use the methods of the pager object in your views:
21
+ - pager = paginate(@collection)
22
+ - if pager.has_multiple_pages?
23
+ #pager
24
+ - if pager.has_first_page?
25
+ %a.first{:href => pager.first_page_path}= t('pager.first')
26
+ - if pager.has_previous_page?
27
+ %a.previous{:href => pager.previous_page_path}= t('pager.previous')
28
+ - if pager.navigation.has_less_pages?
29
+ %span.ellipsis ...
30
+ - for page in pager.navigation.pages
31
+ - if pager.is_current_page? page
32
+ %span.page.current= page
33
+ - else
34
+ %a.page{:href => pager.page_path(page)}= page
35
+ - if pager.navigation.has_more_pages?
36
+ %span.ellipsis ...
37
+ - if pager.has_next_page?
38
+ %a.next{:href => pager.next_page_path}= t('pager.next')
39
+ - if pager.has_last_page?
40
+ %a.last{:href => pager.last_page_path}= t('pager.last')
41
+
42
+ = Configuration
43
+
44
+ == Default param name
45
+
46
+ If you want to change the default parameter name or the default navigation length call paginate method this way:
47
+ paginate(@collection, :navigation => 3, :parameter => :p)
48
+ Or to set it globally put this in your application.rb:
49
+ config.pagination.default_parameter = :p
50
+ config.pagination.default_navigation = 5
51
+
52
+ == Default per page
53
+
54
+ If you want to change the default per_page put this in your model:
55
+ default_per_page 5
56
+ Or to set it globally put this in your application.rb:
57
+ config.pagination.default_per_page = 5
58
+
59
+ == Padding
60
+
61
+ You can use positive and negative padding:
62
+ Model.page(1).per(10).pad(-4)
data/Rakefile ADDED
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ begin
8
+ require 'rdoc/task'
9
+ rescue LoadError
10
+ require 'rdoc/rdoc'
11
+ require 'rake/rdoctask'
12
+ RDoc::Task = Rake::RDocTask
13
+ end
14
+
15
+ RDoc::Task.new(:rdoc) do |rdoc|
16
+ rdoc.rdoc_dir = 'rdoc'
17
+ rdoc.title = 'RailsPagination'
18
+ rdoc.options << '--line-numbers'
19
+ rdoc.rdoc_files.include('README.rdoc')
20
+ rdoc.rdoc_files.include('lib/**/*.rb')
21
+ end
22
+
23
+
24
+
25
+
26
+ Bundler::GemHelper.install_tasks
27
+
28
+ require 'rake/testtask'
29
+
30
+ Rake::TestTask.new(:test) do |t|
31
+ t.libs << 'lib'
32
+ t.libs << 'test'
33
+ t.pattern = 'test/**/*_test.rb'
34
+ t.verbose = false
35
+ end
36
+
37
+
38
+ task :default => :test
@@ -0,0 +1,11 @@
1
+ module RailsPagination
2
+ module ActionView
3
+ module Base
4
+
5
+ def paginate(*args)
6
+ Pager.new *args.unshift(self)
7
+ end
8
+
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,25 @@
1
+ module RailsPagination
2
+ module ActiveRecord
3
+ module Base
4
+
5
+ def inherited(subclass)
6
+ if subclass.superclass == ::ActiveRecord::Base
7
+ subclass.scope :page, Proc.new {|number|
8
+ subclass.limit(subclass.default_per_page).offset(subclass.default_per_page * ([number.to_i, 1].max - 1))
9
+ } do
10
+ include RailsPagination::ActiveRecord::Relation
11
+ end
12
+ end
13
+ end
14
+
15
+ def default_per_page(value=nil)
16
+ unless value.nil?
17
+ value = [value.to_i, 1].max
18
+ @default_per_page = value
19
+ end
20
+ defined?(@default_per_page).nil? ? Rails.application.config.pagination.default_per_page : @default_per_page
21
+ end
22
+
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,82 @@
1
+ module RailsPagination
2
+ module ActiveRecord
3
+ module Relation
4
+
5
+ def per(value)
6
+ value = [value.to_i, 1].max
7
+ limit(value).offset(value * (offset_value / limit_value))
8
+ end
9
+
10
+ def pad(value)
11
+ @padding = value
12
+ r = (offset_value + value) < 0 ? self : offset(offset_value + value)
13
+ decrease_limit? ? r.limit(limit_value + value) : r
14
+ end
15
+
16
+ def total_count
17
+ @total_count ||= begin
18
+ c = except(:offset, :limit, :order)
19
+ c = c.except(:includes) unless references_eager_loaded_tables?
20
+ uses_distinct_sql_statement = c.to_sql =~ /DISTINCT/i
21
+ if uses_distinct_sql_statement
22
+ c.length
23
+ else
24
+ c = c.count
25
+ c.respond_to?(:count) ? c.count : c
26
+ end
27
+ end
28
+ end
29
+
30
+ def total_pages
31
+ @total_pages ||= [(fixed_total_count.to_f / fixed_limit_value).ceil, 1].max
32
+ end
33
+
34
+ def current_page
35
+ @current_page ||= (offset_value.to_f / fixed_limit_value).ceil + 1
36
+ end
37
+
38
+ def previous_page
39
+ @previous_page ||= current_page > 1 ? (current_page - 1) : nil
40
+ end
41
+
42
+ def next_page
43
+ @next_page ||= current_page < total_pages ? (current_page + 1) : nil
44
+ end
45
+
46
+ def first_page
47
+ 1
48
+ end
49
+
50
+ def last_page
51
+ total_pages
52
+ end
53
+
54
+ def out_of_bounds?
55
+ @out_of_bounds ||= current_page > total_pages or current_page < first_page
56
+ end
57
+
58
+ protected
59
+
60
+ def has_padding?
61
+ not defined?(@padding).nil?
62
+ end
63
+
64
+ def padding_negative?
65
+ has_padding? and @padding < 0
66
+ end
67
+
68
+ def decrease_limit?
69
+ padding_negative? and offset_value == 0
70
+ end
71
+
72
+ def fixed_total_count
73
+ total_count - (padding_negative? ? @padding : 0)
74
+ end
75
+
76
+ def fixed_limit_value
77
+ limit_value - (decrease_limit? ? @padding : 0)
78
+ end
79
+
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,39 @@
1
+ module RailsPagination
2
+ class Navigation
3
+
4
+ def initialize(collection, length)
5
+ if collection.total_pages >= length
6
+ middle = (length / 2).ceil
7
+ if collection.current_page > collection.total_pages - middle
8
+ starts_at = collection.total_pages - length + 1
9
+ ends_at = collection.total_pages
10
+ elsif collection.current_page <= middle
11
+ starts_at = 1
12
+ ends_at = length
13
+ else
14
+ starts_at = collection.current_page - middle
15
+ ends_at = collection.current_page + middle
16
+ end
17
+ else
18
+ starts_at = 1
19
+ ends_at = collection.total_pages
20
+ end
21
+ @has_less_pages = starts_at > 1
22
+ @has_more_pages = ends_at < collection.total_pages
23
+ @pages = Range.new(starts_at, ends_at)
24
+ end
25
+
26
+ def has_less_pages?
27
+ @has_less_pages
28
+ end
29
+
30
+ def has_more_pages?
31
+ @has_more_pages
32
+ end
33
+
34
+ def pages
35
+ @pages
36
+ end
37
+
38
+ end
39
+ end
@@ -0,0 +1,97 @@
1
+ module RailsPagination
2
+ class Pager
3
+
4
+ def initialize(*args)
5
+ options = args.extract_options!
6
+ @template = args[0]
7
+ @collection = args[1]
8
+ @parameter = options[:parameter] || Rails.application.config.pagination.default_parameter
9
+ @navigation = Navigation.new(args[1], options[:navigation] || Rails.application.config.pagination.default_navigation)
10
+ end
11
+
12
+ def has_multiple_pages?
13
+ @has_multiple_pages ||= @collection.total_pages > 1
14
+ end
15
+
16
+ def is_current_page?(page)
17
+ @collection.current_page == page
18
+ end
19
+
20
+ def has_previous_page?
21
+ @has_previous_page ||= @collection.previous_page != nil
22
+ end
23
+
24
+ def has_next_page?
25
+ @has_next_page ||= @collection.next_page != nil
26
+ end
27
+
28
+ def has_first_page?
29
+ @collection.current_page > 1 and @collection.total_pages > 1
30
+ end
31
+
32
+ def is_first_page?
33
+ @is_first_page ||= @collection.current_page == 1
34
+ end
35
+
36
+ def has_last_page?
37
+ @collection.current_page != @collection.last_page and @collection.total_pages > 1
38
+ end
39
+
40
+ def is_last_page?
41
+ @is_last_page ||= @collection.current_page == total_pages
42
+ end
43
+
44
+ def navigation
45
+ @navigation
46
+ end
47
+
48
+ def page_path(page)
49
+ @template.url_for(@template.request.query_parameters.merge(@parameter => page))
50
+ end
51
+
52
+ def page_url(page)
53
+ @template.url_for(@template.request.query_parameters.merge(@parameter => page, :only_path => false))
54
+ end
55
+
56
+ def current_page_path
57
+ page_path @collection.current_page
58
+ end
59
+
60
+ def current_page_url
61
+ page_url @collection.current_page
62
+ end
63
+
64
+ def first_page_path
65
+ page_path @collection.first_page
66
+ end
67
+
68
+ def first_page_url
69
+ page_url @collection.first_page
70
+ end
71
+
72
+ def previous_page_path
73
+ page_path @collection.previous_page
74
+ end
75
+
76
+ def previous_page_url
77
+ page_url @collection.previous_page
78
+ end
79
+
80
+ def next_page_path
81
+ page_path @collection.next_page
82
+ end
83
+
84
+ def next_page_url
85
+ page_url @collection.next_page
86
+ end
87
+
88
+ def last_page_path
89
+ page_path @collection.last_page
90
+ end
91
+
92
+ def last_page_url
93
+ page_url @collection.last_page
94
+ end
95
+
96
+ end
97
+ end
@@ -0,0 +1,15 @@
1
+ module RailsPagination
2
+ class Railtie < Rails::Railtie
3
+
4
+ config.pagination = ::ActiveSupport::OrderedOptions.new
5
+ config.pagination.default_per_page = 30
6
+ config.pagination.default_parameter = :p
7
+ config.pagination.default_navigation = 5
8
+
9
+ initializer 'rails_pagination' do
10
+ ::ActiveRecord::Base.send :extend, RailsPagination::ActiveRecord::Base
11
+ ::ActionView::Base.send :include, RailsPagination::ActionView::Base
12
+ end
13
+
14
+ end
15
+ end
@@ -0,0 +1,5 @@
1
+ module RailsPagination
2
+
3
+ VERSION = '2.0.5'
4
+
5
+ end
@@ -0,0 +1,10 @@
1
+ require 'rails_pagination/action_view/base'
2
+ require 'rails_pagination/active_record/base'
3
+ require 'rails_pagination/active_record/relation'
4
+ require 'rails_pagination/navigation'
5
+ require 'rails_pagination/pager'
6
+ require 'rails_pagination/railtie'
7
+ require 'rails_pagination/version'
8
+
9
+ module RailsPagination
10
+ end
@@ -0,0 +1,41 @@
1
+ require 'test_helper'
2
+
3
+ class CollectionEmptyTest < ActiveSupport::TestCase
4
+
5
+ setup :create_records
6
+
7
+ test "should have 1 page" do
8
+ assert_equal @collection.total_pages, 1
9
+ end
10
+
11
+ test "current page should be 1" do
12
+ assert_equal @collection.current_page, 1
13
+ end
14
+
15
+ test "first page should be 1" do
16
+ assert_equal @collection.first_page, 1
17
+ end
18
+
19
+ test "should have no previous page" do
20
+ assert_nil @collection.previous_page
21
+ end
22
+
23
+ test "should have no next page" do
24
+ assert_nil @collection.next_page
25
+ end
26
+
27
+ test "last page should be 1" do
28
+ assert_equal @collection.last_page, 1
29
+ end
30
+
31
+ test "should not be out of bounds" do
32
+ assert !@collection.out_of_bounds?
33
+ end
34
+
35
+ protected
36
+
37
+ def create_records
38
+ @collection = Model.page(1).per(2)
39
+ end
40
+
41
+ end
@@ -0,0 +1,42 @@
1
+ require 'test_helper'
2
+
3
+ class CollectionFirstTest < ActiveSupport::TestCase
4
+
5
+ setup :create_records
6
+
7
+ test "should have 5 pages" do
8
+ assert_equal @collection.total_pages, 5
9
+ end
10
+
11
+ test "current page should be 1" do
12
+ assert_equal @collection.current_page, 1
13
+ end
14
+
15
+ test "first page should be 1" do
16
+ assert_equal @collection.first_page, 1
17
+ end
18
+
19
+ test "should have no previous page" do
20
+ assert_nil @collection.previous_page
21
+ end
22
+
23
+ test "next page should be 2" do
24
+ assert_equal @collection.next_page, 2
25
+ end
26
+
27
+ test "last page shuold be 5" do
28
+ assert_equal @collection.last_page, 5
29
+ end
30
+
31
+ test "should not be out of bounds" do
32
+ assert !@collection.out_of_bounds?
33
+ end
34
+
35
+ protected
36
+
37
+ def create_records
38
+ 10.times.each { |id| Model.create :title => "Record #{id}" }
39
+ @collection = Model.page(1).per(2)
40
+ end
41
+
42
+ end
@@ -0,0 +1,42 @@
1
+ require 'test_helper'
2
+
3
+ class CollectionLastTest < ActiveSupport::TestCase
4
+
5
+ setup :create_records
6
+
7
+ test "should have 5 pages" do
8
+ assert_equal @collection.total_pages, 5
9
+ end
10
+
11
+ test "current page should be 5" do
12
+ assert_equal @collection.current_page, 5
13
+ end
14
+
15
+ test "first page should be 1" do
16
+ assert_equal @collection.first_page, 1
17
+ end
18
+
19
+ test "should have previous page 4" do
20
+ assert_equal @collection.previous_page, 4
21
+ end
22
+
23
+ test "should not have next page" do
24
+ assert_nil @collection.next_page
25
+ end
26
+
27
+ test "last page shuold be 5" do
28
+ assert_equal @collection.last_page, 5
29
+ end
30
+
31
+ test "should not be out of bounds" do
32
+ assert !@collection.out_of_bounds?
33
+ end
34
+
35
+ protected
36
+
37
+ def create_records
38
+ 10.times.each { |id| Model.create :title => "Record #{id}" }
39
+ @collection = Model.page(5).per(2)
40
+ end
41
+
42
+ end
@@ -0,0 +1,42 @@
1
+ require 'test_helper'
2
+
3
+ class CollectionMiddleTest < ActiveSupport::TestCase
4
+
5
+ setup :create_records
6
+
7
+ test "should have 5 pages" do
8
+ assert_equal @collection.total_pages, 5
9
+ end
10
+
11
+ test "current page should be 3" do
12
+ assert_equal @collection.current_page, 3
13
+ end
14
+
15
+ test "first page should be 1" do
16
+ assert_equal @collection.first_page, 1
17
+ end
18
+
19
+ test "should have previous page 2" do
20
+ assert_equal @collection.previous_page, 2
21
+ end
22
+
23
+ test "should have next page 4" do
24
+ assert_equal @collection.next_page, 4
25
+ end
26
+
27
+ test "last page shuold be 5" do
28
+ assert_equal @collection.last_page, 5
29
+ end
30
+
31
+ test "should not be out of bounds" do
32
+ assert !@collection.out_of_bounds?
33
+ end
34
+
35
+ protected
36
+
37
+ def create_records
38
+ 10.times.each { |id| Model.create :title => "Record #{id}" }
39
+ @collection = Model.page(3).per(2)
40
+ end
41
+
42
+ end
@@ -0,0 +1,83 @@
1
+ require 'test_helper'
2
+
3
+ class CollectionPaddingTest < ActiveSupport::TestCase
4
+
5
+ test "negative padding should have 1 page" do
6
+ 11.times.each { |id| Model.create :title => "Record #{id}" }
7
+
8
+ @collection = Model.page(1).per(15).pad(-4)
9
+ assert_equal @collection.total_pages, 1
10
+
11
+ @collection = Model.page(2).per(15).pad(-4)
12
+ assert_equal @collection.total_pages, 1
13
+
14
+ @collection = Model.page(3).per(15).pad(-4)
15
+ assert_equal @collection.total_pages, 1
16
+ end
17
+
18
+ test "negative padding should have 2 pages" do
19
+ 12.times.each { |id| Model.create :title => "Record #{id}" }
20
+
21
+ @collection = Model.page(1).per(15).pad(-4)
22
+ assert_equal @collection.total_pages, 2
23
+
24
+ @collection = Model.page(2).per(15).pad(-4)
25
+ assert_equal @collection.total_pages, 2
26
+
27
+ @collection = Model.page(3).per(15).pad(-4)
28
+ assert_equal @collection.total_pages, 2
29
+ end
30
+
31
+ test "negative padding should have 3 pages" do
32
+ 27.times.each { |id| Model.create :title => "Record #{id}" }
33
+
34
+ @collection = Model.page(1).per(15).pad(-4)
35
+ assert_equal @collection.total_pages, 3
36
+
37
+ @collection = Model.page(2).per(15).pad(-4)
38
+ assert_equal @collection.total_pages, 3
39
+
40
+ @collection = Model.page(3).per(15).pad(-4)
41
+ assert_equal @collection.total_pages, 3
42
+ end
43
+
44
+ test "positive padding should have 1 page" do
45
+ 15.times.each { |id| Model.create :title => "Record #{id}" }
46
+
47
+ @collection = Model.page(1).per(15).pad(4)
48
+ assert_equal @collection.total_pages, 1
49
+
50
+ @collection = Model.page(2).per(15).pad(4)
51
+ assert_equal @collection.total_pages, 1
52
+
53
+ @collection = Model.page(3).per(15).pad(4)
54
+ assert_equal @collection.total_pages, 1
55
+ end
56
+
57
+ test "positive padding should have 2 pages" do
58
+ 16.times.each { |id| Model.create :title => "Record #{id}" }
59
+
60
+ @collection = Model.page(1).per(15).pad(4)
61
+ assert_equal @collection.total_pages, 2
62
+
63
+ @collection = Model.page(2).per(15).pad(4)
64
+ assert_equal @collection.total_pages, 2
65
+
66
+ @collection = Model.page(3).per(15).pad(4)
67
+ assert_equal @collection.total_pages, 2
68
+ end
69
+
70
+ test "positive padding should have 3 pages" do
71
+ 31.times.each { |id| Model.create :title => "Record #{id}" }
72
+
73
+ @collection = Model.page(1).per(15).pad(4)
74
+ assert_equal @collection.total_pages, 3
75
+
76
+ @collection = Model.page(2).per(15).pad(4)
77
+ assert_equal @collection.total_pages, 3
78
+
79
+ @collection = Model.page(3).per(15).pad(4)
80
+ assert_equal @collection.total_pages, 3
81
+ end
82
+
83
+ end