folio-pagination-legacy 0.0.2
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.
- data/.gitignore +17 -0
- data/.travis.yml +3 -0
- data/Gemfile +16 -0
- data/Guardfile +5 -0
- data/LICENSE.txt +22 -0
- data/README.md +235 -0
- data/Rakefile +11 -0
- data/folio-pagination-legacy.gemspec +30 -0
- data/lib/folio-pagination-legacy.rb +3 -0
- data/lib/folio.rb +84 -0
- data/lib/folio/core_ext/enumerable.rb +51 -0
- data/lib/folio/invalid_page.rb +5 -0
- data/lib/folio/ordinal.rb +33 -0
- data/lib/folio/ordinal/page.rb +107 -0
- data/lib/folio/page.rb +86 -0
- data/lib/folio/per_page.rb +15 -0
- data/lib/folio/rails.rb +21 -0
- data/lib/folio/version.rb +3 -0
- data/lib/folio/will_paginate/active_record.rb +71 -0
- data/lib/folio/will_paginate/array.rb +10 -0
- data/lib/folio/will_paginate/collection.rb +19 -0
- data/lib/folio/will_paginate/view_helpers.rb +59 -0
- data/lib/folio/will_paginate/view_helpers/action_view.rb +10 -0
- data/lib/folio/will_paginate/view_helpers/link_renderer.rb +53 -0
- data/test/folio/core_ext/enumerable_test.rb +55 -0
- data/test/folio/ordinal/page_test.rb +173 -0
- data/test/folio/ordinal_test.rb +57 -0
- data/test/folio/page_test.rb +198 -0
- data/test/folio/per_page_test.rb +49 -0
- data/test/folio/rails_test.rb +11 -0
- data/test/folio/version_test.rb +8 -0
- data/test/folio/will_paginate/active_record_test.rb +113 -0
- data/test/folio/will_paginate/collection_test.rb +43 -0
- data/test/folio/will_paginate/view_helpers/link_renderer_test.rb +160 -0
- data/test/folio/will_paginate/view_helpers_test.rb +49 -0
- data/test/folio_test.rb +192 -0
- data/test/setup/active_record.rb +13 -0
- metadata +133 -0
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'folio/per_page'
|
3
|
+
require 'folio'
|
4
|
+
|
5
|
+
describe Folio::PerPage do
|
6
|
+
before do
|
7
|
+
@klass = Class.new{ include Folio::PerPage }
|
8
|
+
@object = @klass.new
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "default_per_page" do
|
12
|
+
it "should be Folio.per_page" do
|
13
|
+
was = Folio.per_page
|
14
|
+
Folio.per_page = 100
|
15
|
+
@object.default_per_page.must_equal 100
|
16
|
+
Folio.per_page = was
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "per_page" do
|
21
|
+
it "should return default_per_page if nil" do
|
22
|
+
@klass.send(:define_method, :default_per_page) { 100 }
|
23
|
+
@object.per_page = nil
|
24
|
+
@object.per_page.must_equal 100
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should return set value if non-nil" do
|
28
|
+
@object.per_page = 100
|
29
|
+
@object.per_page.must_equal 100
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should allow setting through argument" do
|
33
|
+
@object.per_page(100)
|
34
|
+
@object.per_page.must_equal 100
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should cast to integer when setting non-nil through argument" do
|
38
|
+
@object.per_page("100")
|
39
|
+
@object.per_page.must_equal 100
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should allow setting to nil through argument" do
|
43
|
+
@klass.send(:define_method, :default_per_page) { 100 }
|
44
|
+
@object.per_page(30)
|
45
|
+
@object.per_page(nil)
|
46
|
+
@object.per_page.must_equal 100
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'folio/rails'
|
2
|
+
require 'folio/invalid_page'
|
3
|
+
require 'action_controller/base'
|
4
|
+
|
5
|
+
describe ActionController::Base do
|
6
|
+
it "should translate Folio::InvalidPage to a 404" do
|
7
|
+
controller = ActionController::Base.new
|
8
|
+
code = controller.send :response_code_for_rescue, Folio::InvalidPage.new
|
9
|
+
code.must_equal :not_found
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,113 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'folio/will_paginate/active_record'
|
3
|
+
require_relative '../../setup/active_record'
|
4
|
+
|
5
|
+
describe ActiveRecord do
|
6
|
+
TestSetup::ActiveRecord.migrate do |m|
|
7
|
+
m.create_table(:items) do |t|
|
8
|
+
t.boolean :filter
|
9
|
+
end
|
10
|
+
|
11
|
+
m.create_table(:related_things) do |t|
|
12
|
+
t.integer :item_id
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class Item < ::ActiveRecord::Base
|
17
|
+
has_many :related_things
|
18
|
+
end
|
19
|
+
|
20
|
+
class RelatedThing < ::ActiveRecord::Base; end
|
21
|
+
|
22
|
+
before do
|
23
|
+
RelatedThing.delete_all
|
24
|
+
Item.delete_all
|
25
|
+
24.times{ |i| Item.create(filter: (i % 2).zero?) }
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "per_page" do
|
29
|
+
it "should default to Folio.per_page" do
|
30
|
+
was = Folio.per_page
|
31
|
+
Folio.per_page = 10
|
32
|
+
ActiveRecord::Base.per_page.must_equal 10
|
33
|
+
Folio.per_page = was
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe "paginate" do
|
38
|
+
it "should return an ordinal folio page" do
|
39
|
+
page = Item.paginate
|
40
|
+
page.is_a?(Folio::Ordinal::Page).must_equal true
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should set per_page from parameter" do
|
44
|
+
page = Item.paginate(per_page: 10)
|
45
|
+
page.per_page.must_equal 10
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should default per_page to model's per_page" do
|
49
|
+
was = Item.per_page
|
50
|
+
Item.per_page = 10
|
51
|
+
page = Item.paginate
|
52
|
+
page.per_page.must_equal 10
|
53
|
+
Item.per_page = was
|
54
|
+
end
|
55
|
+
|
56
|
+
it "should set offset from page and per_page" do
|
57
|
+
page = Item.paginate(page: 3, per_page: 10)
|
58
|
+
page.offset.must_equal 20
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should set current_page" do
|
62
|
+
page = Item.paginate(page: 3, per_page: 10)
|
63
|
+
page.current_page.must_equal 3
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should have the right size on the page" do
|
67
|
+
page = Item.paginate(page: 3, per_page: 10)
|
68
|
+
page.size.must_equal 4
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should return the expected items" do
|
72
|
+
page = Item.paginate(page: 3, per_page: 10)
|
73
|
+
page.to_a.must_equal Item.find(:all, offset: 20, limit: 10)
|
74
|
+
end
|
75
|
+
|
76
|
+
it "should auto-count total_entries unless specified as nil" do
|
77
|
+
page = Item.paginate
|
78
|
+
page.total_entries.must_equal 24
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should not auto-count total_entries when specified as nil and not last page" do
|
82
|
+
page = Item.paginate(per_page: 10, total_entries: nil)
|
83
|
+
page.total_entries.must_be_nil
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should calculate total_entries when specified as nil but last page" do
|
87
|
+
page = Item.paginate(page: 3, per_page: 10, total_entries: nil)
|
88
|
+
page.total_entries.must_equal 24
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should still work with total_entries nil" do
|
92
|
+
page = Item.paginate(page: 3, total_entries: nil)
|
93
|
+
page.current_page.must_equal 3
|
94
|
+
end
|
95
|
+
|
96
|
+
it "should validate page number against auto-counted total_entries" do
|
97
|
+
lambda{ Item.paginate(page: 4, per_page: 10) }.must_raise Folio::InvalidPage
|
98
|
+
end
|
99
|
+
|
100
|
+
it "should work on associations" do
|
101
|
+
item = Item.first
|
102
|
+
12.times{ |i| item.related_things.create! }
|
103
|
+
page = item.related_things.paginate(page: 2, per_page: 10)
|
104
|
+
page.count.must_equal 2
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should work when autocounting with string page/per_page" do
|
108
|
+
page = Item.paginate(page: "3", per_page: "10")
|
109
|
+
page.size.must_equal 4
|
110
|
+
page.total_entries.must_equal 24
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'folio/will_paginate/collection'
|
3
|
+
|
4
|
+
describe WillPaginate::Collection do
|
5
|
+
describe "create" do
|
6
|
+
it "should create an ordinal page" do
|
7
|
+
page = WillPaginate::Collection.create(1)
|
8
|
+
page.is_a?(Folio::Ordinal::Page).must_equal true
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should set current_page on the created page" do
|
12
|
+
page = WillPaginate::Collection.create(4)
|
13
|
+
page.current_page.must_equal 4
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should set per_page on the created page if given" do
|
17
|
+
page = WillPaginate::Collection.create(4, 10)
|
18
|
+
page.per_page.must_equal 10
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should set total_entries on the created page if given" do
|
22
|
+
page = WillPaginate::Collection.create(4, 10, 50)
|
23
|
+
page.total_entries.must_equal 50
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should yield the page to block if given" do
|
27
|
+
page = WillPaginate::Collection.create(1) { |p| p.replace [1, 2, 3] }
|
28
|
+
page.must_equal [1, 2, 3]
|
29
|
+
end
|
30
|
+
|
31
|
+
it "created page should have offset method like WillPaginate::Collection" do
|
32
|
+
page = WillPaginate::Collection.create(4, 10)
|
33
|
+
page.offset.must_equal 30
|
34
|
+
end
|
35
|
+
|
36
|
+
it "created should set total_entries on replace like WillPaginate::Collection" do
|
37
|
+
page = WillPaginate::Collection.create(4, 10)
|
38
|
+
page.total_entries.must_be_nil
|
39
|
+
page.replace [1, 2, 3]
|
40
|
+
page.total_entries.must_equal 33
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,160 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'folio/will_paginate/view_helpers/link_renderer'
|
3
|
+
require 'folio/page'
|
4
|
+
|
5
|
+
describe WillPaginate::LinkRenderer do
|
6
|
+
before do
|
7
|
+
@template = Class.new do
|
8
|
+
def link_to(*args)
|
9
|
+
"link_to(#{args.map(&:inspect).join(', ')})"
|
10
|
+
end
|
11
|
+
|
12
|
+
def content_tag(*args)
|
13
|
+
"content_tag(#{args.map(&:inspect).join(', ')})"
|
14
|
+
end
|
15
|
+
|
16
|
+
def will_paginate_translate(*args)
|
17
|
+
yield
|
18
|
+
end
|
19
|
+
end.new
|
20
|
+
|
21
|
+
@renderer = Class.new(WillPaginate::LinkRenderer) do
|
22
|
+
def url_for(page)
|
23
|
+
"url://#{page}"
|
24
|
+
end
|
25
|
+
end.new
|
26
|
+
|
27
|
+
# looks just like a standard WillPaginate collection would
|
28
|
+
@collection = Folio::Page.create
|
29
|
+
@collection.ordinal_pages = true
|
30
|
+
@collection.first_page = 1
|
31
|
+
@collection.total_entries = 200
|
32
|
+
@collection.per_page = 10
|
33
|
+
@collection.last_page = 20
|
34
|
+
@collection.current_page = 10
|
35
|
+
@collection.next_page = 11
|
36
|
+
@collection.previous_page = 9
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should ignore page_links parameter with non-ordinal pages" do
|
40
|
+
@collection.ordinal_pages = false
|
41
|
+
@renderer.prepare(@collection, {page_links: true, previous_label: "Previous", next_label: "Next"}, @template)
|
42
|
+
@renderer.to_html.must_equal [
|
43
|
+
@template.link_to("Previous", "url://9", {:rel=>"prev", :class=>"prev_page"}),
|
44
|
+
@template.link_to("Next", "url://11", {:rel=>"next", :class=>"next_page"})
|
45
|
+
].join
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should still honor page_links parameter with ordinal pages" do
|
49
|
+
@renderer.prepare(@collection, {page_links: false, previous_label: "Previous", next_label: "Next"}, @template)
|
50
|
+
@renderer.to_html.must_equal [
|
51
|
+
@template.link_to("Previous", "url://9", {:rel=>"prev", :class=>"prev_page"}),
|
52
|
+
@template.link_to("Next", "url://11", {:rel=>"next", :class=>"next_page"})
|
53
|
+
].join
|
54
|
+
|
55
|
+
@renderer.prepare(@collection, {page_links: true, previous_label: "Previous", next_label: "Next"}, @template)
|
56
|
+
@renderer.to_html.must_equal [
|
57
|
+
@template.link_to("Previous", "url://9", {:rel=>"prev", :class=>"prev_page"}),
|
58
|
+
@template.link_to("1", "url://1", {:rel=>"start", :class=>nil}),
|
59
|
+
@renderer.gap_marker,
|
60
|
+
@template.content_tag(:span, "10", {:class=>"current"}),
|
61
|
+
@renderer.gap_marker,
|
62
|
+
@template.link_to("20", "url://20", {:rel=>nil, :class=>nil}),
|
63
|
+
@template.link_to("Next", "url://11", {:rel=>"next", :class=>"next_page"})
|
64
|
+
].join
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should treat last_page as total_pages when known" do
|
68
|
+
@collection.last_page = 15
|
69
|
+
@renderer.prepare(@collection, {}, @template)
|
70
|
+
@renderer.total_pages.must_equal @collection.last_page
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should treat next_page as total_pages when last_page unknown" do
|
74
|
+
@collection.last_page = nil
|
75
|
+
@renderer.prepare(@collection, {}, @template)
|
76
|
+
@renderer.total_pages.must_equal @collection.next_page
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should add :gap after page links when last_page unknown" do
|
80
|
+
@collection.last_page = nil
|
81
|
+
@renderer.prepare(@collection, {page_links: true, previous_label: "Previous", next_label: "Next", inner_window: 1}, @template)
|
82
|
+
@renderer.to_html.must_equal [
|
83
|
+
@template.link_to("Previous", "url://9", {:rel=>"prev", :class=>"prev_page"}),
|
84
|
+
@template.link_to("1", "url://1", {:rel=>"start", :class=>nil}),
|
85
|
+
@renderer.gap_marker,
|
86
|
+
@template.link_to("9", "url://9", {:rel=>"prev", :class=>nil}),
|
87
|
+
@template.content_tag(:span, "10", {:class=>"current"}),
|
88
|
+
@template.link_to("11", "url://11", {:rel=>"next", :class=>nil}),
|
89
|
+
@renderer.gap_marker,
|
90
|
+
@template.link_to("Next", "url://11", {:rel=>"next", :class=>"next_page"})
|
91
|
+
].join
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should end inner window at next_page when last_page unknown" do
|
95
|
+
@collection.last_page = nil
|
96
|
+
@renderer.prepare(@collection, {page_links: true, previous_label: "Previous", next_label: "Next", inner_window: 2}, @template)
|
97
|
+
@renderer.to_html.must_equal [
|
98
|
+
@template.link_to("Previous", "url://9", {:rel=>"prev", :class=>"prev_page"}),
|
99
|
+
@template.link_to("1", "url://1", {:rel=>"start", :class=>nil}),
|
100
|
+
@renderer.gap_marker,
|
101
|
+
@template.link_to("7", "url://7", {:rel=>nil, :class=>nil}),
|
102
|
+
@template.link_to("8", "url://8", {:rel=>nil, :class=>nil}),
|
103
|
+
@template.link_to("9", "url://9", {:rel=>"prev", :class=>nil}),
|
104
|
+
@template.content_tag(:span, "10", {:class=>"current"}),
|
105
|
+
@template.link_to("11", "url://11", {:rel=>"next", :class=>nil}),
|
106
|
+
@renderer.gap_marker,
|
107
|
+
@template.link_to("Next", "url://11", {:rel=>"next", :class=>"next_page"})
|
108
|
+
].join
|
109
|
+
end
|
110
|
+
|
111
|
+
describe "previous_page" do
|
112
|
+
it "should respect collection.previous_page" do
|
113
|
+
@collection.previous_page = 5
|
114
|
+
@renderer.prepare(@collection, {page_links: false, previous_label: "Previous", next_label: "Next"}, @template)
|
115
|
+
@renderer.to_html.must_equal [
|
116
|
+
@template.link_to("Previous", "url://5", {:rel=>"prev", :class=>"prev_page"}),
|
117
|
+
@template.link_to("Next", "url://11", {:rel=>"next", :class=>"next_page"})
|
118
|
+
].join
|
119
|
+
end
|
120
|
+
|
121
|
+
it "should produce link with rel=prev for non-numeric" do
|
122
|
+
@collection.previous_page = "abcdef"
|
123
|
+
@renderer.prepare(@collection, {page_links: false, previous_label: "Previous", next_label: "Next"}, @template)
|
124
|
+
@renderer.to_html.must_equal [
|
125
|
+
@template.link_to("Previous", "url://abcdef", {:rel=>"prev", :class=>"prev_page"}),
|
126
|
+
@template.link_to("Next", "url://11", {:rel=>"next", :class=>"next_page"})
|
127
|
+
].join
|
128
|
+
end
|
129
|
+
|
130
|
+
it "should have rel=start in the html for non-numeric value matching first_page" do
|
131
|
+
@collection.first_page = "abcdef"
|
132
|
+
@collection.previous_page = "abcdef"
|
133
|
+
@renderer.prepare(@collection, {page_links: false, previous_label: "Previous", next_label: "Next"}, @template)
|
134
|
+
@renderer.to_html.must_equal [
|
135
|
+
@template.link_to("Previous", "url://abcdef", {:rel=>"prev start", :class=>"prev_page"}),
|
136
|
+
@template.link_to("Next", "url://11", {:rel=>"next", :class=>"next_page"})
|
137
|
+
].join
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
describe "next_page" do
|
142
|
+
it "should respect collection.next_page" do
|
143
|
+
@collection.next_page = 15
|
144
|
+
@renderer.prepare(@collection, {page_links: false, previous_label: "Previous", next_label: "Next"}, @template)
|
145
|
+
@renderer.to_html.must_equal [
|
146
|
+
@template.link_to("Previous", "url://9", {:rel=>"prev", :class=>"prev_page"}),
|
147
|
+
@template.link_to("Next", "url://15", {:rel=>"next", :class=>"next_page"})
|
148
|
+
].join
|
149
|
+
end
|
150
|
+
|
151
|
+
it "should produce link with rel=next for non-numeric value" do
|
152
|
+
@collection.next_page = "abcdef"
|
153
|
+
@renderer.prepare(@collection, {page_links: false, previous_label: "Previous", next_label: "Next"}, @template)
|
154
|
+
@renderer.to_html.must_equal [
|
155
|
+
@template.link_to("Previous", "url://9", {:rel=>"prev", :class=>"prev_page"}),
|
156
|
+
@template.link_to("Next", "url://abcdef", {:rel=>"next", :class=>"next_page"})
|
157
|
+
].join
|
158
|
+
end
|
159
|
+
end
|
160
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'folio/will_paginate/view_helpers'
|
3
|
+
|
4
|
+
# for I18n in page_entries_info
|
5
|
+
require 'active_support/core_ext/string/inflections'
|
6
|
+
|
7
|
+
describe WillPaginate::ViewHelpers do
|
8
|
+
include WillPaginate::ViewHelpers
|
9
|
+
|
10
|
+
before do
|
11
|
+
@collection = Folio::Ordinal::Page.create
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "will_paginate" do
|
15
|
+
before do
|
16
|
+
@renderer = Minitest::Mock.new
|
17
|
+
@renderer.expect(:prepare, nil, [@collection, Hash, self])
|
18
|
+
@renderer.expect(:to_html, '<PAGES>')
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should return nil if total_pages is 1" do
|
22
|
+
@collection.total_entries = @collection.per_page
|
23
|
+
will_paginate(@collection, :renderer => @renderer).must_be_nil
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should not error if total_entries is unknown" do
|
27
|
+
@collection.total_entries = nil
|
28
|
+
will_paginate(@collection, :renderer => @renderer).must_equal '<PAGES>'
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "page_entries_info" do
|
33
|
+
it "should return nominally if collection is ordinal with total_entries known" do
|
34
|
+
@collection.total_entries = 20
|
35
|
+
page_entries_info(@collection).wont_be_nil
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should return nil if total_entries is unknown" do
|
39
|
+
@collection.total_entries = nil
|
40
|
+
page_entries_info(@collection).must_be_nil
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should return nil if collection is non-ordinal" do
|
44
|
+
@collection = Folio::Page.create
|
45
|
+
@collection.total_entries = 20
|
46
|
+
page_entries_info(@collection).must_be_nil
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/test/folio_test.rb
ADDED
@@ -0,0 +1,192 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'folio'
|
3
|
+
|
4
|
+
describe Folio do
|
5
|
+
describe "class per_page" do
|
6
|
+
it "should have a per_page attribute" do
|
7
|
+
Folio.must_respond_to :per_page
|
8
|
+
Folio.must_respond_to :per_page=
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should allow setting by per_page=" do
|
12
|
+
was = Folio.per_page
|
13
|
+
Folio.per_page = 100
|
14
|
+
Folio.per_page.must_equal 100
|
15
|
+
Folio.per_page = was
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should allow setting by argument to per_page" do
|
19
|
+
was = Folio.per_page
|
20
|
+
Folio.per_page(100)
|
21
|
+
Folio.per_page.must_equal 100
|
22
|
+
Folio.per_page = was
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should default to 30" do
|
26
|
+
Folio.per_page.must_equal 30
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
before do
|
31
|
+
page_klass = Class.new do
|
32
|
+
include Folio::Page
|
33
|
+
end
|
34
|
+
|
35
|
+
@klass = Class.new do
|
36
|
+
define_method :build_page do
|
37
|
+
page = page_klass.new
|
38
|
+
page.ordinal_pages = false
|
39
|
+
page.first_page = :first
|
40
|
+
page.last_page = :last
|
41
|
+
page
|
42
|
+
end
|
43
|
+
|
44
|
+
def fill_page(page)
|
45
|
+
page.next_page = :next
|
46
|
+
page.previous_page = :previous
|
47
|
+
page
|
48
|
+
end
|
49
|
+
|
50
|
+
include Folio
|
51
|
+
end
|
52
|
+
|
53
|
+
@folio = @klass.new
|
54
|
+
end
|
55
|
+
|
56
|
+
describe "paginate" do
|
57
|
+
it "should get the page from the folio's build_page method" do
|
58
|
+
page = @folio.paginate
|
59
|
+
page.ordinal_pages.must_equal false
|
60
|
+
page.first_page.must_equal :first
|
61
|
+
page.last_page.must_equal :last
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should pass the page through the folio's fill_page method" do
|
65
|
+
page = @folio.paginate
|
66
|
+
page.next_page.must_equal :next
|
67
|
+
page.previous_page.must_equal :previous
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should populate current_page and per_page before passing it to fill_page" do
|
71
|
+
@klass.send(:define_method, :fill_page) do |page|
|
72
|
+
page.current_page.wont_be_nil
|
73
|
+
page.per_page.wont_be_nil
|
74
|
+
end
|
75
|
+
@folio.paginate
|
76
|
+
end
|
77
|
+
|
78
|
+
describe "page parameter" do
|
79
|
+
it "should populate onto the page" do
|
80
|
+
page = @folio.paginate(page: :current)
|
81
|
+
page.current_page.must_equal :current
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should default to the page's first_page" do
|
85
|
+
page = @folio.paginate
|
86
|
+
page.current_page.must_equal page.first_page
|
87
|
+
end
|
88
|
+
|
89
|
+
it "should set to the page's first_page if explicitly nil" do
|
90
|
+
page = @folio.paginate(page: nil)
|
91
|
+
page.current_page.must_equal page.first_page
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should not set to the page's first_page if explicitly false" do
|
95
|
+
page = @folio.paginate(page: false)
|
96
|
+
page.current_page.must_equal false
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe "per_page parameter" do
|
101
|
+
it "should populate onto the page" do
|
102
|
+
page = @folio.paginate(per_page: 100)
|
103
|
+
page.per_page.must_equal 100
|
104
|
+
end
|
105
|
+
|
106
|
+
it "should default to the folio's per_page" do
|
107
|
+
@folio.per_page = 100
|
108
|
+
page = @folio.paginate
|
109
|
+
page.per_page.must_equal 100
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
describe "total_entries parameter" do
|
114
|
+
it "should populate onto the page" do
|
115
|
+
page = @folio.paginate(total_entries: 100)
|
116
|
+
page.total_entries.must_equal 100
|
117
|
+
end
|
118
|
+
|
119
|
+
it "should default to the nil if the folio does not implement count" do
|
120
|
+
page = @folio.paginate
|
121
|
+
page.total_entries.must_be_nil
|
122
|
+
end
|
123
|
+
|
124
|
+
it "should default to the result of count if the folio implements count" do
|
125
|
+
@klass.send(:define_method, :count) { 100 }
|
126
|
+
page = @folio.paginate
|
127
|
+
page.total_entries.must_equal 100
|
128
|
+
end
|
129
|
+
|
130
|
+
it "should not-execute the count if total_entries provided" do
|
131
|
+
called = false
|
132
|
+
@klass.send(:define_method, :count) { called = true }
|
133
|
+
@folio.paginate(total_entries: 100)
|
134
|
+
called.must_equal false
|
135
|
+
end
|
136
|
+
|
137
|
+
it "should not-execute the count if total_entries provided as nil" do
|
138
|
+
called = false
|
139
|
+
@klass.send(:define_method, :count) { called = true }
|
140
|
+
page = @folio.paginate(total_entries: nil)
|
141
|
+
called.must_equal false
|
142
|
+
page.total_entries.must_be_nil
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
describe "per_page class attribute" do
|
148
|
+
it "should exist" do
|
149
|
+
@klass.must_respond_to :per_page
|
150
|
+
@klass.must_respond_to :per_page=
|
151
|
+
end
|
152
|
+
|
153
|
+
it "should be settable from per_page=" do
|
154
|
+
@klass.per_page = 100
|
155
|
+
@klass.per_page.must_equal 100
|
156
|
+
end
|
157
|
+
|
158
|
+
it "should be settable from per_page with argument" do
|
159
|
+
@klass.per_page(100)
|
160
|
+
@klass.per_page.must_equal 100
|
161
|
+
end
|
162
|
+
|
163
|
+
it "should default to Folio.per_page" do
|
164
|
+
was = Folio.per_page
|
165
|
+
Folio.per_page = 50
|
166
|
+
@klass.per_page.must_equal 50
|
167
|
+
Folio.per_page = was
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
describe "per_page instance attribute" do
|
172
|
+
it "should exist" do
|
173
|
+
@folio.must_respond_to :per_page
|
174
|
+
@folio.must_respond_to :per_page=
|
175
|
+
end
|
176
|
+
|
177
|
+
it "should be settable from per_page=" do
|
178
|
+
@folio.per_page = 100
|
179
|
+
@folio.per_page.must_equal 100
|
180
|
+
end
|
181
|
+
|
182
|
+
it "should be settable from per_page with argument" do
|
183
|
+
@folio.per_page(100)
|
184
|
+
@folio.per_page.must_equal 100
|
185
|
+
end
|
186
|
+
|
187
|
+
it "should default to class' per_page" do
|
188
|
+
@klass.per_page = 50
|
189
|
+
@folio.per_page.must_equal 50
|
190
|
+
end
|
191
|
+
end
|
192
|
+
end
|