kaminari 0.17.0 → 1.0.0.beta2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of kaminari might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.gitignore +0 -1
- data/.travis.yml +20 -39
- data/CHANGELOG.md +560 -0
- data/CONTRIBUTING.md +16 -0
- data/Gemfile +1 -0
- data/README.md +545 -0
- data/Rakefile +21 -24
- data/gemfiles/active_record_41.gemfile +2 -4
- data/gemfiles/active_record_42.gemfile +2 -4
- data/gemfiles/active_record_50.gemfile +20 -0
- data/gemfiles/active_record_edge.gemfile +5 -6
- data/kaminari.gemspec +11 -17
- data/lib/kaminari.rb +4 -39
- data/lib/kaminari/version.rb +2 -1
- metadata +44 -186
- data/.gemtest +0 -0
- data/.rspec +0 -2
- data/CHANGELOG.rdoc +0 -480
- data/README.rdoc +0 -336
- data/app/views/kaminari/_first_page.html.erb +0 -11
- data/app/views/kaminari/_first_page.html.haml +0 -9
- data/app/views/kaminari/_first_page.html.slim +0 -10
- data/app/views/kaminari/_gap.html.erb +0 -8
- data/app/views/kaminari/_gap.html.haml +0 -8
- data/app/views/kaminari/_gap.html.slim +0 -9
- data/app/views/kaminari/_last_page.html.erb +0 -11
- data/app/views/kaminari/_last_page.html.haml +0 -9
- data/app/views/kaminari/_last_page.html.slim +0 -10
- data/app/views/kaminari/_next_page.html.erb +0 -11
- data/app/views/kaminari/_next_page.html.haml +0 -9
- data/app/views/kaminari/_next_page.html.slim +0 -10
- data/app/views/kaminari/_page.html.erb +0 -12
- data/app/views/kaminari/_page.html.haml +0 -10
- data/app/views/kaminari/_page.html.slim +0 -11
- data/app/views/kaminari/_paginator.html.erb +0 -23
- data/app/views/kaminari/_paginator.html.haml +0 -18
- data/app/views/kaminari/_paginator.html.slim +0 -19
- data/app/views/kaminari/_prev_page.html.erb +0 -11
- data/app/views/kaminari/_prev_page.html.haml +0 -9
- data/app/views/kaminari/_prev_page.html.slim +0 -10
- data/config/locales/kaminari.yml +0 -19
- data/gemfiles/active_record_30.gemfile +0 -28
- data/gemfiles/active_record_31.gemfile +0 -26
- data/gemfiles/active_record_32.gemfile +0 -25
- data/gemfiles/active_record_40.gemfile +0 -26
- data/gemfiles/data_mapper_12.gemfile +0 -32
- data/gemfiles/mongo_mapper.gemfile +0 -25
- data/gemfiles/mongoid_30.gemfile +0 -22
- data/gemfiles/mongoid_31.gemfile +0 -21
- data/gemfiles/mongoid_40.gemfile +0 -19
- data/gemfiles/mongoid_50.gemfile +0 -23
- data/gemfiles/sinatra_13.gemfile +0 -36
- data/gemfiles/sinatra_14.gemfile +0 -33
- data/lib/generators/kaminari/config_generator.rb +0 -16
- data/lib/generators/kaminari/templates/kaminari_config.rb +0 -10
- data/lib/generators/kaminari/views_generator.rb +0 -119
- data/lib/kaminari/config.rb +0 -51
- data/lib/kaminari/engine.rb +0 -4
- data/lib/kaminari/grape.rb +0 -4
- data/lib/kaminari/helpers/action_view_extension.rb +0 -132
- data/lib/kaminari/helpers/paginator.rb +0 -195
- data/lib/kaminari/helpers/sinatra_helpers.rb +0 -176
- data/lib/kaminari/helpers/tags.rb +0 -108
- data/lib/kaminari/hooks.rb +0 -53
- data/lib/kaminari/models/active_record_extension.rb +0 -22
- data/lib/kaminari/models/active_record_model_extension.rb +0 -22
- data/lib/kaminari/models/active_record_relation_methods.rb +0 -42
- data/lib/kaminari/models/array_extension.rb +0 -66
- data/lib/kaminari/models/configuration_methods.rb +0 -48
- data/lib/kaminari/models/data_mapper_collection_methods.rb +0 -19
- data/lib/kaminari/models/data_mapper_extension.rb +0 -51
- data/lib/kaminari/models/mongo_mapper_extension.rb +0 -18
- data/lib/kaminari/models/mongoid_criteria_methods.rb +0 -40
- data/lib/kaminari/models/mongoid_extension.rb +0 -26
- data/lib/kaminari/models/page_scope_methods.rb +0 -73
- data/lib/kaminari/models/plucky_criteria_methods.rb +0 -23
- data/lib/kaminari/railtie.rb +0 -7
- data/lib/kaminari/sinatra.rb +0 -7
- data/spec/config/config_spec.rb +0 -91
- data/spec/fake_app/active_record/config.rb +0 -3
- data/spec/fake_app/active_record/models.rb +0 -65
- data/spec/fake_app/data_mapper/config.rb +0 -1
- data/spec/fake_app/data_mapper/models.rb +0 -27
- data/spec/fake_app/mongo_mapper/config.rb +0 -2
- data/spec/fake_app/mongo_mapper/models.rb +0 -9
- data/spec/fake_app/mongoid/config.rb +0 -20
- data/spec/fake_app/mongoid/models.rb +0 -38
- data/spec/fake_app/rails_app.rb +0 -56
- data/spec/fake_app/sinatra_app.rb +0 -22
- data/spec/fake_app/views/alternative/kaminari/_first_page.html.erb +0 -1
- data/spec/fake_app/views/alternative/kaminari/_paginator.html.erb +0 -3
- data/spec/fake_app/views/kaminari/bootstrap/_page.html.erb +0 -1
- data/spec/fake_app/views/kaminari/bootstrap/_paginator.html.erb +0 -7
- data/spec/fake_gem.rb +0 -20
- data/spec/generators/views_generator_spec.rb +0 -18
- data/spec/helpers/action_view_extension_spec.rb +0 -318
- data/spec/helpers/helpers_spec.rb +0 -144
- data/spec/helpers/sinatra_helpers_spec.rb +0 -223
- data/spec/helpers/tags_spec.rb +0 -140
- data/spec/models/active_record/active_record_relation_methods_spec.rb +0 -77
- data/spec/models/active_record/inherited_spec.rb +0 -9
- data/spec/models/active_record/scopes_spec.rb +0 -265
- data/spec/models/array_spec.rb +0 -172
- data/spec/models/configuration_methods_spec.rb +0 -125
- data/spec/models/data_mapper/data_mapper_spec.rb +0 -205
- data/spec/models/mongo_mapper/mongo_mapper_spec.rb +0 -84
- data/spec/models/mongoid/mongoid_spec.rb +0 -228
- data/spec/requests/users_spec.rb +0 -53
- data/spec/spec_helper.rb +0 -34
- data/spec/spec_helper_for_sinatra.rb +0 -34
- data/spec/support/database_cleaner.rb +0 -19
- data/spec/support/matchers.rb +0 -52
@@ -1,125 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe "configuration methods" do
|
4
|
-
let(:model){ User }
|
5
|
-
|
6
|
-
describe "#default_per_page" do
|
7
|
-
if defined? ActiveRecord
|
8
|
-
describe 'AR::Base' do
|
9
|
-
subject { ActiveRecord::Base }
|
10
|
-
it { should_not respond_to :paginates_per }
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
subject { model.page(1) }
|
15
|
-
|
16
|
-
context "by default" do
|
17
|
-
its(:limit_value){ should == 25 }
|
18
|
-
end
|
19
|
-
|
20
|
-
context "when configuring both on global and model-level" do
|
21
|
-
before do
|
22
|
-
Kaminari.configure {|c| c.default_per_page = 50 }
|
23
|
-
model.paginates_per 100
|
24
|
-
end
|
25
|
-
|
26
|
-
its(:limit_value){ should == 100 }
|
27
|
-
end
|
28
|
-
|
29
|
-
context "when configuring multiple times" do
|
30
|
-
before do
|
31
|
-
Kaminari.configure {|c| c.default_per_page = 10 }
|
32
|
-
Kaminari.configure {|c| c.default_per_page = 20 }
|
33
|
-
end
|
34
|
-
|
35
|
-
its(:limit_value){ should == 20 }
|
36
|
-
end
|
37
|
-
|
38
|
-
after do
|
39
|
-
Kaminari.configure {|c| c.default_per_page = 25 }
|
40
|
-
model.paginates_per nil
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
describe "#max_per_page" do
|
45
|
-
if defined? ActiveRecord
|
46
|
-
describe 'AR::Base' do
|
47
|
-
subject { ActiveRecord::Base }
|
48
|
-
it { should_not respond_to :max_pages_per }
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
subject { model.page(1).per(1000) }
|
53
|
-
|
54
|
-
context "by default" do
|
55
|
-
its(:limit_value){ should == 1000 }
|
56
|
-
end
|
57
|
-
|
58
|
-
context "when configuring both on global and model-level" do
|
59
|
-
before do
|
60
|
-
Kaminari.configure {|c| c.max_per_page = 50 }
|
61
|
-
model.max_paginates_per 100
|
62
|
-
end
|
63
|
-
|
64
|
-
its(:limit_value){ should == 100 }
|
65
|
-
end
|
66
|
-
|
67
|
-
context "when configuring multiple times" do
|
68
|
-
before do
|
69
|
-
Kaminari.configure {|c| c.max_per_page = 10 }
|
70
|
-
Kaminari.configure {|c| c.max_per_page = 20 }
|
71
|
-
end
|
72
|
-
|
73
|
-
its(:limit_value){ should == 20 }
|
74
|
-
end
|
75
|
-
|
76
|
-
after do
|
77
|
-
Kaminari.configure {|c| c.max_per_page = nil }
|
78
|
-
model.max_paginates_per nil
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
describe "#max_pages" do
|
83
|
-
if defined? ActiveRecord
|
84
|
-
describe 'AR::Base' do
|
85
|
-
subject { ActiveRecord::Base }
|
86
|
-
it { should_not respond_to :max_paginates_per }
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
before do
|
91
|
-
100.times do |count|
|
92
|
-
model.create!(:name => "User#{count}")
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
subject { model.page(1).per(5) }
|
97
|
-
|
98
|
-
context "by default" do
|
99
|
-
its(:total_pages){ should == 20 }
|
100
|
-
end
|
101
|
-
|
102
|
-
context "when configuring both on global and model-level" do
|
103
|
-
before do
|
104
|
-
Kaminari.configure {|c| c.max_pages = 10 }
|
105
|
-
model.max_pages_per 15
|
106
|
-
end
|
107
|
-
|
108
|
-
its(:total_pages){ should == 15 }
|
109
|
-
end
|
110
|
-
|
111
|
-
context "when configuring multiple times" do
|
112
|
-
before do
|
113
|
-
Kaminari.configure {|c| c.max_pages = 10 }
|
114
|
-
Kaminari.configure {|c| c.max_pages = 15 }
|
115
|
-
end
|
116
|
-
|
117
|
-
its(:total_pages){ should == 15 }
|
118
|
-
end
|
119
|
-
|
120
|
-
after do
|
121
|
-
Kaminari.configure {|c| c.max_pages = nil }
|
122
|
-
model.max_pages_per nil
|
123
|
-
end
|
124
|
-
end
|
125
|
-
end
|
@@ -1,205 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
if defined? DataMapper
|
4
|
-
# tests for issue #203
|
5
|
-
describe Kaminari::DataMapperCollectionMethods do
|
6
|
-
before do
|
7
|
-
30.times do |i|
|
8
|
-
User.create(:name => "User#{i}", :age => i)
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
describe 'Model' do
|
13
|
-
subject { User }
|
14
|
-
it { User.all.count.should == 30 }
|
15
|
-
it { User.page(1).length.should == 25 }
|
16
|
-
it {
|
17
|
-
User.paginates_per(5)
|
18
|
-
User.page(1).length.should == 5
|
19
|
-
User.all.page(1).length.should == 5
|
20
|
-
User.paginates_per(nil) # reset to default
|
21
|
-
}
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
25
|
-
|
26
|
-
describe Kaminari::DataMapperExtension do
|
27
|
-
before do
|
28
|
-
90.times do |i|
|
29
|
-
User.create(:name => "User#{i}", :age => i)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
describe 'Collection' do
|
34
|
-
subject{ User.all }
|
35
|
-
it { should respond_to(:page) }
|
36
|
-
it { should_not respond_to(:per) }
|
37
|
-
end
|
38
|
-
|
39
|
-
describe 'Model' do
|
40
|
-
subject{ User }
|
41
|
-
it { should respond_to(:page) }
|
42
|
-
it { should respond_to(:default_per_page) }
|
43
|
-
it { should_not respond_to(:per) }
|
44
|
-
end
|
45
|
-
|
46
|
-
describe '#page' do
|
47
|
-
context 'page 0' do
|
48
|
-
subject { User.all(:age.gte => 60).page 0 }
|
49
|
-
it { should be_a DataMapper::Collection }
|
50
|
-
its(:current_page) { should == 1 }
|
51
|
-
its(:prev_page) { should be_nil }
|
52
|
-
its(:next_page) { should == 2 }
|
53
|
-
its('query.limit') { should == 25 }
|
54
|
-
its('query.offset') { should == 0 }
|
55
|
-
its(:total_count) { should == User.count(:age.gte => 60) }
|
56
|
-
its(:total_pages) { should == 2 }
|
57
|
-
end
|
58
|
-
|
59
|
-
context 'page 1' do
|
60
|
-
subject { User.all(:age.gte => 0).page 1 }
|
61
|
-
it { should be_a DataMapper::Collection }
|
62
|
-
its(:current_page) { should == 1 }
|
63
|
-
its(:prev_page) { should be_nil }
|
64
|
-
its(:next_page) { should == 2 }
|
65
|
-
its('query.limit') { should == 25 }
|
66
|
-
its('query.offset') { should == 0 }
|
67
|
-
its(:total_count) { should == 90 }
|
68
|
-
its(:total_pages) { should == 4 }
|
69
|
-
end
|
70
|
-
|
71
|
-
context 'page 2' do
|
72
|
-
subject { User.page 2 }
|
73
|
-
it { should be_a DataMapper::Collection }
|
74
|
-
its(:current_page) { should == 2 }
|
75
|
-
its(:prev_page) { should == 1 }
|
76
|
-
its(:next_page) { should == 3 }
|
77
|
-
its(:limit_value) { should == 25 }
|
78
|
-
its('query.limit') { should == 25 }
|
79
|
-
its('query.offset') { should == 25 }
|
80
|
-
its(:total_count) { should == 90 }
|
81
|
-
its(:total_pages) { should == 4 }
|
82
|
-
end
|
83
|
-
|
84
|
-
context 'page "foobar"' do
|
85
|
-
subject { User.page 'foobar' }
|
86
|
-
it { should be_a DataMapper::Collection }
|
87
|
-
its(:current_page) { should == 1 }
|
88
|
-
its(:prev_page) { should be_nil }
|
89
|
-
its(:next_page) { should == 2 }
|
90
|
-
its('query.limit') { should == 25 }
|
91
|
-
its('query.offset') { should == 0 }
|
92
|
-
its(:total_count) { should == 90 }
|
93
|
-
its(:total_pages) { should == 4 }
|
94
|
-
end
|
95
|
-
|
96
|
-
context 'with criteria before' do
|
97
|
-
subject { User.all(:age.gt => 60).page 2 }
|
98
|
-
it { should be_a DataMapper::Collection }
|
99
|
-
its(:current_page) { should == 2 }
|
100
|
-
its(:prev_page) { should == 1 }
|
101
|
-
its(:next_page) { should be_nil }
|
102
|
-
its('query.limit') { should == 25 }
|
103
|
-
its('query.offset') { should == 25 }
|
104
|
-
its(:total_count) { should == User.count(:age.gt => 60) }
|
105
|
-
its(:total_pages) { should == 2 }
|
106
|
-
end
|
107
|
-
|
108
|
-
context 'with criteria after' do
|
109
|
-
subject { User.page(2).all(:age.gt => 60) }
|
110
|
-
it { should be_a DataMapper::Collection }
|
111
|
-
its(:current_page) { should == 2 }
|
112
|
-
its(:prev_page) { should == 1 }
|
113
|
-
its(:next_page) { should be_nil }
|
114
|
-
its('query.limit') { should == 25 }
|
115
|
-
its('query.offset') { should == 25 }
|
116
|
-
its(:total_count) { should == User.count(:age.gt => 60) }
|
117
|
-
its(:total_pages) { should == 2 }
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
describe '#per' do
|
122
|
-
context 'on simple query' do
|
123
|
-
subject { User.page(2).per(20) }
|
124
|
-
it { should be_a DataMapper::Collection }
|
125
|
-
its(:current_page) { should == 2 }
|
126
|
-
its(:prev_page) { should == 1 }
|
127
|
-
its(:next_page) { should == 3 }
|
128
|
-
its('query.limit') { should == 20 }
|
129
|
-
its(:limit_value) { should == 20 }
|
130
|
-
its('query.offset') { should == 20 }
|
131
|
-
its(:total_count) { should == 90 }
|
132
|
-
its(:total_pages) { should == 5 }
|
133
|
-
end
|
134
|
-
|
135
|
-
context 'on query with condition' do
|
136
|
-
subject { User.page(5).all(:age.lte => 80).per(13) }
|
137
|
-
its(:current_page) { should == 5 }
|
138
|
-
its(:prev_page) { should == 4 }
|
139
|
-
its(:next_page) { should == 6 }
|
140
|
-
its('query.limit') { should == 13 }
|
141
|
-
its('query.offset') { should == 52 }
|
142
|
-
its(:total_count) { should == 81 }
|
143
|
-
its(:total_pages) { should == 7 }
|
144
|
-
end
|
145
|
-
|
146
|
-
context 'on query with order' do
|
147
|
-
subject { User.page(5).all(:age.lte => 80, :order => [:age.asc]).per(13) }
|
148
|
-
it('includes user with age 52') { should include(User.first(:age => 52)) }
|
149
|
-
it('does not include user with age 51') { should_not include(User.first(:age => 51)) }
|
150
|
-
it('includes user with age 52') { should include(User.first(:age => 64)) }
|
151
|
-
it('does not include user with age 51') { should_not include(User.first(:age => 65)) }
|
152
|
-
its(:current_page) { should == 5 }
|
153
|
-
its(:prev_page) { should == 4 }
|
154
|
-
its(:next_page) { should == 6 }
|
155
|
-
its('query.limit') { should == 13 }
|
156
|
-
its('query.offset') { should == 52 }
|
157
|
-
its(:total_count) { should == 81 }
|
158
|
-
its(:total_pages) { should == 7 }
|
159
|
-
end
|
160
|
-
|
161
|
-
context 'on chained queries' do
|
162
|
-
subject { User.all(:age.gte => 50).page(3).all(:age.lte => 80).per(13) }
|
163
|
-
its(:current_page) { should == 3 }
|
164
|
-
its(:prev_page) { should == 2 }
|
165
|
-
its(:next_page) { should be_nil }
|
166
|
-
its('query.limit') { should == 13 }
|
167
|
-
its('query.offset') { should == 26 }
|
168
|
-
its(:total_count) { should == 31 }
|
169
|
-
its(:total_pages) { should == 3 }
|
170
|
-
end
|
171
|
-
|
172
|
-
context 'for association' do
|
173
|
-
before do
|
174
|
-
worker0 = User[0]
|
175
|
-
30.times do |i|
|
176
|
-
worker0.projects << Project.create(:name => "Project#{i}")
|
177
|
-
end
|
178
|
-
worker0.projects.save
|
179
|
-
end
|
180
|
-
|
181
|
-
context 'on query' do
|
182
|
-
subject { User[0].projects.page(3).all(:name.like => 'Project%').per(5) }
|
183
|
-
its(:current_page) { should == 3 }
|
184
|
-
its(:prev_page) { should == 2 }
|
185
|
-
its(:next_page) { should == 4 }
|
186
|
-
its('query.limit') { should == 5 }
|
187
|
-
its('query.offset') { should == 10 }
|
188
|
-
its(:total_count) { should == 30 }
|
189
|
-
its(:total_pages) { should == 6 }
|
190
|
-
end
|
191
|
-
|
192
|
-
context 'after association conditions' do
|
193
|
-
subject { User.page(3).all(:projects => Project.all).per(5) }
|
194
|
-
its(:current_page) { should == 3 }
|
195
|
-
its(:prev_page) { should == 2 }
|
196
|
-
its(:next_page) { should == 4 }
|
197
|
-
its('query.limit') { should == 5 }
|
198
|
-
its('query.offset') { should == 10 }
|
199
|
-
its(:total_count) { should == 30 }
|
200
|
-
its(:total_pages) { should == 6 }
|
201
|
-
end
|
202
|
-
end
|
203
|
-
end
|
204
|
-
end
|
205
|
-
end
|
@@ -1,84 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
if defined? MongoMapper
|
4
|
-
describe Kaminari::MongoMapperExtension do
|
5
|
-
before(:each) do
|
6
|
-
User.destroy_all
|
7
|
-
41.times { User.create!({:salary => 1}) }
|
8
|
-
end
|
9
|
-
|
10
|
-
describe '#page' do
|
11
|
-
context 'page 1' do
|
12
|
-
subject { User.page(1) }
|
13
|
-
it { should be_a Plucky::Query }
|
14
|
-
its(:current_page) { should == 1 }
|
15
|
-
its(:prev_page) { should be_nil }
|
16
|
-
its(:next_page) { should == 2 }
|
17
|
-
its(:limit_value) { should == 25 }
|
18
|
-
its(:total_pages) { should == 2 }
|
19
|
-
it { should skip(0) }
|
20
|
-
end
|
21
|
-
|
22
|
-
context 'page 2' do
|
23
|
-
subject { User.page 2 }
|
24
|
-
it { should be_a Plucky::Query }
|
25
|
-
its(:current_page) { should == 2 }
|
26
|
-
its(:prev_page) { should == 1 }
|
27
|
-
its(:next_page) { should be_nil }
|
28
|
-
its(:limit_value) { should == 25 }
|
29
|
-
its(:total_pages) { should == 2 }
|
30
|
-
it { should skip 25 }
|
31
|
-
end
|
32
|
-
|
33
|
-
context 'page "foobar"' do
|
34
|
-
subject { User.page 'foobar' }
|
35
|
-
it { should be_a Plucky::Query }
|
36
|
-
its(:current_page) { should == 1 }
|
37
|
-
its(:prev_page) { should be_nil }
|
38
|
-
its(:next_page) { should == 2 }
|
39
|
-
its(:limit_value) { should == 25 }
|
40
|
-
its(:total_pages) { should == 2 }
|
41
|
-
it { should skip 0 }
|
42
|
-
end
|
43
|
-
|
44
|
-
context 'with criteria before' do
|
45
|
-
it "should have the proper criteria source" do
|
46
|
-
User.where(:salary => 1).page(2).criteria.source.should == {:salary => 1}
|
47
|
-
end
|
48
|
-
|
49
|
-
subject { User.where(:salary => 1).page 2 }
|
50
|
-
its(:current_page) { should == 2 }
|
51
|
-
its(:prev_page) { should == 1 }
|
52
|
-
its(:next_page) { should be_nil }
|
53
|
-
its(:limit_value) { should == 25 }
|
54
|
-
its(:total_pages) { should == 2 }
|
55
|
-
it { should skip 25 }
|
56
|
-
end
|
57
|
-
|
58
|
-
context 'with criteria after' do
|
59
|
-
it "should have the proper criteria source" do
|
60
|
-
User.where(:salary => 1).page(2).criteria.source.should == {:salary => 1}
|
61
|
-
end
|
62
|
-
|
63
|
-
subject { User.page(2).where(:salary => 1) }
|
64
|
-
its(:current_page) { should == 2 }
|
65
|
-
its(:prev_page) { should == 1 }
|
66
|
-
its(:next_page) { should be_nil }
|
67
|
-
its(:limit_value) { should == 25 }
|
68
|
-
its(:total_pages) { should == 2 }
|
69
|
-
it { should skip 25 }
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
describe '#per' do
|
74
|
-
subject { User.page(2).per(10) }
|
75
|
-
it { should be_a Plucky::Query }
|
76
|
-
its(:current_page) { should == 2 }
|
77
|
-
its(:prev_page) { should == 1 }
|
78
|
-
its(:next_page) { should == 3 }
|
79
|
-
its(:limit_value) { should == 10 }
|
80
|
-
its(:total_pages) { should == 5 }
|
81
|
-
it { should skip 10 }
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
@@ -1,228 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
if defined? Mongoid
|
4
|
-
describe Kaminari::MongoidCriteriaMethods do
|
5
|
-
describe "#total_count" do
|
6
|
-
before do
|
7
|
-
2.times {|i| User.create!(:salary => i) }
|
8
|
-
end
|
9
|
-
|
10
|
-
context "when the scope is cloned" do
|
11
|
-
it "should reset total_coount momoization" do
|
12
|
-
User.page.tap(&:total_count).where(:salary => 1).total_count.should == 1
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
describe Kaminari::MongoidExtension do
|
19
|
-
before(:each) do
|
20
|
-
41.times do
|
21
|
-
User.create!({:salary => 1})
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
describe 'max_scan', :if => Mongoid::VERSION >= '3' do
|
26
|
-
context 'less than total' do
|
27
|
-
context 'page 1' do
|
28
|
-
subject { User.max_scan(20).page 1 }
|
29
|
-
it { should be_a Mongoid::Criteria }
|
30
|
-
its(:current_page) { should == 1 }
|
31
|
-
its(:prev_page) { should be_nil }
|
32
|
-
its(:next_page) { should be_nil }
|
33
|
-
its(:limit_value) { should == 25 }
|
34
|
-
its(:total_pages) { should == 1 }
|
35
|
-
its(:total_count) { should == 20 }
|
36
|
-
it { should skip(0) }
|
37
|
-
end
|
38
|
-
|
39
|
-
context 'page 2' do
|
40
|
-
subject { User.max_scan(30).page 2 }
|
41
|
-
it { should be_a Mongoid::Criteria }
|
42
|
-
its(:current_page) { should == 2 }
|
43
|
-
its(:prev_page) { should == 1 }
|
44
|
-
its(:next_page) { should be_nil }
|
45
|
-
its(:limit_value) { should == 25 }
|
46
|
-
its(:total_pages) { should == 2 }
|
47
|
-
its(:total_count) { should == 30 }
|
48
|
-
it { should skip 25 }
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
context 'more than total' do
|
53
|
-
context 'page 1' do
|
54
|
-
subject { User.max_scan(60).page 1 }
|
55
|
-
it { should be_a Mongoid::Criteria }
|
56
|
-
its(:current_page) { should == 1 }
|
57
|
-
its(:prev_page) { should be_nil }
|
58
|
-
its(:next_page) { should == 2 }
|
59
|
-
its(:limit_value) { should == 25 }
|
60
|
-
its(:total_pages) { should == 2 }
|
61
|
-
its(:total_count) { should == 41 }
|
62
|
-
it { should skip(0) }
|
63
|
-
end
|
64
|
-
|
65
|
-
context 'page 2' do
|
66
|
-
subject { User.max_scan(60).page 2 }
|
67
|
-
it { should be_a Mongoid::Criteria }
|
68
|
-
its(:current_page) { should == 2 }
|
69
|
-
its(:prev_page) { should == 1 }
|
70
|
-
its(:next_page) { should be_nil }
|
71
|
-
its(:limit_value) { should == 25 }
|
72
|
-
its(:total_pages) { should == 2 }
|
73
|
-
its(:total_count) { should == 41 }
|
74
|
-
it { should skip 25 }
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
describe '#page' do
|
80
|
-
|
81
|
-
context 'page 1' do
|
82
|
-
subject { User.page 1 }
|
83
|
-
it { should be_a Mongoid::Criteria }
|
84
|
-
its(:current_page) { should == 1 }
|
85
|
-
its(:prev_page) { should be_nil }
|
86
|
-
its(:next_page) { should == 2 }
|
87
|
-
its(:limit_value) { should == 25 }
|
88
|
-
its(:total_pages) { should == 2 }
|
89
|
-
it { should skip(0) }
|
90
|
-
end
|
91
|
-
|
92
|
-
context 'page 2' do
|
93
|
-
subject { User.page 2 }
|
94
|
-
it { should be_a Mongoid::Criteria }
|
95
|
-
its(:current_page) { should == 2 }
|
96
|
-
its(:prev_page) { should == 1 }
|
97
|
-
its(:next_page) { should be_nil }
|
98
|
-
its(:limit_value) { should == 25 }
|
99
|
-
its(:total_pages) { should == 2 }
|
100
|
-
it { should skip 25 }
|
101
|
-
end
|
102
|
-
|
103
|
-
context 'page "foobar"' do
|
104
|
-
subject { User.page 'foobar' }
|
105
|
-
it { should be_a Mongoid::Criteria }
|
106
|
-
its(:current_page) { should == 1 }
|
107
|
-
its(:prev_page) { should be_nil }
|
108
|
-
its(:next_page) { should == 2 }
|
109
|
-
its(:limit_value) { should == 25 }
|
110
|
-
its(:total_pages) { should == 2 }
|
111
|
-
it { should skip 0 }
|
112
|
-
end
|
113
|
-
|
114
|
-
shared_examples 'complete valid pagination' do
|
115
|
-
if Mongoid::VERSION > '3.0.0'
|
116
|
-
its(:selector) { should == {'salary' => 1} }
|
117
|
-
else
|
118
|
-
its(:selector) { should == {:salary => 1} }
|
119
|
-
end
|
120
|
-
its(:current_page) { should == 2 }
|
121
|
-
its(:prev_page) { should == 1 }
|
122
|
-
its(:next_page) { should be_nil }
|
123
|
-
its(:limit_value) { should == 25 }
|
124
|
-
its(:total_pages) { should == 2 }
|
125
|
-
it { should skip 25 }
|
126
|
-
end
|
127
|
-
|
128
|
-
context 'with criteria before' do
|
129
|
-
subject { User.where(:salary => 1).page 2 }
|
130
|
-
it_should_behave_like 'complete valid pagination'
|
131
|
-
end
|
132
|
-
|
133
|
-
context 'with criteria after' do
|
134
|
-
subject { User.page(2).where(:salary => 1) }
|
135
|
-
it_should_behave_like 'complete valid pagination'
|
136
|
-
end
|
137
|
-
|
138
|
-
context "with database:", :if => Mongoid::VERSION >= '3' do
|
139
|
-
before :all do
|
140
|
-
15.times { User.with(:database => "default_db").create!(:salary => 1) }
|
141
|
-
10.times { User.with(:database => "other_db").create!(:salary => 1) }
|
142
|
-
end
|
143
|
-
|
144
|
-
context "default_db" do
|
145
|
-
subject { User.with(:database => "default_db").order_by(:artist.asc).page(1) }
|
146
|
-
its(:total_count) { should == 15 }
|
147
|
-
end
|
148
|
-
|
149
|
-
context "other_db" do
|
150
|
-
subject { User.with(:database => "other_db").order_by(:artist.asc).page(1) }
|
151
|
-
its(:total_count) { should == 10 }
|
152
|
-
end
|
153
|
-
end
|
154
|
-
end
|
155
|
-
|
156
|
-
describe '#per' do
|
157
|
-
subject { User.page(2).per(10) }
|
158
|
-
it { should be_a Mongoid::Criteria }
|
159
|
-
its(:current_page) { should == 2 }
|
160
|
-
its(:prev_page) { should == 1 }
|
161
|
-
its(:next_page) { should == 3 }
|
162
|
-
its(:limit_value) { should == 10 }
|
163
|
-
its(:total_pages) { should == 5 }
|
164
|
-
it { should skip 10 }
|
165
|
-
end
|
166
|
-
|
167
|
-
describe '#page in embedded documents' do
|
168
|
-
before do
|
169
|
-
@mongo_developer = MongoMongoidExtensionDeveloper.new
|
170
|
-
@mongo_developer.frameworks.new(:name => "rails", :language => "ruby")
|
171
|
-
@mongo_developer.frameworks.new(:name => "merb", :language => "ruby")
|
172
|
-
@mongo_developer.frameworks.new(:name => "sinatra", :language => "ruby")
|
173
|
-
@mongo_developer.frameworks.new(:name => "cakephp", :language => "php")
|
174
|
-
@mongo_developer.frameworks.new(:name => "tornado", :language => "python")
|
175
|
-
end
|
176
|
-
|
177
|
-
context 'page 1' do
|
178
|
-
subject { @mongo_developer.frameworks.page(1).per(1) }
|
179
|
-
it { should be_a Mongoid::Criteria }
|
180
|
-
its(:total_count) { should == 5 }
|
181
|
-
its(:limit_value) { should == 1 }
|
182
|
-
its(:current_page) { should == 1 }
|
183
|
-
its(:prev_page) { should be_nil }
|
184
|
-
its(:next_page) { should == 2 }
|
185
|
-
its(:total_pages) { should == 5 }
|
186
|
-
end
|
187
|
-
|
188
|
-
context 'with criteria after' do
|
189
|
-
subject { @mongo_developer.frameworks.page(1).per(2).where(:language => "ruby") }
|
190
|
-
it { should be_a Mongoid::Criteria }
|
191
|
-
its(:total_count) { should == 3 }
|
192
|
-
its(:limit_value) { should == 2 }
|
193
|
-
its(:current_page) { should == 1 }
|
194
|
-
its(:prev_page) { should be_nil }
|
195
|
-
its(:next_page) { should == 2 }
|
196
|
-
its(:total_pages) { should == 2 }
|
197
|
-
end
|
198
|
-
|
199
|
-
context 'with criteria before' do
|
200
|
-
subject { @mongo_developer.frameworks.where(:language => "ruby").page(1).per(2) }
|
201
|
-
it { should be_a Mongoid::Criteria }
|
202
|
-
its(:total_count) { should == 3 }
|
203
|
-
its(:limit_value) { should == 2 }
|
204
|
-
its(:current_page) { should == 1 }
|
205
|
-
its(:prev_page) { should be_nil }
|
206
|
-
its(:next_page) { should == 2 }
|
207
|
-
its(:total_pages) { should == 2 }
|
208
|
-
end
|
209
|
-
end
|
210
|
-
|
211
|
-
describe '#paginates_per' do
|
212
|
-
context 'when paginates_per is not defined in superclass' do
|
213
|
-
subject { Product.all.page 1 }
|
214
|
-
its(:limit_value) { should == 25 }
|
215
|
-
end
|
216
|
-
|
217
|
-
context 'when paginates_per is defined in subclass' do
|
218
|
-
subject { Device.all.page 1 }
|
219
|
-
its(:limit_value) { should == 100 }
|
220
|
-
end
|
221
|
-
|
222
|
-
context 'when paginates_per is defined in subclass of subclass' do
|
223
|
-
subject { Android.all.page 1 }
|
224
|
-
its(:limit_value) { should == 200 }
|
225
|
-
end
|
226
|
-
end
|
227
|
-
end
|
228
|
-
end
|