will_paginate 3.0.4 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b3445d24047dd419909e314bc5f1b9eb3fdb7f73
4
+ data.tar.gz: 2e6ce5705bc95b523bdd8a7ffa9d8e0b35acc36f
5
+ SHA512:
6
+ metadata.gz: bdc9b0d1f20379dc1df3dc503796834b329976c90a63f4e0f14b77152aef8721bea240f850d0abc0c0171a3e1ad10d5c88a354136e47d4bb933b29a205311d7d
7
+ data.tar.gz: c35edfea8e81e70fef045d9f1c3c32bea89723a1bd74a6c2edb438c62fc54c3356eb4704329c42b35760178c71a505ee0d86c0109a6f7cd3fdacd5276af4eb74
data/README.md CHANGED
@@ -5,8 +5,8 @@ will_paginate is a pagination library that integrates with Ruby on Rails, Sinatr
5
5
  Installation:
6
6
 
7
7
  ``` ruby
8
- ## Gemfile for Rails 3, Sinatra, and Merb
9
- gem 'will_paginate', '~> 3.0'
8
+ ## Gemfile for Rails 3+, Sinatra, and Merb
9
+ gem 'will_paginate', '~> 3.0.6'
10
10
  ```
11
11
 
12
12
  See [installation instructions][install] on the wiki for more info.
@@ -58,4 +58,4 @@ Happy paginating.
58
58
  [install]: https://github.com/mislav/will_paginate/wiki/Installation "will_paginate installation"
59
59
  [group]: http://groups.google.com/group/will_paginate "will_paginate discussion and support group"
60
60
  [issues]: https://github.com/mislav/will_paginate/issues
61
- [css]: http://mislav.uniqpath.com/will_paginate/
61
+ [css]: http://mislav.github.io/will_paginate/
@@ -21,7 +21,7 @@ module WillPaginate
21
21
  include WillPaginate::CollectionMethods
22
22
 
23
23
  attr_accessor :current_page
24
- attr_writer :total_entries, :wp_count_options
24
+ attr_writer :total_entries
25
25
 
26
26
  def per_page(value = nil)
27
27
  if value.nil? then limit_value
@@ -78,16 +78,15 @@ module WillPaginate
78
78
  end
79
79
  end
80
80
 
81
- def count
81
+ def count(*args)
82
82
  if limit_value
83
- excluded = [:order, :limit, :offset]
83
+ excluded = [:order, :limit, :offset, :reorder]
84
84
  excluded << :includes unless eager_loading?
85
85
  rel = self.except(*excluded)
86
- # TODO: hack. decide whether to keep
87
- rel = rel.apply_finder_options(@wp_count_options) if defined? @wp_count_options
88
- rel.count
86
+ column_name = (select_for_count(rel) || :all)
87
+ rel.count(column_name)
89
88
  else
90
- super
89
+ super(*args)
91
90
  end
92
91
  end
93
92
 
@@ -135,24 +134,30 @@ module WillPaginate
135
134
  def copy_will_paginate_data(other)
136
135
  other.current_page = current_page unless other.current_page
137
136
  other.total_entries = nil if defined? @total_entries_queried
138
- other.wp_count_options = @wp_count_options if defined? @wp_count_options
139
137
  other
140
138
  end
139
+
140
+ def select_for_count(rel)
141
+ if rel.select_values.present?
142
+ select = rel.select_values.join(", ")
143
+ select if select !~ /[,*]/
144
+ end
145
+ end
141
146
  end
142
147
 
143
148
  module Pagination
144
149
  def paginate(options)
145
150
  options = options.dup
146
151
  pagenum = options.fetch(:page) { raise ArgumentError, ":page parameter required" }
152
+ options.delete(:page)
147
153
  per_page = options.delete(:per_page) || self.per_page
148
154
  total = options.delete(:total_entries)
149
155
 
150
- count_options = options.delete(:count)
151
- options.delete(:page)
156
+ if options.any?
157
+ raise ArgumentError, "unsupported parameters: %p" % options.keys
158
+ end
152
159
 
153
160
  rel = limit(per_page.to_i).page(pagenum)
154
- rel = rel.apply_finder_options(options) if options.any?
155
- rel.wp_count_options = count_options if count_options
156
161
  rel.total_entries = total.to_i unless total.blank?
157
162
  rel
158
163
  end
@@ -21,11 +21,15 @@ module WillPaginate
21
21
  options = options.dup
22
22
  pagenum = options.fetch(:page) { raise ArgumentError, ":page parameter required" }
23
23
  per_page = options.delete(:per_page) || self.per_page
24
+ total = options.delete(:total_entries)
24
25
 
25
26
  options.delete(:page)
26
27
  options[:limit] = per_page.to_i
27
28
 
28
- all(options).page(pagenum)
29
+
30
+ col = all(options).page(pagenum)
31
+ col.total_entries = total.to_i unless total.nil? || (total.kind_of?(String) && total.strip.empty?)
32
+ col
29
33
  end
30
34
  end
31
35
 
@@ -33,6 +37,7 @@ module WillPaginate
33
37
  include WillPaginate::CollectionMethods
34
38
 
35
39
  attr_accessor :current_page
40
+ attr_writer :total_entries
36
41
 
37
42
  def paginated?
38
43
  !current_page.nil?
@@ -10,7 +10,7 @@ module WillPaginate::Deprecation
10
10
  private
11
11
 
12
12
  def rails_logger
13
- defined?(Rails) && Rails.logger
13
+ defined?(Rails.logger) && Rails.logger
14
14
  end
15
15
 
16
16
  def origin_of_call(stack)
@@ -0,0 +1,46 @@
1
+ require 'mongoid'
2
+ require 'will_paginate/collection'
3
+
4
+ module WillPaginate
5
+ module Mongoid
6
+ module CriteriaMethods
7
+ def paginate(options = {})
8
+ extend CollectionMethods
9
+ @current_page = WillPaginate::PageNumber(options[:page] || @current_page || 1)
10
+ @page_multiplier = current_page - 1
11
+ pp = (options[:per_page] || per_page || WillPaginate.per_page).to_i
12
+ limit(pp).skip(@page_multiplier * pp)
13
+ end
14
+
15
+ def per_page(value = :non_given)
16
+ if value == :non_given
17
+ options[:limit] == 0 ? nil : options[:limit] # in new Mongoid versions a nil limit is saved as 0
18
+ else
19
+ limit(value)
20
+ end
21
+ end
22
+
23
+ def page(page)
24
+ paginate(:page => page)
25
+ end
26
+ end
27
+
28
+ module CollectionMethods
29
+ attr_reader :current_page
30
+
31
+ def total_entries
32
+ @total_entries ||= count
33
+ end
34
+
35
+ def total_pages
36
+ (total_entries / per_page.to_f).ceil
37
+ end
38
+
39
+ def offset
40
+ @page_multiplier * per_page
41
+ end
42
+ end
43
+
44
+ ::Mongoid::Criteria.send(:include, CriteriaMethods)
45
+ end
46
+ end
@@ -32,14 +32,17 @@ module WillPaginate
32
32
  end
33
33
 
34
34
  def self.add_locale_path(config)
35
- config.i18n.railties_load_path.unshift(*WillPaginate::I18n.load_path)
35
+ config.i18n.load_path.unshift(*WillPaginate::I18n.load_path)
36
36
  end
37
37
 
38
38
  # Extending the exception handler middleware so it properly detects
39
39
  # WillPaginate::InvalidPage regardless of it being a tag module.
40
40
  module ShowExceptionsPatch
41
41
  extend ActiveSupport::Concern
42
- included { alias_method_chain :status_code, :paginate }
42
+ included do
43
+ alias_method :status_code_without_paginate, :status_code
44
+ alias_method :status_code, :status_code_with_paginate
45
+ end
43
46
  def status_code_with_paginate(exception = @exception)
44
47
  if exception.is_a?(WillPaginate::InvalidPage) or
45
48
  (exception.respond_to?(:original_exception) &&
@@ -1,8 +1,8 @@
1
1
  module WillPaginate #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 3
4
- MINOR = 0
5
- TINY = 4
4
+ MINOR = 1
5
+ TINY = 0
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -30,7 +30,7 @@ module WillPaginate
30
30
  options = options.symbolize_keys
31
31
  options[:renderer] ||= LinkRenderer
32
32
 
33
- super(collection, options).try(:html_safe)
33
+ super(collection, options)
34
34
  end
35
35
 
36
36
  def page_entries_info(collection = nil, options = {}) #:nodoc:
@@ -106,6 +106,7 @@ module WillPaginate
106
106
  def url(page)
107
107
  @base_url_params ||= begin
108
108
  url_params = merge_get_params(default_url_params)
109
+ url_params[:only_path] = true
109
110
  merge_optional_params(url_params)
110
111
  end
111
112
 
@@ -91,7 +91,9 @@ module WillPaginate
91
91
  end
92
92
  # render HTML for pagination
93
93
  renderer.prepare collection, options, self
94
- renderer.to_html
94
+ output = renderer.to_html
95
+ output = output.html_safe if output.respond_to?(:html_safe)
96
+ output
95
97
  end
96
98
 
97
99
  # Renders a message containing number of displayed vs. total entries.
data/spec/database.yml CHANGED
@@ -8,15 +8,18 @@ mysql:
8
8
  database: will_paginate
9
9
  username:
10
10
  encoding: utf8
11
+ socket: <%= ENV["BOXEN_MYSQL_SOCKET"] %>
11
12
 
12
13
  mysql2:
13
14
  adapter: mysql2
14
15
  database: will_paginate
15
16
  username:
16
17
  encoding: utf8
18
+ socket: <%= ENV["BOXEN_MYSQL_SOCKET"] %>
17
19
 
18
20
  postgres:
19
21
  adapter: postgresql
20
22
  database: will_paginate
21
- username: postgres
23
+ username: <%= "postgres" if ENV["TRAVIS"] %>
22
24
  min_messages: warning
25
+ port: <%= ENV["BOXEN_POSTGRESQL_PORT"] %>
@@ -0,0 +1,18 @@
1
+ # Makes the test suite compatible with Bundler standalone mode (used in CI)
2
+ # because Active Record uses `gem` for loading adapters.
3
+ Kernel.module_eval do
4
+
5
+ remove_method :gem if 'method' == defined? gem
6
+
7
+ def gem(*args)
8
+ return if $VERBOSE.nil?
9
+ $stderr << "warning: gem(#{args.map {|o| o.inspect }.join(', ')}) ignored"
10
+ $stderr << "; called from:\n " << caller[0,5].join("\n ") if $DEBUG
11
+ $stderr << "\n"
12
+ end
13
+
14
+ private :gem
15
+
16
+ end
17
+
18
+ $" << "rubygems.rb"
@@ -104,13 +104,6 @@ describe WillPaginate::ActiveRecord do
104
104
  rel.last(2).should == users(:dev_7, :dev_8)
105
105
  rel.page(3).last.should == users(:poor_jamis)
106
106
  end
107
-
108
- it "keeps pagination data after 'scoped'" do
109
- rel = Developer.page(2).scoped
110
- rel.per_page.should == 10
111
- rel.offset.should == 10
112
- rel.current_page.should == 2
113
- end
114
107
  end
115
108
 
116
109
  describe "counting" do
@@ -136,15 +129,6 @@ describe WillPaginate::ActiveRecord do
136
129
  }.should run_queries(2)
137
130
  end
138
131
 
139
- it "remembers custom count options in sub-relations" do
140
- topics = Topic.paginate :page => 1, :per_page => 3, :count => {:conditions => "title LIKE '%futurama%'"}
141
- topics.total_entries.should == 1
142
- topics.length.should == 3
143
- lambda {
144
- topics.order('id').total_entries.should == 1
145
- }.should run_queries(1)
146
- end
147
-
148
132
  it "supports empty? method" do
149
133
  topics = Topic.paginate :page => 1, :per_page => 3
150
134
  lambda {
@@ -191,6 +175,7 @@ describe WillPaginate::ActiveRecord do
191
175
  it "keeps :include for count when they are referenced in :conditions" do
192
176
  developers = Developer.paginate(:page => 1, :per_page => 1).includes(:projects)
193
177
  with_condition = developers.where('projects.id > 1')
178
+ with_condition = with_condition.references(:projects) if with_condition.respond_to?(:references)
194
179
  with_condition.total_entries.should == 1
195
180
 
196
181
  $query_sql.last.should =~ /\bJOIN\b/
@@ -199,6 +184,15 @@ describe WillPaginate::ActiveRecord do
199
184
  it "should count with group" do
200
185
  Developer.group(:salary).page(1).total_entries.should == 4
201
186
  end
187
+
188
+ it "should count with select" do
189
+ Topic.select('title, content').page(1).total_entries.should == 4
190
+ end
191
+
192
+ it "removes :reorder for count with group" do
193
+ Project.group(:id).reorder(:id).page(1).total_entries
194
+ $query_sql.last.should_not =~ /\ORDER\b/
195
+ end
202
196
 
203
197
  it "should not have zero total_pages when the result set is empty" do
204
198
  Developer.where("1 = 2").page(1).total_pages.should == 1
@@ -240,10 +234,11 @@ describe WillPaginate::ActiveRecord do
240
234
  end
241
235
 
242
236
  it "should strip the order when counting" do
237
+ expected = topics(:ar)
243
238
  lambda {
244
239
  sql = "select id, title, content from topics order by topics.title"
245
240
  topics = Topic.paginate_by_sql sql, :page => 1, :per_page => 2
246
- topics.first.should == topics(:ar)
241
+ topics.first.should == expected
247
242
  }.should run_queries(2)
248
243
 
249
244
  $query_sql.last.should include('COUNT')
@@ -285,69 +280,7 @@ describe WillPaginate::ActiveRecord do
285
280
  }.should run_queries(2)
286
281
  end
287
282
 
288
- it "should paginate with :order" do
289
- result = Topic.paginate :page => 1, :order => 'created_at DESC'
290
- result.should == topics(:futurama, :harvey_birdman, :rails, :ar).reverse
291
- result.total_pages.should == 1
292
- end
293
-
294
- it "should paginate with :conditions" do
295
- result = Topic.paginate :page => 1, :order => 'id ASC',
296
- :conditions => ["created_at > ?", 30.minutes.ago]
297
- result.should == topics(:rails, :ar)
298
- result.total_pages.should == 1
299
- end
300
-
301
- it "should paginate with :include and :conditions" do
302
- result = Topic.paginate \
303
- :page => 1,
304
- :include => :replies,
305
- :conditions => "replies.content LIKE 'Bird%' ",
306
- :per_page => 10
307
-
308
- expected = Topic.find :all,
309
- :include => 'replies',
310
- :conditions => "replies.content LIKE 'Bird%' ",
311
- :limit => 10
312
-
313
- result.should == expected
314
- result.total_entries.should == 1
315
- end
316
-
317
- it "should paginate with :include and :order" do
318
- result = nil
319
- lambda {
320
- result = Topic.paginate(:page => 1, :include => :replies, :per_page => 10,
321
- :order => 'replies.created_at asc, topics.created_at asc').to_a
322
- }.should run_queries(2)
323
-
324
- expected = Topic.find :all,
325
- :include => 'replies',
326
- :order => 'replies.created_at asc, topics.created_at asc',
327
- :limit => 10
328
-
329
- result.should == expected
330
- result.total_entries.should == 4
331
- end
332
-
333
283
  describe "associations" do
334
- it "should paginate with include" do
335
- project = projects(:active_record)
336
-
337
- result = project.topics.paginate \
338
- :page => 1,
339
- :include => :replies,
340
- :conditions => ["replies.content LIKE ?", 'Nice%'],
341
- :per_page => 10
342
-
343
- expected = Topic.find :all,
344
- :include => 'replies',
345
- :conditions => ["project_id = ? AND replies.content LIKE ?", project.id, 'Nice%'],
346
- :limit => 10
347
-
348
- result.should == expected
349
- end
350
-
351
284
  it "should paginate" do
352
285
  dhh = users(:david)
353
286
  expected_name_ordered = projects(:action_controller, :active_record)
@@ -355,8 +288,10 @@ describe WillPaginate::ActiveRecord do
355
288
 
356
289
  lambda {
357
290
  # with association-specified order
358
- result = ignore_deprecation { dhh.projects.paginate(:page => 1) }
359
- result.should == expected_name_ordered
291
+ result = ignore_deprecation {
292
+ dhh.projects.includes(:topics).order('projects.name').paginate(:page => 1)
293
+ }
294
+ result.to_a.should == expected_name_ordered
360
295
  result.total_entries.should == 2
361
296
  }.should run_queries(2)
362
297
 
@@ -366,7 +301,7 @@ describe WillPaginate::ActiveRecord do
366
301
  result.total_entries.should == 2
367
302
 
368
303
  lambda {
369
- dhh.projects.find(:all, :order => 'projects.id', :limit => 4)
304
+ dhh.projects.order('projects.id').limit(4).to_a
370
305
  }.should_not raise_error
371
306
 
372
307
  result = dhh.projects.paginate(:page => 1, :per_page => 4).reorder('projects.id')
@@ -396,7 +331,7 @@ describe WillPaginate::ActiveRecord do
396
331
  join_sql = 'LEFT JOIN developers_projects ON users.id = developers_projects.developer_id'
397
332
 
398
333
  lambda {
399
- result = Developer.paginate(:page => 1, :joins => join_sql, :conditions => 'project_id = 1')
334
+ result = Developer.where('developers_projects.project_id = 1').joins(join_sql).paginate(:page => 1)
400
335
  result.to_a # trigger loading of records
401
336
  result.size.should == 2
402
337
  developer_names = result.map(&:name)
@@ -406,8 +341,7 @@ describe WillPaginate::ActiveRecord do
406
341
 
407
342
  lambda {
408
343
  expected = result.to_a
409
- result = Developer.paginate(:page => 1, :joins => join_sql,
410
- :conditions => 'project_id = 1', :count => { :select => "users.id" }).to_a
344
+ result = Developer.where('developers_projects.project_id = 1').joins(join_sql).paginate(:page => 1)
411
345
  result.should == expected
412
346
  result.total_entries.should == 2
413
347
  }.should run_queries(1)
@@ -416,8 +350,8 @@ describe WillPaginate::ActiveRecord do
416
350
  it "should paginate with group" do
417
351
  result = nil
418
352
  lambda {
419
- result = Developer.paginate(:page => 1, :per_page => 10,
420
- :group => 'salary', :select => 'salary', :order => 'salary').to_a
353
+ result = Developer.select('salary').order('salary').group('salary').
354
+ paginate(:page => 1, :per_page => 10).to_a
421
355
  }.should run_queries(1)
422
356
 
423
357
  expected = users(:david, :jamis, :dev_10, :poor_jamis).map(&:salary).sort
@@ -430,12 +364,6 @@ describe WillPaginate::ActiveRecord do
430
364
  }.should raise_error(NoMethodError)
431
365
  end
432
366
 
433
- it "should paginate with_scope" do
434
- result = Developer.with_poor_ones { Developer.paginate :page => 1 }
435
- result.size.should == 2
436
- result.total_entries.should == 2
437
- end
438
-
439
367
  describe "scopes" do
440
368
  it "should paginate" do
441
369
  result = Developer.poor.paginate :page => 1, :per_page => 1
@@ -475,12 +403,6 @@ describe WillPaginate::ActiveRecord do
475
403
  end
476
404
  end
477
405
 
478
- it "should paginate with :readonly option" do
479
- lambda {
480
- Developer.paginate :readonly => true, :page => 1
481
- }.should_not raise_error
482
- end
483
-
484
406
  it "should not paginate an array of IDs" do
485
407
  lambda {
486
408
  Developer.paginate((1..8).to_a, :per_page => 3, :page => 2, :order => 'id')
@@ -493,64 +415,4 @@ describe WillPaginate::ActiveRecord do
493
415
  Project.page(307445734561825862)
494
416
  }.should raise_error(WillPaginate::InvalidPage, "invalid offset: 9223372036854775830")
495
417
  end
496
-
497
- protected
498
-
499
- def ignore_deprecation
500
- ActiveSupport::Deprecation.silence { yield }
501
- end
502
-
503
- def run_queries(num)
504
- QueryCountMatcher.new(num)
505
- end
506
-
507
- def show_queries(&block)
508
- counter = QueryCountMatcher.new(nil)
509
- counter.run block
510
- ensure
511
- queries = counter.performed_queries
512
- if queries.any?
513
- puts queries
514
- else
515
- puts "no queries"
516
- end
517
- end
518
-
519
- end
520
-
521
- class QueryCountMatcher
522
- def initialize(num)
523
- @expected_count = num
524
- end
525
-
526
- def matches?(block)
527
- run(block)
528
-
529
- if @expected_count.respond_to? :include?
530
- @expected_count.include? @count
531
- else
532
- @count == @expected_count
533
- end
534
- end
535
-
536
- def run(block)
537
- $query_count = 0
538
- $query_sql = []
539
- block.call
540
- ensure
541
- @queries = $query_sql.dup
542
- @count = $query_count
543
- end
544
-
545
- def performed_queries
546
- @queries
547
- end
548
-
549
- def failure_message
550
- "expected #{@expected_count} queries, got #{@count}\n#{@queries.join("\n")}"
551
- end
552
-
553
- def negative_failure_message
554
- "expected query count not to be #{@expected_count}"
555
- end
556
- end
418
+ end
@@ -1,15 +1,28 @@
1
1
  require 'active_record'
2
2
  require 'active_record/fixtures'
3
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
4
17
 
5
18
  $query_count = 0
6
19
  $query_sql = []
7
20
 
8
21
  ignore_sql = /
9
22
  ^(
10
- PRAGMA | SHOW\ max_identifier_length |
23
+ PRAGMA | SHOW\ (max_identifier_length|search_path) |
11
24
  SELECT\ (currval|CAST|@@IDENTITY|@@ROWCOUNT) |
12
- SHOW\ (FIELDS|TABLES)
25
+ SHOW\ ((FULL\ )?FIELDS|TABLES)
13
26
  )\b |
14
27
  \bFROM\ (sqlite_master|pg_tables|pg_attribute)\b
15
28
  /x
@@ -59,8 +72,9 @@ module ActiverecordTestConnector
59
72
 
60
73
  def setup_connection
61
74
  db = ENV['DB'].blank?? 'sqlite3' : ENV['DB']
62
-
63
- configurations = YAML.load_file(File.expand_path('../../database.yml', __FILE__))
75
+
76
+ erb = ERB.new(File.read(File.expand_path('../../database.yml', __FILE__)))
77
+ configurations = YAML.load(erb.result)
64
78
  raise "no configuration for '#{db}'" unless configurations.key? db
65
79
  configuration = configurations[db]
66
80
 
@@ -68,14 +82,17 @@ module ActiverecordTestConnector
68
82
  puts "using #{configuration['adapter']} adapter"
69
83
 
70
84
  ActiveRecord::Base.configurations = { db => configuration }
71
- ActiveRecord::Base.establish_connection(db)
85
+ ActiveRecord::Base.establish_connection(db.to_sym)
72
86
  ActiveRecord::Base.default_timezone = :utc
73
87
  end
74
88
 
75
89
  def load_schema
76
- ActiveRecord::Base.silence do
90
+ begin
91
+ $stdout = StringIO.new
77
92
  ActiveRecord::Migration.verbose = false
78
93
  load File.join(FIXTURES_PATH, 'schema.rb')
94
+ ensure
95
+ $stdout = STDOUT
79
96
  end
80
97
  end
81
98
 
@@ -80,6 +80,19 @@ describe WillPaginate::DataMapper do
80
80
  Animal.all(:conditions => ['1=2']).page(1).total_pages.should == 1
81
81
  end
82
82
 
83
+ it "overrides total_entries count with a fixed value" do
84
+ lambda {
85
+ animals = Animal.paginate :page => 1, :per_page => 3, :total_entries => 999
86
+ animals.total_entries.should == 999
87
+ }.should run_queries(0)
88
+ end
89
+
90
+ it "supports a non-int for total_entries" do
91
+ topics = Animal.paginate :page => 1, :per_page => 3, :total_entries => "999"
92
+ topics.total_entries.should == 999
93
+ end
94
+
95
+
83
96
  it "can iterate and then call WP methods" do
84
97
  animals = Animal.all(:limit => 2).page(1)
85
98
  animals.each { |a| }
@@ -90,7 +103,7 @@ describe WillPaginate::DataMapper do
90
103
  animals = Animal.all(:limit => 2).page(1)
91
104
  array = animals.to_a
92
105
  array.size.should == 2
93
- array.is_a? WillPaginate::Collection
106
+ array.should be_kind_of(WillPaginate::Collection)
94
107
  array.current_page.should == 1
95
108
  array.per_page.should == 2
96
109
  end