just_paginate 0.0.7 → 0.0.8
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/lib/just_paginate.rb +22 -35
- data/test/test_just_paginate.rb +12 -6
- metadata +8 -8
data/lib/just_paginate.rb
CHANGED
@@ -1,70 +1,57 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
2
|
module JustPaginate
|
3
3
|
|
4
|
-
VERSION = "0.0.
|
4
|
+
VERSION = "0.0.8"
|
5
5
|
|
6
6
|
def self.page_value(page)
|
7
7
|
if page.nil?
|
8
8
|
1
|
9
|
-
else
|
9
|
+
else
|
10
10
|
page.to_i
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
14
|
def self.paginate(curr_page, per_page, total_entry_count, &selection_strategy)
|
15
|
-
raise "Pagination just supplies index range, expects a selection strategy" if selection_strategy.nil?
|
16
|
-
|
17
|
-
entries = yield(index_range(curr_page, per_page, total_entry_count)) || []
|
15
|
+
raise "Pagination just supplies index range, expects a selection strategy" if selection_strategy.nil?
|
16
|
+
|
17
|
+
entries = yield(index_range(curr_page, per_page, total_entry_count)) || []
|
18
18
|
return entries, total_page_number(total_entry_count, per_page)
|
19
19
|
end
|
20
20
|
|
21
21
|
def self.total_page_number(total_entry_count, per_page)
|
22
22
|
(total_entry_count.to_f / per_page).ceil
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
def self.index_range(curr_page, per_page, total_entry_count)
|
26
26
|
start_index = ((curr_page-1)*per_page)
|
27
27
|
end_index = (start_index+per_page)-1
|
28
|
-
|
28
|
+
|
29
29
|
if(start_index>total_entry_count)
|
30
30
|
raise "Pagination is out of bounds, beyond total entry size"
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
if end_index>total_entry_count
|
34
34
|
end_index = total_entry_count
|
35
35
|
end
|
36
|
-
|
36
|
+
|
37
37
|
Range.new(start_index, end_index)
|
38
38
|
end
|
39
39
|
|
40
|
-
def self.
|
40
|
+
def self.beyond_page_range?(curr_page, per_page, total_entry_count)
|
41
|
+
start_index = ((curr_page-1)*per_page)
|
42
|
+
end_index = (start_index+per_page)-1
|
43
|
+
start_index > total_entry_count
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.page_navigation(curr_page, total_page_count, &page_link_constructor)
|
41
47
|
links = page_links(curr_page.to_i, total_page_count, &page_link_constructor)
|
42
48
|
return "<div class='pagination'>#{links}</div>"
|
43
49
|
end
|
44
50
|
|
45
|
-
# Create gitorous-style-pagination until we move to Bootstrap
|
46
|
-
# <div class="pagination">
|
47
|
-
# <a href="/projects?page=24" class="prev_page" rel="prev">Previous</a>
|
48
|
-
# <a href="/projects?page=1" rel="start">1</a>
|
49
|
-
# <span class="gap">…</span>
|
50
|
-
# <a href="/projects?page=21">21</a>
|
51
|
-
# <a href="/projects?page=22">22</a>
|
52
|
-
# <a href="/projects?page=23">23</a>
|
53
|
-
# <a href="/projects?page=24" rel="prev">24</a> <span class="current">25</span>
|
54
|
-
# <a href="/projects?page=26" rel="next">26</a>
|
55
|
-
# <a href="/projects?page=27">27</a>
|
56
|
-
# <a href="/projects?page=28">28</a>
|
57
|
-
# <a href="/projects?page=29">29</a>
|
58
|
-
# <span class="gap">…</span>
|
59
|
-
# <a href="/projects?page=1446">1446</a>
|
60
|
-
# <a href="/projects?page=26" class="next_page" rel="next">Next</a>
|
61
|
-
# </div>
|
62
|
-
|
63
|
-
|
64
51
|
def self.page_links(curr_page, total_page_count, &page_link_constructor)
|
65
52
|
page_labels(curr_page, total_page_count).map do |label|
|
66
53
|
page_element = ""
|
67
|
-
|
54
|
+
|
68
55
|
if label == "..."
|
69
56
|
page_element = "<span class='gap'>#{label}</span>"
|
70
57
|
elsif label == "<"
|
@@ -84,14 +71,14 @@ module JustPaginate
|
|
84
71
|
|
85
72
|
end.join(" ")
|
86
73
|
end
|
87
|
-
|
74
|
+
|
88
75
|
def self.page_labels(current, total)
|
89
76
|
max_visible = 10
|
90
77
|
labels = []
|
91
78
|
|
92
79
|
if total <= max_visible
|
93
80
|
1.upto(total).each {|n| labels.push(n.to_s)}
|
94
|
-
else
|
81
|
+
else
|
95
82
|
if current > max_visible
|
96
83
|
labels = ["<", "1", "..."]
|
97
84
|
else
|
@@ -106,10 +93,10 @@ module JustPaginate
|
|
106
93
|
|
107
94
|
if (current <= (total-max_visible))
|
108
95
|
labels.concat ["...", "#{total}", ">"]
|
109
|
-
end
|
96
|
+
end
|
110
97
|
end
|
111
98
|
|
112
99
|
return labels
|
113
|
-
end
|
114
|
-
|
100
|
+
end
|
101
|
+
|
115
102
|
end
|
data/test/test_just_paginate.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
2
|
|
3
3
|
class JustPaginateTest < Test::Unit::TestCase
|
4
|
-
|
5
|
-
context "The backend pagination function" do
|
4
|
+
|
5
|
+
context "The backend pagination function" do
|
6
6
|
should "basically work like this" do
|
7
7
|
paged_collection = [1,2,3,4,5,6,7,8,9,10]
|
8
8
|
|
@@ -26,12 +26,18 @@ class JustPaginateTest < Test::Unit::TestCase
|
|
26
26
|
JustPaginate.index_range(7,2,4)
|
27
27
|
end
|
28
28
|
end
|
29
|
-
|
29
|
+
|
30
|
+
should "provide predicate to check if pagination would exceed total pagecount" do
|
31
|
+
assert JustPaginate.beyond_page_range?(7,2,4)
|
32
|
+
assert !JustPaginate.beyond_page_range?(1,20,100)
|
33
|
+
end
|
34
|
+
|
35
|
+
|
30
36
|
should "calculate correct total page count" do
|
31
37
|
assert_equal 25, JustPaginate.total_page_number(500, 20)
|
32
38
|
assert_equal 25, JustPaginate.total_page_number(498, 20)
|
33
39
|
end
|
34
|
-
|
40
|
+
|
35
41
|
should "correctly apply the supplied selection strategy" do
|
36
42
|
ran = false
|
37
43
|
sliced_entries, page_count = JustPaginate.paginate(1, 5, 10) do |index_range|
|
@@ -41,7 +47,7 @@ class JustPaginateTest < Test::Unit::TestCase
|
|
41
47
|
end
|
42
48
|
assert ran, "selection block didn't run"
|
43
49
|
end
|
44
|
-
|
50
|
+
|
45
51
|
should "calculate correct index ranges" do
|
46
52
|
assert_equal 0..1, JustPaginate.index_range(1,2,4)
|
47
53
|
assert_equal 2..3, JustPaginate.index_range(2,2,4)
|
@@ -64,7 +70,7 @@ class JustPaginateTest < Test::Unit::TestCase
|
|
64
70
|
assert_equal 480..499, JustPaginate.index_range(25,20,500)
|
65
71
|
end
|
66
72
|
end
|
67
|
-
|
73
|
+
|
68
74
|
context "The frontend pagination html helper" do
|
69
75
|
should "basically work like this" do
|
70
76
|
generated = JustPaginate.page_navigation(1, 10) { |page_no| "/projects/index?page=#{page_no}" }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: just_paginate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-11-08 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: minitest
|
16
|
-
requirement: &
|
16
|
+
requirement: &19002240 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *19002240
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: shoulda
|
27
|
-
requirement: &
|
27
|
+
requirement: &19001720 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *19001720
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: shoulda-context
|
38
|
-
requirement: &
|
38
|
+
requirement: &19001220 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *19001220
|
47
47
|
description: Framework-agnostic support for paginating collections of things, and
|
48
48
|
linking to paginated things in your webpage
|
49
49
|
email:
|