folio-pagination 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +21 -22
- data/lib/folio/ordinal/page.rb +10 -21
- data/lib/folio/ordinal.rb +9 -6
- data/lib/folio/page.rb +5 -16
- data/lib/folio/version.rb +1 -1
- data/lib/folio/will_paginate/active_record.rb +0 -2
- data/test/folio/ordinal/page_test.rb +10 -14
- data/test/folio/ordinal_test.rb +1 -6
- data/test/folio/page_test.rb +8 -12
- metadata +2 -2
data/README.md
CHANGED
@@ -152,13 +152,14 @@ methods as `Folio::Page` but with the following overrides:
|
|
152
152
|
Similarly, mixing `Folio::Ordinal` into a source provides the same
|
153
153
|
methods as `Folio`, but simplifies your `build_page` and `fill_page`
|
154
154
|
methods by moving some responsibility into the `paginate` method.
|
155
|
+
`build_page` also has a default implementation.
|
155
156
|
|
156
157
|
* `build_page` no longer needs to configure `ordinal_page?`, `first_page`,
|
157
158
|
or `last_page` on the instantiated page. Instead, just instantiate
|
158
|
-
and return a `Folio::Page` or `Folio::Ordinal::Page`.
|
159
|
-
|
160
|
-
|
161
|
-
|
159
|
+
and return a `Folio::Page` or `Folio::Ordinal::Page`. Then
|
160
|
+
`ordinal_page?`, `first_page`, and `last_page` are handled for you,
|
161
|
+
as described above. If not provided, the default implementation just
|
162
|
+
returns a subclass of `Array` setup to be a `Folio::Ordinal::Page`.
|
162
163
|
|
163
164
|
* `fill_page` no longer needs to configure `next_page` and
|
164
165
|
`previous_page`; the ordinal page will handle them. (Note that if
|
@@ -166,31 +167,28 @@ methods by moving some responsibility into the `paginate` method.
|
|
166
167
|
`paginate` will now perform ordinal bounds checking for you, so you
|
167
168
|
can focus entirely on populating the page.
|
168
169
|
|
169
|
-
###
|
170
|
+
### `BasicPage`s and `create`
|
170
171
|
|
171
|
-
Often times you just want to take
|
172
|
-
|
173
|
-
|
172
|
+
Often times you just want to take the simplest collection possible. One
|
173
|
+
way would be to subclass `Array` and mixin `Folio::Page`, then
|
174
|
+
instantiate the subclass. When you want to add more, or `Array` isn't the
|
175
|
+
proper superclass, you can still do this.
|
174
176
|
|
175
|
-
|
176
|
-
|
177
|
-
`Folio::Page
|
178
|
-
could just be:
|
177
|
+
For the common case we've already done it. This is the
|
178
|
+
`Folio::BasicPage` class. We've also provided a shortcut for
|
179
|
+
instantiating one: `Folio::Page.create`. So, for example, a simple
|
180
|
+
`build_page` method could just be:
|
179
181
|
|
180
182
|
```
|
181
183
|
def build_page
|
182
|
-
Folio::Page.
|
184
|
+
page = Folio::Page.create
|
185
|
+
# setup ordinal_pages?, first_page, etc.
|
186
|
+
page
|
183
187
|
end
|
184
188
|
```
|
185
189
|
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
`Folio::Page::Ordinal.decorate(collection)` and
|
190
|
-
`Folio::Page::Ordinal.create` are also available, respectively, for the
|
191
|
-
ordinal case. `decorate` will assume the passed in collection lacks any
|
192
|
-
pagination and will include `Folio::Page` along with
|
193
|
-
`Folio::Page::Ordinal`.
|
190
|
+
`Folio::Ordinal::BasicPage` and `Folio::Ordinal::Page.create` are also
|
191
|
+
available, respectively, for the ordinal case.
|
194
192
|
|
195
193
|
### Enumerable Extension
|
196
194
|
|
@@ -201,7 +199,8 @@ methods.
|
|
201
199
|
`build_page` will simply return a basic ordinal page as from
|
202
200
|
`Folio::Page::Ordinal.create`. `fill_page` then selects an appropriate
|
203
201
|
range of items from the folio using standard `Enumerable` methods, then
|
204
|
-
calls `replace` on the page (it's a
|
202
|
+
calls `replace` on the page (it's a `Folio::Ordinal::BasicPage`) with
|
203
|
+
this subset.
|
205
204
|
|
206
205
|
This lets you do things like:
|
207
206
|
|
data/lib/folio/ordinal/page.rb
CHANGED
@@ -76,31 +76,20 @@ module Folio
|
|
76
76
|
(current_page - 1) * per_page
|
77
77
|
end
|
78
78
|
|
79
|
-
|
80
|
-
|
79
|
+
def self.create
|
80
|
+
Folio::Ordinal::BasicPage.new
|
81
81
|
end
|
82
|
+
end
|
82
83
|
|
83
|
-
|
84
|
-
|
85
|
-
super []
|
86
|
-
end
|
84
|
+
class BasicPage < Folio::BasicPage
|
85
|
+
include Folio::Ordinal::Page
|
87
86
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
end
|
93
|
-
result
|
87
|
+
def replace(array)
|
88
|
+
result = super
|
89
|
+
if total_entries.nil? and length < per_page and (current_page == 1 or length > 0)
|
90
|
+
self.total_entries = offset + length
|
94
91
|
end
|
95
|
-
|
96
|
-
|
97
|
-
def self.decorate(collection)
|
98
|
-
collection = Folio::Ordinal::Page::Decorator.new(collection) unless collection.is_a?(Folio::Ordinal::Page)
|
99
|
-
collection
|
100
|
-
end
|
101
|
-
|
102
|
-
def self.create
|
103
|
-
Folio::Ordinal::Page::DecoratedArray.new
|
92
|
+
result
|
104
93
|
end
|
105
94
|
end
|
106
95
|
end
|
data/lib/folio/ordinal.rb
CHANGED
@@ -4,12 +4,12 @@ require 'folio/invalid_page'
|
|
4
4
|
|
5
5
|
# Mix in to a source to provide the same methods as Folio, but with simpler
|
6
6
|
# build_page and fill_page methods required on the host (some responsibility is
|
7
|
-
# moved into the paginate method).
|
7
|
+
# moved into the paginate method). build_page also has a default implementation.
|
8
8
|
#
|
9
9
|
# * build_page no longer needs to configure ordinal_page?, first_page,
|
10
10
|
# or last_page on the instantiated page. Instead, just instantiate
|
11
|
-
# and return a Folio::Ordinal::Page. If
|
12
|
-
# Folio::Ordinal::
|
11
|
+
# and return a Folio::Ordinal::Page. If not provided, the default
|
12
|
+
# implementation just returns a Folio::Ordinal::BasicPage.
|
13
13
|
#
|
14
14
|
# * fill_page no longer needs to configure next_page and previous_page; the
|
15
15
|
# ordinal page will handle them. (Note that if necessary, you can still set
|
@@ -18,10 +18,13 @@ require 'folio/invalid_page'
|
|
18
18
|
#
|
19
19
|
module Folio
|
20
20
|
module Ordinal
|
21
|
-
|
22
|
-
|
21
|
+
def build_page
|
22
|
+
Folio::Ordinal::Page.create
|
23
|
+
end
|
24
|
+
|
25
|
+
# validate the configured page before returning it
|
23
26
|
def configure_pagination(page, options)
|
24
|
-
page = super(
|
27
|
+
page = super(page, options)
|
25
28
|
raise ::Folio::InvalidPage unless page.current_page.is_a?(Integer)
|
26
29
|
raise ::Folio::InvalidPage if page.out_of_bounds?
|
27
30
|
page
|
data/lib/folio/page.rb
CHANGED
@@ -64,23 +64,12 @@ module Folio
|
|
64
64
|
(total_entries / per_page.to_f).ceil
|
65
65
|
end
|
66
66
|
|
67
|
-
class Decorator < ::SimpleDelegator
|
68
|
-
include Folio::Page
|
69
|
-
end
|
70
|
-
|
71
|
-
class DecoratedArray < Decorator
|
72
|
-
def initialize
|
73
|
-
super []
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
def self.decorate(collection)
|
78
|
-
collection = Folio::Page::Decorator.new(collection) unless collection.is_a?(Folio::Page)
|
79
|
-
collection
|
80
|
-
end
|
81
|
-
|
82
67
|
def self.create
|
83
|
-
Folio::
|
68
|
+
Folio::BasicPage.new
|
84
69
|
end
|
85
70
|
end
|
71
|
+
|
72
|
+
class BasicPage < Array
|
73
|
+
include Folio::Page
|
74
|
+
end
|
86
75
|
end
|
data/lib/folio/version.rb
CHANGED
@@ -139,21 +139,21 @@ describe Folio::Ordinal::Page do
|
|
139
139
|
end
|
140
140
|
end
|
141
141
|
|
142
|
-
describe "
|
142
|
+
describe "BasicPage" do
|
143
143
|
before do
|
144
|
-
@page = Folio::Ordinal::
|
144
|
+
@page = Folio::Ordinal::BasicPage.new
|
145
145
|
end
|
146
146
|
|
147
|
-
it "should
|
148
|
-
|
147
|
+
it "should be an Array" do
|
148
|
+
(Array === @page).must_equal true
|
149
149
|
end
|
150
150
|
|
151
|
-
it "should
|
152
|
-
@page
|
151
|
+
it "should be a folio page" do
|
152
|
+
assert_respond_to @page, :current_page
|
153
153
|
end
|
154
154
|
|
155
|
-
it "should
|
156
|
-
|
155
|
+
it "should be a ordinal folio page" do
|
156
|
+
@page.first_page.must_equal 1
|
157
157
|
end
|
158
158
|
end
|
159
159
|
|
@@ -162,12 +162,8 @@ describe Folio::Ordinal::Page do
|
|
162
162
|
@page = Folio::Ordinal::Page.create
|
163
163
|
end
|
164
164
|
|
165
|
-
it "should be
|
166
|
-
@page.
|
167
|
-
end
|
168
|
-
|
169
|
-
it "should be decorated as an ordinal page" do
|
170
|
-
@page.first_page.must_equal 1
|
165
|
+
it "should be a basic ordinal page" do
|
166
|
+
@page.class.must_equal Folio::Ordinal::BasicPage
|
171
167
|
end
|
172
168
|
end
|
173
169
|
end
|
data/test/folio/ordinal_test.rb
CHANGED
@@ -5,7 +5,7 @@ describe Folio::Ordinal do
|
|
5
5
|
before do
|
6
6
|
klass = Class.new do
|
7
7
|
def build_page
|
8
|
-
Folio::Page.create
|
8
|
+
Folio::Ordinal::Page.create
|
9
9
|
end
|
10
10
|
|
11
11
|
def fill_page(page)
|
@@ -18,11 +18,6 @@ describe Folio::Ordinal do
|
|
18
18
|
end
|
19
19
|
|
20
20
|
describe "paginate" do
|
21
|
-
it "should decorate the result of build_page" do
|
22
|
-
@page = @folio.paginate
|
23
|
-
@page.is_a?(Folio::Ordinal::Page).must_equal true
|
24
|
-
end
|
25
|
-
|
26
21
|
describe "bounds checking" do
|
27
22
|
before do
|
28
23
|
@folio.per_page = 10
|
data/test/folio/page_test.rb
CHANGED
@@ -168,17 +168,17 @@ describe Folio::Page do
|
|
168
168
|
end
|
169
169
|
end
|
170
170
|
|
171
|
-
describe "
|
171
|
+
describe "BasicPage" do
|
172
172
|
before do
|
173
|
-
@page = Folio::
|
173
|
+
@page = Folio::BasicPage.new
|
174
174
|
end
|
175
175
|
|
176
|
-
it "should
|
177
|
-
|
176
|
+
it "should be an Array" do
|
177
|
+
(Array === @page).must_equal true
|
178
178
|
end
|
179
179
|
|
180
|
-
it "should
|
181
|
-
assert_respond_to @page, :
|
180
|
+
it "should be a folio page" do
|
181
|
+
assert_respond_to @page, :current_page
|
182
182
|
end
|
183
183
|
end
|
184
184
|
|
@@ -187,12 +187,8 @@ describe Folio::Page do
|
|
187
187
|
@page = Folio::Page.create
|
188
188
|
end
|
189
189
|
|
190
|
-
it "should be
|
191
|
-
@page.
|
192
|
-
end
|
193
|
-
|
194
|
-
it "should be decorated as a page" do
|
195
|
-
assert_respond_to @page, :current_page
|
190
|
+
it "should be a basic page" do
|
191
|
+
@page.class.must_equal Folio::BasicPage
|
196
192
|
end
|
197
193
|
end
|
198
194
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: folio-pagination
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-12-
|
12
|
+
date: 2013-12-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|