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.

Files changed (113) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -1
  3. data/.travis.yml +20 -39
  4. data/CHANGELOG.md +560 -0
  5. data/CONTRIBUTING.md +16 -0
  6. data/Gemfile +1 -0
  7. data/README.md +545 -0
  8. data/Rakefile +21 -24
  9. data/gemfiles/active_record_41.gemfile +2 -4
  10. data/gemfiles/active_record_42.gemfile +2 -4
  11. data/gemfiles/active_record_50.gemfile +20 -0
  12. data/gemfiles/active_record_edge.gemfile +5 -6
  13. data/kaminari.gemspec +11 -17
  14. data/lib/kaminari.rb +4 -39
  15. data/lib/kaminari/version.rb +2 -1
  16. metadata +44 -186
  17. data/.gemtest +0 -0
  18. data/.rspec +0 -2
  19. data/CHANGELOG.rdoc +0 -480
  20. data/README.rdoc +0 -336
  21. data/app/views/kaminari/_first_page.html.erb +0 -11
  22. data/app/views/kaminari/_first_page.html.haml +0 -9
  23. data/app/views/kaminari/_first_page.html.slim +0 -10
  24. data/app/views/kaminari/_gap.html.erb +0 -8
  25. data/app/views/kaminari/_gap.html.haml +0 -8
  26. data/app/views/kaminari/_gap.html.slim +0 -9
  27. data/app/views/kaminari/_last_page.html.erb +0 -11
  28. data/app/views/kaminari/_last_page.html.haml +0 -9
  29. data/app/views/kaminari/_last_page.html.slim +0 -10
  30. data/app/views/kaminari/_next_page.html.erb +0 -11
  31. data/app/views/kaminari/_next_page.html.haml +0 -9
  32. data/app/views/kaminari/_next_page.html.slim +0 -10
  33. data/app/views/kaminari/_page.html.erb +0 -12
  34. data/app/views/kaminari/_page.html.haml +0 -10
  35. data/app/views/kaminari/_page.html.slim +0 -11
  36. data/app/views/kaminari/_paginator.html.erb +0 -23
  37. data/app/views/kaminari/_paginator.html.haml +0 -18
  38. data/app/views/kaminari/_paginator.html.slim +0 -19
  39. data/app/views/kaminari/_prev_page.html.erb +0 -11
  40. data/app/views/kaminari/_prev_page.html.haml +0 -9
  41. data/app/views/kaminari/_prev_page.html.slim +0 -10
  42. data/config/locales/kaminari.yml +0 -19
  43. data/gemfiles/active_record_30.gemfile +0 -28
  44. data/gemfiles/active_record_31.gemfile +0 -26
  45. data/gemfiles/active_record_32.gemfile +0 -25
  46. data/gemfiles/active_record_40.gemfile +0 -26
  47. data/gemfiles/data_mapper_12.gemfile +0 -32
  48. data/gemfiles/mongo_mapper.gemfile +0 -25
  49. data/gemfiles/mongoid_30.gemfile +0 -22
  50. data/gemfiles/mongoid_31.gemfile +0 -21
  51. data/gemfiles/mongoid_40.gemfile +0 -19
  52. data/gemfiles/mongoid_50.gemfile +0 -23
  53. data/gemfiles/sinatra_13.gemfile +0 -36
  54. data/gemfiles/sinatra_14.gemfile +0 -33
  55. data/lib/generators/kaminari/config_generator.rb +0 -16
  56. data/lib/generators/kaminari/templates/kaminari_config.rb +0 -10
  57. data/lib/generators/kaminari/views_generator.rb +0 -119
  58. data/lib/kaminari/config.rb +0 -51
  59. data/lib/kaminari/engine.rb +0 -4
  60. data/lib/kaminari/grape.rb +0 -4
  61. data/lib/kaminari/helpers/action_view_extension.rb +0 -132
  62. data/lib/kaminari/helpers/paginator.rb +0 -195
  63. data/lib/kaminari/helpers/sinatra_helpers.rb +0 -176
  64. data/lib/kaminari/helpers/tags.rb +0 -108
  65. data/lib/kaminari/hooks.rb +0 -53
  66. data/lib/kaminari/models/active_record_extension.rb +0 -22
  67. data/lib/kaminari/models/active_record_model_extension.rb +0 -22
  68. data/lib/kaminari/models/active_record_relation_methods.rb +0 -42
  69. data/lib/kaminari/models/array_extension.rb +0 -66
  70. data/lib/kaminari/models/configuration_methods.rb +0 -48
  71. data/lib/kaminari/models/data_mapper_collection_methods.rb +0 -19
  72. data/lib/kaminari/models/data_mapper_extension.rb +0 -51
  73. data/lib/kaminari/models/mongo_mapper_extension.rb +0 -18
  74. data/lib/kaminari/models/mongoid_criteria_methods.rb +0 -40
  75. data/lib/kaminari/models/mongoid_extension.rb +0 -26
  76. data/lib/kaminari/models/page_scope_methods.rb +0 -73
  77. data/lib/kaminari/models/plucky_criteria_methods.rb +0 -23
  78. data/lib/kaminari/railtie.rb +0 -7
  79. data/lib/kaminari/sinatra.rb +0 -7
  80. data/spec/config/config_spec.rb +0 -91
  81. data/spec/fake_app/active_record/config.rb +0 -3
  82. data/spec/fake_app/active_record/models.rb +0 -65
  83. data/spec/fake_app/data_mapper/config.rb +0 -1
  84. data/spec/fake_app/data_mapper/models.rb +0 -27
  85. data/spec/fake_app/mongo_mapper/config.rb +0 -2
  86. data/spec/fake_app/mongo_mapper/models.rb +0 -9
  87. data/spec/fake_app/mongoid/config.rb +0 -20
  88. data/spec/fake_app/mongoid/models.rb +0 -38
  89. data/spec/fake_app/rails_app.rb +0 -56
  90. data/spec/fake_app/sinatra_app.rb +0 -22
  91. data/spec/fake_app/views/alternative/kaminari/_first_page.html.erb +0 -1
  92. data/spec/fake_app/views/alternative/kaminari/_paginator.html.erb +0 -3
  93. data/spec/fake_app/views/kaminari/bootstrap/_page.html.erb +0 -1
  94. data/spec/fake_app/views/kaminari/bootstrap/_paginator.html.erb +0 -7
  95. data/spec/fake_gem.rb +0 -20
  96. data/spec/generators/views_generator_spec.rb +0 -18
  97. data/spec/helpers/action_view_extension_spec.rb +0 -318
  98. data/spec/helpers/helpers_spec.rb +0 -144
  99. data/spec/helpers/sinatra_helpers_spec.rb +0 -223
  100. data/spec/helpers/tags_spec.rb +0 -140
  101. data/spec/models/active_record/active_record_relation_methods_spec.rb +0 -77
  102. data/spec/models/active_record/inherited_spec.rb +0 -9
  103. data/spec/models/active_record/scopes_spec.rb +0 -265
  104. data/spec/models/array_spec.rb +0 -172
  105. data/spec/models/configuration_methods_spec.rb +0 -125
  106. data/spec/models/data_mapper/data_mapper_spec.rb +0 -205
  107. data/spec/models/mongo_mapper/mongo_mapper_spec.rb +0 -84
  108. data/spec/models/mongoid/mongoid_spec.rb +0 -228
  109. data/spec/requests/users_spec.rb +0 -53
  110. data/spec/spec_helper.rb +0 -34
  111. data/spec/spec_helper_for_sinatra.rb +0 -34
  112. data/spec/support/database_cleaner.rb +0 -19
  113. 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