pagination 0.3.2 → 0.3.3
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/VERSION +1 -1
- data/lib/pagination/collection.rb +17 -12
- data/pagination.gemspec +2 -2
- data/test/test_pagination.rb +34 -9
- data/test/test_pagination_template.rb +5 -5
- data/views/paginate.haml +19 -14
- metadata +3 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.3
|
@@ -46,17 +46,23 @@ module Pagination
|
|
46
46
|
# based on the current page.
|
47
47
|
#
|
48
48
|
# If we have 100 pages for example and we're at page 50,
|
49
|
-
# this would
|
49
|
+
# this would simply return
|
50
50
|
#
|
51
|
-
# [
|
51
|
+
# [45, 46, 47, 48, 49, 50, 51, 52, 53, 54]
|
52
52
|
#
|
53
53
|
# When we're at page 1, it displays 1 to 10.
|
54
54
|
#
|
55
55
|
# You can pass in a number to limit the total displayed pages.
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
56
|
+
def displayed_pages(limit = 10, left_offset = -5, right_offset = 4)
|
57
|
+
lower, upper = nil, nil
|
58
|
+
|
59
|
+
if page + left_offset < 1 || page + right_offset > pages.last
|
60
|
+
lower = [page, [pages.last - limit, 0].max + 1].min
|
61
|
+
upper = [page + limit - 1, pages.last].min
|
62
|
+
else
|
63
|
+
lower = page + left_offset
|
64
|
+
upper = page + right_offset
|
65
|
+
end
|
60
66
|
|
61
67
|
(lower..upper).to_a
|
62
68
|
end
|
@@ -73,6 +79,10 @@ module Pagination
|
|
73
79
|
def each(&block)
|
74
80
|
collection.each(&block)
|
75
81
|
end
|
82
|
+
|
83
|
+
def total_pages
|
84
|
+
(total / per_page.to_f).ceil
|
85
|
+
end
|
76
86
|
|
77
87
|
protected
|
78
88
|
def collection
|
@@ -80,12 +90,7 @@ module Pagination
|
|
80
90
|
end
|
81
91
|
|
82
92
|
def pages
|
83
|
-
1..
|
93
|
+
1..total_pages
|
84
94
|
end
|
85
|
-
|
86
|
-
def last_page
|
87
|
-
(total / per_page.to_f).ceil
|
88
|
-
end
|
89
|
-
|
90
95
|
end
|
91
96
|
end
|
data/pagination.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{pagination}
|
8
|
-
s.version = "0.3.
|
8
|
+
s.version = "0.3.3"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Cyril David"]
|
12
|
-
s.date = %q{2010-06-
|
12
|
+
s.date = %q{2010-06-10}
|
13
13
|
s.default_executable = %q{pagination}
|
14
14
|
s.description = %q{Trying to make the pagination world a better place}
|
15
15
|
s.email = %q{cyx.ucron@gmail.com}
|
data/test/test_pagination.rb
CHANGED
@@ -71,34 +71,59 @@ class TestPagination < Test::Unit::TestCase
|
|
71
71
|
end
|
72
72
|
end
|
73
73
|
|
74
|
-
context "given we have 100 pages and we're at
|
74
|
+
context "given we have 100 pages and we're at pages 1 to 6" do
|
75
|
+
should "have 1 to 10 of displayed_pages" do
|
76
|
+
(1..6).each do |p|
|
77
|
+
collection = Pagination.paginate((1..100).to_a, :per_page => p)
|
78
|
+
assert_equal (1..10).to_a, collection.displayed_pages
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
context "given we have 100 pages and we're at page 7" do
|
75
84
|
setup do
|
76
|
-
@collection = Pagination.paginate((1..100).to_a, :per_page => 1)
|
85
|
+
@collection = Pagination.paginate((1..100).to_a, :per_page => 1, :page => 7)
|
77
86
|
end
|
78
87
|
|
79
|
-
should "have
|
80
|
-
assert_equal (
|
88
|
+
should "have 2 to 11 of displayed_pages" do
|
89
|
+
assert_equal (2..11).to_a, @collection.displayed_pages
|
81
90
|
end
|
82
91
|
end
|
83
92
|
|
93
|
+
|
84
94
|
context "given we have 100 pages and we're at page 50" do
|
85
95
|
setup do
|
86
96
|
@collection = Pagination.paginate((1..100).to_a, :per_page => 1, :page => 50)
|
87
97
|
end
|
88
98
|
|
89
|
-
should "have
|
90
|
-
assert_equal (
|
99
|
+
should "have 45 to 54 of displayed_pages" do
|
100
|
+
assert_equal (45..54).to_a, @collection.displayed_pages
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
context "given we have 100 pages and we're at page 94" do
|
105
|
+
should "start with 89 and end with 98" do
|
106
|
+
collection = Pagination.paginate((1..100).to_a, :per_page => 1, :page => 94)
|
107
|
+
assert_equal (89..98).to_a, collection.displayed_pages
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
context "given we have 100 pages and we're at page 95" do
|
112
|
+
should "start with 90 and end with 99" do
|
113
|
+
collection = Pagination.paginate((1..100).to_a, :per_page => 1, :page => 95)
|
114
|
+
assert_equal (90..99).to_a, collection.displayed_pages
|
91
115
|
end
|
92
116
|
end
|
93
117
|
|
94
|
-
context "given we have 100 pages and we're at pages
|
95
|
-
should "start with
|
96
|
-
(
|
118
|
+
context "given we have 100 pages and we're at pages 96 up to 100" do
|
119
|
+
should "start with 91 and end with 100" do
|
120
|
+
(96..100).each do |p|
|
97
121
|
collection = Pagination.paginate((1..100).to_a, :per_page => 1, :page => p)
|
98
122
|
assert_equal (91..100).to_a, collection.displayed_pages
|
99
123
|
end
|
100
124
|
end
|
101
125
|
end
|
126
|
+
|
102
127
|
|
103
128
|
context "given we have 5 pages and we're at page 2 up to 5" do
|
104
129
|
should "always display the 5 pages" do
|
@@ -33,23 +33,23 @@ class TestPaginationTemplate < Test::Unit::TestCase
|
|
33
33
|
|
34
34
|
should "have a ul > li.next-link with page=2" do
|
35
35
|
assert_equal 1,
|
36
|
-
doc.search('
|
36
|
+
doc.search('nav.pagination > a.next-link[href="?page=2"]').length
|
37
37
|
end
|
38
38
|
|
39
39
|
should "display the first page as the current page" do
|
40
|
-
assert_equal 1, doc.search('
|
40
|
+
assert_equal 1, doc.search('nav.pagination > nav.page-numbers > ul > li > span').length
|
41
41
|
|
42
|
-
assert_equal '1', doc.search('
|
42
|
+
assert_equal '1', doc.search('nav.pagination > nav.page-numbers > ul > li > span').text
|
43
43
|
end
|
44
44
|
|
45
45
|
should "display pages 2 to 5 as links" do
|
46
46
|
(2..5).each do |page|
|
47
47
|
assert_equal 1,
|
48
|
-
doc.search(%(
|
48
|
+
doc.search(%(nav.pagination > nav.page-numbers > ul > li >
|
49
49
|
a[href="?page=#{page}"])).length
|
50
50
|
|
51
51
|
assert_equal page.to_s,
|
52
|
-
doc.search(%(
|
52
|
+
doc.search(%(nav.pagination > nav.page-numbers > ul > li >
|
53
53
|
a[href="?page=#{page}"])).text
|
54
54
|
end
|
55
55
|
end
|
data/views/paginate.haml
CHANGED
@@ -1,19 +1,24 @@
|
|
1
1
|
- if items.render?
|
2
|
-
%
|
2
|
+
%nav.pagination
|
3
3
|
- if items.prev_page
|
4
|
-
%a.prev-link{:href => ("?page=%
|
4
|
+
%a.prev-link{:href => ("?page=%d" % items.prev_page)}
|
5
5
|
%span ← Previous
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
6
|
+
%nav.page-numbers
|
7
|
+
%span.current-page
|
8
|
+
%span
|
9
|
+
%strong
|
10
|
+
Page
|
11
|
+
= items.page
|
12
|
+
of
|
13
|
+
= items.total_pages
|
14
|
+
%ul
|
15
|
+
- items.displayed_pages.each do |page|
|
16
|
+
- if items.current?(page)
|
17
|
+
%li.active
|
18
|
+
%span= page
|
19
|
+
- else
|
20
|
+
%li
|
21
|
+
%a{:href => ("?page=%d" % page)}= page
|
16
22
|
- if items.next_page
|
17
|
-
%a.next-link{:href => ("?page=%
|
23
|
+
%a.next-link{:href => ("?page=%d" % items.next_page)}
|
18
24
|
%span Next →
|
19
|
-
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 3
|
8
|
-
-
|
9
|
-
version: 0.3.
|
8
|
+
- 3
|
9
|
+
version: 0.3.3
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Cyril David
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-06-
|
17
|
+
date: 2010-06-10 00:00:00 +08:00
|
18
18
|
default_executable: pagination
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|