folio-pagination 0.0.3 → 0.0.5
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/folio.rb +2 -2
- data/lib/folio/version.rb +1 -1
- data/lib/folio/will_paginate/active_record.rb +17 -0
- data/test/folio/will_paginate/active_record_test.rb +23 -14
- metadata +2 -2
data/lib/folio.rb
CHANGED
@@ -45,10 +45,10 @@ module Folio
|
|
45
45
|
end
|
46
46
|
|
47
47
|
def configure_pagination(page, options)
|
48
|
-
current_page = options
|
48
|
+
current_page = options[:page]
|
49
49
|
current_page = page.first_page if current_page.nil?
|
50
50
|
page.current_page = current_page
|
51
|
-
page.per_page = options
|
51
|
+
page.per_page = options[:per_page] || self.per_page
|
52
52
|
page.total_entries = options.fetch(:total_entries) { self.respond_to?(:count) ? self.count : nil }
|
53
53
|
page
|
54
54
|
end
|
data/lib/folio/version.rb
CHANGED
@@ -113,6 +113,23 @@ module Folio
|
|
113
113
|
end
|
114
114
|
|
115
115
|
include ::Folio::Ordinal
|
116
|
+
|
117
|
+
def paginate(options={})
|
118
|
+
if !options.has_key?(:total_entries)
|
119
|
+
group_values = self.scoped.group_values
|
120
|
+
unless group_values.empty?
|
121
|
+
# total_entries left to an auto-count, but the relation being
|
122
|
+
# paginated has a grouping. we need to do a special count, lest
|
123
|
+
# self.count give us a hash instead of the integer we expect.
|
124
|
+
if self.scoped.having_values.empty?
|
125
|
+
options[:total_entries] = except(:group).select(group_values).uniq.count
|
126
|
+
else
|
127
|
+
options[:total_entries] = unscoped.from("(#{to_sql}) a").count
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
super(options).all
|
132
|
+
end
|
116
133
|
end
|
117
134
|
|
118
135
|
# mix into Active Record. these are the same ones that WillPaginate mixes
|
@@ -40,33 +40,27 @@ describe ActiveRecord do
|
|
40
40
|
page.is_a?(Folio::Ordinal::Page).must_equal true
|
41
41
|
end
|
42
42
|
|
43
|
-
it "should
|
43
|
+
it "should return an instantiated page" do
|
44
44
|
page = Item.paginate
|
45
|
-
page.is_a?(
|
45
|
+
page.is_a?(Array).must_equal true
|
46
46
|
end
|
47
47
|
|
48
|
-
it "should
|
49
|
-
page = Item.paginate(per_page: 10)
|
50
|
-
page.limit_value.must_equal 10
|
51
|
-
end
|
52
|
-
|
53
|
-
it "should use that limit_value as per_page attribute" do
|
48
|
+
it "should respect per_page" do
|
54
49
|
page = Item.paginate(per_page: 10)
|
55
50
|
page.per_page.must_equal 10
|
56
51
|
end
|
57
52
|
|
58
|
-
it "should default
|
53
|
+
it "should default per_page to model's per_page" do
|
59
54
|
was = Item.per_page
|
60
55
|
Item.per_page = 10
|
61
56
|
page = Item.paginate
|
62
|
-
page.limit_value.must_equal 10
|
63
57
|
page.per_page.must_equal 10
|
64
58
|
Item.per_page = was
|
65
59
|
end
|
66
60
|
|
67
61
|
it "should set offset from page and per_page" do
|
68
62
|
page = Item.paginate(page: 3, per_page: 10)
|
69
|
-
page.
|
63
|
+
page.offset.must_equal 20
|
70
64
|
end
|
71
65
|
|
72
66
|
it "should set current_page" do
|
@@ -74,19 +68,19 @@ describe ActiveRecord do
|
|
74
68
|
page.current_page.must_equal 3
|
75
69
|
end
|
76
70
|
|
77
|
-
it "should have the right count
|
71
|
+
it "should have the right count" do
|
78
72
|
page = Item.paginate(page: 3, per_page: 10)
|
79
73
|
page.count.must_equal 4
|
80
74
|
end
|
81
75
|
|
82
|
-
it "should have the right size
|
76
|
+
it "should have the right size" do
|
83
77
|
page = Item.paginate(page: 3, per_page: 10)
|
84
78
|
page.size.must_equal 4
|
85
79
|
end
|
86
80
|
|
87
81
|
it "should return the expected items" do
|
88
82
|
page = Item.paginate(page: 3, per_page: 10)
|
89
|
-
page.
|
83
|
+
page.must_equal Item.offset(20).all
|
90
84
|
end
|
91
85
|
|
92
86
|
it "should auto-count total_entries unless specified as nil" do
|
@@ -94,11 +88,26 @@ describe ActiveRecord do
|
|
94
88
|
page.total_entries.must_equal 24
|
95
89
|
end
|
96
90
|
|
91
|
+
it "should correctly auto-count total_entries with a grouping" do
|
92
|
+
page = Item.group(:filter).paginate
|
93
|
+
page.total_entries.must_equal 2
|
94
|
+
end
|
95
|
+
|
96
|
+
it "should correctly auto-count total_entries with a grouping and a having" do
|
97
|
+
page = Item.group(:filter).having("COUNT(*)>1").paginate
|
98
|
+
page.total_entries.must_equal 2
|
99
|
+
end
|
100
|
+
|
97
101
|
it "should work with total_entries nil" do
|
98
102
|
page = Item.paginate(page: 3, total_entries: nil)
|
99
103
|
page.current_page.must_equal 3
|
100
104
|
end
|
101
105
|
|
106
|
+
it "should work with per_page nil" do
|
107
|
+
page = Item.paginate(per_page: nil)
|
108
|
+
page.per_page.must_equal Folio.per_page
|
109
|
+
end
|
110
|
+
|
102
111
|
it "should validate page number against auto-counted total_entries" do
|
103
112
|
lambda{ Item.paginate(page: 4, per_page: 10) }.must_raise Folio::InvalidPage
|
104
113
|
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.5
|
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:
|
12
|
+
date: 2014-02-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|