page_number 0.1.0
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.
- checksums.yaml +7 -0
- data/README.md +64 -0
- data/lib/page_number.rb +71 -0
- data/test/test_page_number.rb +98 -0
- metadata +79 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: cbab3c028875b91910a0ca596802913cc1a50a5d
|
4
|
+
data.tar.gz: 22b82f9fca433a2369accea679b851180e1d7b8c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 5fefd1bde3f7a784d8028be219c644a55c96d45cabbddbf388715244cdcb5ee3566ebc0e7dedaf9ecf6df01f49a423162e40a3fdda0ae6563c802905a8905850
|
7
|
+
data.tar.gz: cd86702614121abd2b7699ce882e259e703f41aad885891c8ba3cc7ac964724055cd08ab793c9c8b24470bb7b3f0ef239ffa51575ef0bdd4ed235dbadd7ea7d9
|
data/README.md
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
# PageNumber
|
2
|
+
|
3
|
+
[](https://travis-ci.org/sshaw/page_number)
|
4
|
+
|
5
|
+
Utility methods for pagination page and per page that make sure you'll
|
6
|
+
always have a valid number.
|
7
|
+
|
8
|
+
Use them your controllers (recommended) or model or anywhere where you process page
|
9
|
+
info.
|
10
|
+
|
11
|
+
## Usage
|
12
|
+
|
13
|
+
`PageNumber` provides two methods:
|
14
|
+
|
15
|
+
* `page(n)`/`__page__(n)`
|
16
|
+
* `per_page(n)`/`__per_page__(n)` (defaults to `10`)
|
17
|
+
|
18
|
+
To use, `include` or `extend` the `PageNumber` module:
|
19
|
+
|
20
|
+
```rb
|
21
|
+
require "page_number"
|
22
|
+
|
23
|
+
class BaseController
|
24
|
+
include PageNumber
|
25
|
+
end
|
26
|
+
|
27
|
+
class SubController < BaseController
|
28
|
+
def index
|
29
|
+
User.all(:page => page(params[:page]), :per_page => per_page(params[:per_page]))
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
```
|
34
|
+
|
35
|
+
To have better control over how `page` and `per_page` work you can
|
36
|
+
define one or more of the following methods:
|
37
|
+
|
38
|
+
```rb
|
39
|
+
class BaseController
|
40
|
+
include PageNumber
|
41
|
+
|
42
|
+
# These are all optional
|
43
|
+
protected
|
44
|
+
|
45
|
+
def page_sizes
|
46
|
+
[ 25, 50, 100 ]
|
47
|
+
end
|
48
|
+
|
49
|
+
def default_per_page
|
50
|
+
20
|
51
|
+
end
|
52
|
+
|
53
|
+
def max_page_number
|
54
|
+
# who knows!?
|
55
|
+
end
|
56
|
+
```
|
57
|
+
|
58
|
+
## Author
|
59
|
+
|
60
|
+
Skye Shaw [skye.shaw AT gmail.com]
|
61
|
+
|
62
|
+
## License
|
63
|
+
|
64
|
+
Released under the MIT License: http://www.opensource.org/licenses/MIT
|
data/lib/page_number.rb
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
# === Usage
|
2
|
+
#
|
3
|
+
# require "page_number"
|
4
|
+
#
|
5
|
+
# class BaseController
|
6
|
+
# include PageNumber
|
7
|
+
#
|
8
|
+
# protected
|
9
|
+
#
|
10
|
+
# def page_sizes
|
11
|
+
# [ 25, 50, 100 ]
|
12
|
+
# end
|
13
|
+
# end
|
14
|
+
#
|
15
|
+
# class SubController < BaseController
|
16
|
+
# def action
|
17
|
+
# User.all(:page => page(params[:page]), :per_page => per_page(params[:per_page]))
|
18
|
+
# end
|
19
|
+
# end
|
20
|
+
#
|
21
|
+
|
22
|
+
module PageNumber
|
23
|
+
VERSION = "0.1.0".freeze
|
24
|
+
|
25
|
+
def page(n)
|
26
|
+
n = __int(n)
|
27
|
+
return default_page if n < 1
|
28
|
+
|
29
|
+
max_page_number && n > max_page_number ? max_page_number : n
|
30
|
+
end
|
31
|
+
|
32
|
+
alias :__page__ :page
|
33
|
+
|
34
|
+
def per_page(n)
|
35
|
+
n = __int(n)
|
36
|
+
return default_per_page if n < 1
|
37
|
+
|
38
|
+
page_sizes && !page_sizes.include?(n) ? default_per_page : n
|
39
|
+
end
|
40
|
+
|
41
|
+
alias :__per_page__ :per_page
|
42
|
+
|
43
|
+
protected
|
44
|
+
|
45
|
+
def default_per_page
|
46
|
+
10
|
47
|
+
end
|
48
|
+
|
49
|
+
def default_page
|
50
|
+
1
|
51
|
+
end
|
52
|
+
|
53
|
+
def max_page_number
|
54
|
+
end
|
55
|
+
|
56
|
+
def page_sizes
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def __int(n)
|
62
|
+
case
|
63
|
+
when n.respond_to?(:to_i)
|
64
|
+
n.to_i
|
65
|
+
when n.respond_to?(:to_int)
|
66
|
+
n.to_int
|
67
|
+
else
|
68
|
+
-1
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
require "minitest/autorun"
|
2
|
+
require "page_number"
|
3
|
+
|
4
|
+
class TestPageNumber < MiniTest::Test
|
5
|
+
def setup
|
6
|
+
@p = Object.new
|
7
|
+
@p.extend PageNumber
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_page_invalid_arg_returns_default_page
|
11
|
+
[-1, 0, {}].each { |n| assert_equal 1, @p.page(n) }
|
12
|
+
|
13
|
+
def @p.default_page
|
14
|
+
100
|
15
|
+
end
|
16
|
+
|
17
|
+
assert_equal 100, @p.page(-1)
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_page_valid_arg_returns_arg
|
21
|
+
[1, 100, 500].each { |n| assert_equal n, @p.page(n) }
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_page_converts_arg_to_fixnum
|
25
|
+
assert_equal 2, @p.page("2")
|
26
|
+
|
27
|
+
o = Object.new
|
28
|
+
def o.to_i
|
29
|
+
2
|
30
|
+
end
|
31
|
+
|
32
|
+
assert_equal 2, @p.page(o)
|
33
|
+
|
34
|
+
o = Object.new
|
35
|
+
def o.to_int
|
36
|
+
2
|
37
|
+
end
|
38
|
+
|
39
|
+
assert_equal 2, @p.page(o)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_page_limits_arg_to_max_page_number
|
43
|
+
# No max by default
|
44
|
+
assert_equal 1_000, @p.page(1_000)
|
45
|
+
|
46
|
+
def @p.max_page_number
|
47
|
+
999
|
48
|
+
end
|
49
|
+
|
50
|
+
assert_equal 999, @p.page(1_000)
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_per_page_invalid_arg_returns_default
|
54
|
+
[-1, 0, {}].each { |n| assert_equal 10, @p.per_page(n) }
|
55
|
+
|
56
|
+
def @p.default_per_page
|
57
|
+
100
|
58
|
+
end
|
59
|
+
|
60
|
+
assert_equal 100, @p.per_page(-1)
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_per_page_valid_arg_returns_arg
|
64
|
+
assert_equal 2, @p.per_page(2)
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_per_page_converts_arg_to_fixnum
|
68
|
+
assert_equal 2, @p.per_page("2")
|
69
|
+
|
70
|
+
o = Object.new
|
71
|
+
def o.to_i
|
72
|
+
2
|
73
|
+
end
|
74
|
+
|
75
|
+
assert_equal 2, @p.per_page(o)
|
76
|
+
|
77
|
+
o = Object.new
|
78
|
+
def o.to_int
|
79
|
+
2
|
80
|
+
end
|
81
|
+
|
82
|
+
assert_equal 2, @p.per_page(o)
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_per_page_enforces_defined_page_sizes
|
86
|
+
def @p.page_sizes
|
87
|
+
[3, 8]
|
88
|
+
end
|
89
|
+
|
90
|
+
def @p.default_per_page
|
91
|
+
5
|
92
|
+
end
|
93
|
+
|
94
|
+
assert_equal 3, @p.per_page(3)
|
95
|
+
assert_equal 8, @p.per_page(8)
|
96
|
+
assert_equal 5, @p.per_page(100)
|
97
|
+
end
|
98
|
+
end
|
metadata
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: page_number
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Skye Shaw
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-03-17 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: minitest
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '5.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '5.0'
|
41
|
+
description: |2
|
42
|
+
Utility methods for pagination page and per page that make sure you'll always have a valid number.
|
43
|
+
Use them your controllers or model or anywhere where you process page info.
|
44
|
+
email: skye.shaw@gmail.com
|
45
|
+
executables: []
|
46
|
+
extensions: []
|
47
|
+
extra_rdoc_files:
|
48
|
+
- README.md
|
49
|
+
files:
|
50
|
+
- README.md
|
51
|
+
- lib/page_number.rb
|
52
|
+
- test/test_page_number.rb
|
53
|
+
homepage: https://github.com/sshaw/page_number
|
54
|
+
licenses:
|
55
|
+
- MIT
|
56
|
+
metadata: {}
|
57
|
+
post_install_message:
|
58
|
+
rdoc_options: []
|
59
|
+
require_paths:
|
60
|
+
- lib
|
61
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
requirements: []
|
72
|
+
rubyforge_project:
|
73
|
+
rubygems_version: 2.5.1
|
74
|
+
signing_key:
|
75
|
+
specification_version: 4
|
76
|
+
summary: Utility methods for pagination page and per page that make sure you'll always
|
77
|
+
have a valid number.
|
78
|
+
test_files:
|
79
|
+
- test/test_page_number.rb
|