will_paginate 3.2.0 → 4.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -5
  3. data/lib/will_paginate/active_record.rb +3 -3
  4. data/lib/will_paginate/i18n.rb +3 -3
  5. data/lib/will_paginate/locale/en.yml +2 -0
  6. data/lib/will_paginate/page_number.rb +1 -2
  7. data/lib/will_paginate/railtie.rb +2 -2
  8. data/lib/will_paginate/version.rb +2 -2
  9. data/lib/will_paginate/view_helpers/action_view.rb +7 -3
  10. data/lib/will_paginate/view_helpers/link_renderer.rb +7 -5
  11. data/lib/will_paginate.rb +0 -12
  12. metadata +12 -49
  13. data/lib/will_paginate/data_mapper.rb +0 -100
  14. data/lib/will_paginate/view_helpers/merb.rb +0 -26
  15. data/spec/collection_spec.rb +0 -139
  16. data/spec/console +0 -12
  17. data/spec/console_fixtures.rb +0 -28
  18. data/spec/database.yml +0 -29
  19. data/spec/fake_rubygems.rb +0 -18
  20. data/spec/finders/active_record_spec.rb +0 -417
  21. data/spec/finders/activerecord_test_connector.rb +0 -140
  22. data/spec/finders/data_mapper_spec.rb +0 -114
  23. data/spec/finders/data_mapper_test_connector.rb +0 -54
  24. data/spec/finders/mongoid_spec.rb +0 -145
  25. data/spec/finders/sequel_spec.rb +0 -65
  26. data/spec/finders/sequel_test_connector.rb +0 -15
  27. data/spec/fixtures/admin.rb +0 -3
  28. data/spec/fixtures/developer.rb +0 -9
  29. data/spec/fixtures/developers_projects.yml +0 -13
  30. data/spec/fixtures/project.rb +0 -13
  31. data/spec/fixtures/projects.yml +0 -6
  32. data/spec/fixtures/replies.yml +0 -29
  33. data/spec/fixtures/reply.rb +0 -8
  34. data/spec/fixtures/schema.rb +0 -38
  35. data/spec/fixtures/topic.rb +0 -8
  36. data/spec/fixtures/topics.yml +0 -30
  37. data/spec/fixtures/user.rb +0 -2
  38. data/spec/fixtures/users.yml +0 -35
  39. data/spec/matchers/deprecation_matcher.rb +0 -27
  40. data/spec/matchers/phrase_matcher.rb +0 -19
  41. data/spec/matchers/query_count_matcher.rb +0 -36
  42. data/spec/page_number_spec.rb +0 -82
  43. data/spec/per_page_spec.rb +0 -41
  44. data/spec/spec_helper.rb +0 -46
  45. data/spec/view_helpers/action_view_spec.rb +0 -480
  46. data/spec/view_helpers/base_spec.rb +0 -143
  47. data/spec/view_helpers/link_renderer_base_spec.rb +0 -87
  48. data/spec/view_helpers/view_example_group.rb +0 -146
@@ -1,417 +0,0 @@
1
- require 'spec_helper'
2
- require 'will_paginate/active_record'
3
- require File.expand_path('../activerecord_test_connector', __FILE__)
4
-
5
- ActiverecordTestConnector.setup
6
-
7
- describe WillPaginate::ActiveRecord do
8
-
9
- extend ActiverecordTestConnector::FixtureSetup
10
-
11
- fixtures :topics, :replies, :users, :projects, :developers_projects
12
-
13
- it "should integrate with ActiveRecord::Base" do
14
- ActiveRecord::Base.should respond_to(:paginate)
15
- end
16
-
17
- it "should paginate" do
18
- lambda {
19
- users = User.paginate(:page => 1, :per_page => 5).to_a
20
- users.length.should == 5
21
- }.should run_queries(2)
22
- end
23
-
24
- it "should fail when encountering unknown params" do
25
- lambda {
26
- User.paginate :foo => 'bar', :page => 1, :per_page => 4
27
- }.should raise_error(ArgumentError)
28
- end
29
-
30
- describe "relation" do
31
- it "should return a relation" do
32
- rel = nil
33
- lambda {
34
- rel = Developer.paginate(:page => 1)
35
- rel.per_page.should == 10
36
- rel.current_page.should == 1
37
- }.should run_queries(0)
38
-
39
- lambda {
40
- rel.total_pages.should == 2
41
- }.should run_queries(1)
42
- end
43
-
44
- it "should keep per-class per_page number" do
45
- rel = Developer.order('id').paginate(:page => 1)
46
- rel.per_page.should == 10
47
- end
48
-
49
- it "should be able to change per_page number" do
50
- rel = Developer.order('id').paginate(:page => 1).limit(5)
51
- rel.per_page.should == 5
52
- end
53
-
54
- it "remembers pagination in sub-relations" do
55
- rel = Topic.paginate(:page => 2, :per_page => 3)
56
- lambda {
57
- rel.total_entries.should == 4
58
- }.should run_queries(1)
59
- rel = rel.mentions_activerecord
60
- rel.current_page.should == 2
61
- rel.per_page.should == 3
62
- lambda {
63
- rel.total_entries.should == 1
64
- }.should run_queries(1)
65
- end
66
-
67
- it "supports the page() method" do
68
- rel = Developer.page('1').order('id')
69
- rel.current_page.should == 1
70
- rel.per_page.should == 10
71
- rel.offset.should == 0
72
-
73
- rel = rel.limit(5).page(2)
74
- rel.per_page.should == 5
75
- rel.offset.should == 5
76
- end
77
-
78
- it "raises on invalid page number" do
79
- lambda {
80
- Developer.page('foo')
81
- }.should raise_error(ArgumentError)
82
- end
83
-
84
- it "supports first limit() then page()" do
85
- rel = Developer.limit(3).page(3)
86
- rel.offset.should == 6
87
- end
88
-
89
- it "supports first page() then limit()" do
90
- rel = Developer.page(3).limit(3)
91
- rel.offset.should == 6
92
- end
93
-
94
- it "supports #first" do
95
- rel = Developer.order('id').page(2).per_page(4)
96
- rel.first.should == users(:dev_5)
97
- rel.first(2).should == users(:dev_5, :dev_6)
98
- end
99
-
100
- it "supports #last" do
101
- rel = Developer.order('id').page(2).per_page(4)
102
- rel.last.should == users(:dev_8)
103
- rel.last(2).should == users(:dev_7, :dev_8)
104
- rel.page(3).last.should == users(:poor_jamis)
105
- end
106
- end
107
-
108
- describe "counting" do
109
- it "should guess the total count" do
110
- lambda {
111
- topics = Topic.paginate :page => 2, :per_page => 3
112
- topics.total_entries.should == 4
113
- }.should run_queries(1)
114
- end
115
-
116
- it "should guess that there are no records" do
117
- lambda {
118
- topics = Topic.where(:project_id => 999).paginate :page => 1, :per_page => 3
119
- topics.total_entries.should == 0
120
- }.should run_queries(1)
121
- end
122
-
123
- it "forgets count in sub-relations" do
124
- lambda {
125
- topics = Topic.paginate :page => 1, :per_page => 3
126
- topics.total_entries.should == 4
127
- topics.where('1 = 1').total_entries.should == 4
128
- }.should run_queries(2)
129
- end
130
-
131
- it "supports empty? method" do
132
- topics = Topic.paginate :page => 1, :per_page => 3
133
- lambda {
134
- topics.should_not be_empty
135
- }.should run_queries(1)
136
- end
137
-
138
- it "support empty? for grouped queries" do
139
- topics = Topic.group(:project_id).paginate :page => 1, :per_page => 3
140
- lambda {
141
- topics.should_not be_empty
142
- }.should run_queries(1)
143
- end
144
-
145
- it "supports `size` for grouped queries" do
146
- topics = Topic.group(:project_id).paginate :page => 1, :per_page => 3
147
- lambda {
148
- topics.size.should == {nil=>2, 1=>2}
149
- }.should run_queries(1)
150
- end
151
-
152
- it "overrides total_entries count with a fixed value" do
153
- lambda {
154
- topics = Topic.paginate :page => 1, :per_page => 3, :total_entries => 999
155
- topics.total_entries.should == 999
156
- # value is kept even in sub-relations
157
- topics.where('1 = 1').total_entries.should == 999
158
- }.should run_queries(0)
159
- end
160
-
161
- it "supports a non-int for total_entries" do
162
- topics = Topic.paginate :page => 1, :per_page => 3, :total_entries => "999"
163
- topics.total_entries.should == 999
164
- end
165
-
166
- it "removes :include for count" do
167
- lambda {
168
- developers = Developer.paginate(:page => 1, :per_page => 1).includes(:projects)
169
- developers.total_entries.should == 11
170
- $query_sql.last.should_not =~ /\bJOIN\b/
171
- }.should run_queries(1)
172
- end
173
-
174
- it "keeps :include for count when they are referenced in :conditions" do
175
- developers = Developer.paginate(:page => 1, :per_page => 1).includes(:projects)
176
- with_condition = developers.where('projects.id > 1')
177
- with_condition = with_condition.references(:projects) if with_condition.respond_to?(:references)
178
- with_condition.total_entries.should == 1
179
-
180
- $query_sql.last.should =~ /\bJOIN\b/
181
- end
182
-
183
- it "should count with group" do
184
- Developer.group(:salary).page(1).total_entries.should == 4
185
- end
186
-
187
- it "should count with select" do
188
- Topic.select('title, content').page(1).total_entries.should == 4
189
- end
190
-
191
- it "removes :reorder for count with group" do
192
- Project.group(:id).reorder(:id).page(1).total_entries
193
- $query_sql.last.should_not =~ /\ORDER\b/
194
- end
195
-
196
- it "should not have zero total_pages when the result set is empty" do
197
- Developer.where("1 = 2").page(1).total_pages.should == 1
198
- end
199
- end
200
-
201
- it "should not ignore :select parameter when it says DISTINCT" do
202
- users = User.select('DISTINCT salary').paginate :page => 2
203
- users.total_entries.should == 5
204
- end
205
-
206
- describe "paginate_by_sql" do
207
- it "should respond" do
208
- User.should respond_to(:paginate_by_sql)
209
- end
210
-
211
- it "should paginate" do
212
- lambda {
213
- sql = "select content from topics where content like '%futurama%'"
214
- topics = Topic.paginate_by_sql sql, :page => 1, :per_page => 1
215
- topics.total_entries.should == 1
216
- topics.first.attributes.has_key?('title').should be_false
217
- }.should run_queries(2)
218
- end
219
-
220
- it "should respect total_entries setting" do
221
- lambda {
222
- sql = "select content from topics"
223
- topics = Topic.paginate_by_sql sql, :page => 1, :per_page => 1, :total_entries => 999
224
- topics.total_entries.should == 999
225
- }.should run_queries(1)
226
- end
227
-
228
- it "defaults to page 1" do
229
- sql = "select content from topics"
230
- topics = Topic.paginate_by_sql sql, :page => nil, :per_page => 1
231
- topics.current_page.should == 1
232
- topics.size.should == 1
233
- end
234
-
235
- it "should strip the order when counting" do
236
- expected = topics(:ar)
237
- lambda {
238
- sql = "select id, title, content from topics order by topics.title"
239
- topics = Topic.paginate_by_sql sql, :page => 1, :per_page => 2
240
- topics.first.should == expected
241
- }.should run_queries(2)
242
-
243
- $query_sql.last.should include('COUNT')
244
- $query_sql.last.should_not include('order by topics.title')
245
- end
246
-
247
- it "shouldn't change the original query string" do
248
- query = 'select * from topics where 1 = 2'
249
- original_query = query.dup
250
- Topic.paginate_by_sql(query, :page => 1)
251
- query.should == original_query
252
- end
253
- end
254
-
255
- it "doesn't mangle options" do
256
- options = { :page => 1 }
257
- options.expects(:delete).never
258
- options_before = options.dup
259
-
260
- Topic.paginate(options)
261
- options.should == options_before
262
- end
263
-
264
- it "should get first page of Topics with a single query" do
265
- lambda {
266
- result = Topic.paginate :page => nil
267
- result.to_a # trigger loading of records
268
- result.current_page.should == 1
269
- result.total_pages.should == 1
270
- result.size.should == 4
271
- }.should run_queries(1)
272
- end
273
-
274
- it "should get second (inexistent) page of Topics, requiring 2 queries" do
275
- lambda {
276
- result = Topic.paginate :page => 2
277
- result.total_pages.should == 1
278
- result.should be_empty
279
- }.should run_queries(2)
280
- end
281
-
282
- describe "associations" do
283
- it "should paginate" do
284
- dhh = users(:david)
285
- expected_name_ordered = projects(:action_controller, :active_record)
286
- expected_id_ordered = projects(:active_record, :action_controller)
287
-
288
- lambda {
289
- # with association-specified order
290
- result = ignore_deprecation {
291
- dhh.projects.includes(:topics).order('projects.name').paginate(:page => 1)
292
- }
293
- result.to_a.should == expected_name_ordered
294
- result.total_entries.should == 2
295
- }.should run_queries(2)
296
-
297
- # with explicit order
298
- result = dhh.projects.paginate(:page => 1).reorder('projects.id')
299
- result.should == expected_id_ordered
300
- result.total_entries.should == 2
301
-
302
- lambda {
303
- dhh.projects.order('projects.id').limit(4).to_a
304
- }.should_not raise_error
305
-
306
- result = dhh.projects.paginate(:page => 1, :per_page => 4).reorder('projects.id')
307
- result.should == expected_id_ordered
308
-
309
- # has_many with implicit order
310
- topic = Topic.find(1)
311
- expected = replies(:spam, :witty_retort)
312
- # FIXME: wow, this is ugly
313
- topic.replies.paginate(:page => 1).map(&:id).sort.should == expected.map(&:id).sort
314
- topic.replies.paginate(:page => 1).reorder('replies.id ASC').should == expected.reverse
315
- end
316
-
317
- it "should paginate through association extension" do
318
- project = Project.order('id').first
319
- expected = [replies(:brave)]
320
-
321
- lambda {
322
- result = project.replies.only_recent.paginate(:page => 1)
323
- result.should == expected
324
- }.should run_queries(1)
325
- end
326
- end
327
-
328
- it "should paginate with joins" do
329
- result = nil
330
- join_sql = 'LEFT JOIN developers_projects ON users.id = developers_projects.developer_id'
331
-
332
- lambda {
333
- result = Developer.where('developers_projects.project_id = 1').joins(join_sql).paginate(:page => 1)
334
- result.to_a # trigger loading of records
335
- result.size.should == 2
336
- developer_names = result.map(&:name)
337
- developer_names.should include('David')
338
- developer_names.should include('Jamis')
339
- }.should run_queries(1)
340
-
341
- lambda {
342
- expected = result.to_a
343
- result = Developer.where('developers_projects.project_id = 1').joins(join_sql).paginate(:page => 1)
344
- result.should == expected
345
- result.total_entries.should == 2
346
- }.should run_queries(1)
347
- end
348
-
349
- it "should paginate with group" do
350
- result = nil
351
- lambda {
352
- result = Developer.select('salary').order('salary').group('salary').
353
- paginate(:page => 1, :per_page => 10).to_a
354
- }.should run_queries(1)
355
-
356
- expected = users(:david, :jamis, :dev_10, :poor_jamis).map(&:salary).sort
357
- result.map(&:salary).should == expected
358
- end
359
-
360
- it "should not paginate with dynamic finder" do
361
- lambda {
362
- Developer.paginate_by_salary(100000, :page => 1, :per_page => 5)
363
- }.should raise_error(NoMethodError)
364
- end
365
-
366
- describe "scopes" do
367
- it "should paginate" do
368
- result = Developer.poor.paginate :page => 1, :per_page => 1
369
- result.size.should == 1
370
- result.total_entries.should == 2
371
- end
372
-
373
- it "should paginate on habtm association" do
374
- project = projects(:active_record)
375
- lambda {
376
- result = ignore_deprecation { project.developers.poor.paginate :page => 1, :per_page => 1 }
377
- result.size.should == 1
378
- result.total_entries.should == 1
379
- }.should run_queries(2)
380
- end
381
-
382
- it "should paginate on hmt association" do
383
- project = projects(:active_record)
384
- expected = [replies(:brave)]
385
-
386
- lambda {
387
- result = project.replies.recent.paginate :page => 1, :per_page => 1
388
- result.should == expected
389
- result.total_entries.should == 1
390
- }.should run_queries(2)
391
- end
392
-
393
- it "should paginate on has_many association" do
394
- project = projects(:active_record)
395
- expected = [topics(:ar)]
396
-
397
- lambda {
398
- result = project.topics.mentions_activerecord.paginate :page => 1, :per_page => 1
399
- result.should == expected
400
- result.total_entries.should == 1
401
- }.should run_queries(2)
402
- end
403
- end
404
-
405
- it "should not paginate an array of IDs" do
406
- lambda {
407
- Developer.paginate((1..8).to_a, :per_page => 3, :page => 2, :order => 'id')
408
- }.should raise_error(ArgumentError)
409
- end
410
-
411
- it "errors out for invalid values" do |variable|
412
- lambda {
413
- # page that results in an offset larger than BIGINT
414
- Project.page(307445734561825862)
415
- }.should raise_error(WillPaginate::InvalidPage, "invalid offset: 9223372036854775830")
416
- end
417
- end
@@ -1,140 +0,0 @@
1
- require 'active_record'
2
- require 'active_record/fixtures'
3
- require 'active_support/multibyte' # needed for Ruby 1.9.1
4
- require 'stringio'
5
- require 'erb'
6
-
7
- # https://travis-ci.org/mislav/will_paginate/jobs/99999001
8
- require 'active_support/core_ext/string/conversions'
9
- class String
10
- alias to_datetime_without_patch to_datetime
11
- def to_datetime
12
- to_datetime_without_patch
13
- rescue ArgumentError
14
- return nil
15
- end
16
- end
17
-
18
- $query_count = 0
19
- $query_sql = []
20
-
21
- ignore_sql = /
22
- ^(
23
- PRAGMA | SHOW\ (max_identifier_length|search_path) |
24
- SELECT\ (currval|CAST|@@IDENTITY|@@ROWCOUNT) |
25
- SHOW\ ((FULL\ )?FIELDS|TABLES)
26
- )\b |
27
- \bFROM\ (sqlite_master|pg_tables|pg_attribute)\b
28
- /x
29
-
30
- ActiveSupport::Notifications.subscribe(/^sql\./) do |*args|
31
- payload = args.last
32
- unless payload[:name] =~ /^Fixture/ or payload[:sql] =~ ignore_sql
33
- $query_count += 1
34
- $query_sql << payload[:sql]
35
- end
36
- end
37
-
38
- module ActiverecordTestConnector
39
- extend self
40
-
41
- attr_accessor :connected
42
-
43
- FIXTURES_PATH = File.expand_path('../../fixtures', __FILE__)
44
-
45
- Fixtures = defined?(ActiveRecord::FixtureSet) ? ActiveRecord::FixtureSet :
46
- defined?(ActiveRecord::Fixtures) ? ActiveRecord::Fixtures :
47
- ::Fixtures
48
-
49
- # Set our defaults
50
- self.connected = false
51
-
52
- def setup
53
- unless self.connected
54
- setup_connection
55
- load_schema
56
- add_load_path FIXTURES_PATH
57
- self.connected = true
58
- end
59
- end
60
-
61
- private
62
-
63
- def add_load_path(path)
64
- dep = defined?(ActiveSupport::Dependencies) ? ActiveSupport::Dependencies : ::Dependencies
65
- dep.autoload_paths.unshift path
66
- end
67
-
68
- def setup_connection
69
- db = ENV['DB'].blank?? 'sqlite3' : ENV['DB']
70
-
71
- erb = ERB.new(File.read(File.expand_path('../../database.yml', __FILE__)))
72
- configurations = YAML.load(erb.result)
73
- raise "no configuration for '#{db}'" unless configurations.key? db
74
- configuration = configurations[db]
75
-
76
- # ActiveRecord::Base.logger = Logger.new(STDOUT) if $0 == 'irb'
77
- puts "using #{configuration['adapter']} adapter"
78
-
79
- ActiveRecord::Base.configurations = { db => configuration }
80
- ActiveRecord::Base.establish_connection(db.to_sym)
81
- ActiveRecord::Base.default_timezone = :utc
82
-
83
- case configuration['adapter']
84
- when 'mysql'
85
- fix_primary_key(ActiveRecord::ConnectionAdapters::MysqlAdapter)
86
- when 'mysql2'
87
- fix_primary_key(ActiveRecord::ConnectionAdapters::Mysql2Adapter)
88
- end
89
- end
90
-
91
- def load_schema
92
- begin
93
- $stdout = StringIO.new
94
- ActiveRecord::Migration.verbose = false
95
- load File.join(FIXTURES_PATH, 'schema.rb')
96
- ensure
97
- $stdout = STDOUT
98
- end
99
- end
100
-
101
- def fix_primary_key(adapter_class)
102
- if ActiveRecord::VERSION::STRING < "4.1"
103
- adapter_class::NATIVE_DATABASE_TYPES[:primary_key] = "int(11) auto_increment PRIMARY KEY"
104
- end
105
- end
106
-
107
- module FixtureSetup
108
- def fixtures(*tables)
109
- table_names = tables.map { |t| t.to_s }
110
-
111
- fixtures = Fixtures.create_fixtures ActiverecordTestConnector::FIXTURES_PATH, table_names
112
- @@loaded_fixtures = {}
113
- @@fixture_cache = {}
114
-
115
- unless fixtures.nil?
116
- if fixtures.instance_of?(Fixtures)
117
- @@loaded_fixtures[fixtures.table_name] = fixtures
118
- else
119
- fixtures.each { |f| @@loaded_fixtures[f.table_name] = f }
120
- end
121
- end
122
-
123
- table_names.each do |table_name|
124
- define_method(table_name) do |*fixtures|
125
- @@fixture_cache[table_name] ||= {}
126
-
127
- instances = fixtures.map do |fixture|
128
- if @@loaded_fixtures[table_name][fixture.to_s]
129
- @@fixture_cache[table_name][fixture] ||= @@loaded_fixtures[table_name][fixture.to_s].find
130
- else
131
- raise StandardError, "No fixture with name '#{fixture}' found for table '#{table_name}'"
132
- end
133
- end
134
-
135
- instances.size == 1 ? instances.first : instances
136
- end
137
- end
138
- end
139
- end
140
- end
@@ -1,114 +0,0 @@
1
- require 'spec_helper'
2
-
3
- if !ENV['SKIP_NONRAILS_TESTS']
4
- require 'will_paginate/data_mapper'
5
- require File.expand_path('../data_mapper_test_connector', __FILE__)
6
- datamapper_loaded = true
7
- else
8
- datamapper_loaded = false
9
- end
10
-
11
- describe WillPaginate::DataMapper do
12
-
13
- it "has per_page" do
14
- Animal.per_page.should == 30
15
- begin
16
- Animal.per_page = 10
17
- Animal.per_page.should == 10
18
-
19
- subclass = Class.new(Animal)
20
- subclass.per_page.should == 10
21
- ensure
22
- Animal.per_page = 30
23
- end
24
- end
25
-
26
- it "doesn't make normal collections appear paginated" do
27
- Animal.all.should_not be_paginated
28
- end
29
-
30
- it "paginates to first page by default" do
31
- animals = Animal.paginate(:page => nil)
32
-
33
- animals.should be_paginated
34
- animals.current_page.should == 1
35
- animals.per_page.should == 30
36
- animals.offset.should == 0
37
- animals.total_entries.should == 3
38
- animals.total_pages.should == 1
39
- end
40
-
41
- it "paginates to first page, explicit limit" do
42
- animals = Animal.paginate(:page => 1, :per_page => 2)
43
-
44
- animals.current_page.should == 1
45
- animals.per_page.should == 2
46
- animals.total_entries.should == 3
47
- animals.total_pages.should == 2
48
- animals.map {|a| a.name }.should == %w[ Dog Cat ]
49
- end
50
-
51
- it "paginates to second page" do
52
- animals = Animal.paginate(:page => 2, :per_page => 2)
53
-
54
- animals.current_page.should == 2
55
- animals.offset.should == 2
56
- animals.map {|a| a.name }.should == %w[ Lion ]
57
- end
58
-
59
- it "paginates a collection" do
60
- friends = Animal.all(:notes.like => '%friend%')
61
- friends.paginate(:page => 1).per_page.should == 30
62
- friends.paginate(:page => 1, :per_page => 1).total_entries.should == 2
63
- end
64
-
65
- it "paginates a limited collection" do
66
- animals = Animal.all(:limit => 2).paginate(:page => 1)
67
- animals.per_page.should == 2
68
- end
69
-
70
- it "has page() method" do
71
- Animal.page(2).per_page.should == 30
72
- Animal.page(2).offset.should == 30
73
- Animal.page(2).current_page.should == 2
74
- Animal.all(:limit => 2).page(2).per_page.should == 2
75
- end
76
-
77
- it "has total_pages at 1 for empty collections" do
78
- Animal.all(:conditions => ['1=2']).page(1).total_pages.should == 1
79
- end
80
-
81
- it "overrides total_entries count with a fixed value" do
82
- lambda {
83
- animals = Animal.paginate :page => 1, :per_page => 3, :total_entries => 999
84
- animals.total_entries.should == 999
85
- }.should run_queries(0)
86
- end
87
-
88
- it "supports a non-int for total_entries" do
89
- topics = Animal.paginate :page => 1, :per_page => 3, :total_entries => "999"
90
- topics.total_entries.should == 999
91
- end
92
-
93
-
94
- it "can iterate and then call WP methods" do
95
- animals = Animal.all(:limit => 2).page(1)
96
- animals.each { |a| }
97
- animals.total_entries.should == 3
98
- end
99
-
100
- it "augments to_a to return a WP::Collection" do
101
- animals = Animal.all(:limit => 2).page(1)
102
- array = animals.to_a
103
- array.size.should == 2
104
- array.should be_kind_of(WillPaginate::Collection)
105
- array.current_page.should == 1
106
- array.per_page.should == 2
107
- end
108
-
109
- it "doesn't have a problem assigning has-one-through relationship" do
110
- human = Human.create :name => "Mislav"
111
- human.pet = Animal.first
112
- end
113
-
114
- end if datamapper_loaded