will_paginate 3.0.0 → 3.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of will_paginate might be problematic. Click here for more details.

data/README.md CHANGED
@@ -6,7 +6,7 @@ Installation:
6
6
 
7
7
  ``` ruby
8
8
  ## Gemfile for Rails 3, Sinatra, and Merb
9
- gem 'will_paginate', '~> 3.0.pre4'
9
+ gem 'will_paginate', '~> 3.0'
10
10
  ```
11
11
 
12
12
  See [installation instructions][install] on the wiki for more info.
@@ -18,6 +18,8 @@ module WillPaginate
18
18
  module ActiveRecord
19
19
  # makes a Relation look like WillPaginate::Collection
20
20
  module RelationMethods
21
+ include WillPaginate::CollectionMethods
22
+
21
23
  attr_accessor :current_page
22
24
  attr_writer :total_entries, :wp_count_options
23
25
 
@@ -81,22 +83,24 @@ module WillPaginate
81
83
  # overloaded to be pagination-aware
82
84
  def empty?
83
85
  if !loaded? and offset_value
84
- count <= offset_value
86
+ rel_count = count
87
+ if rel_count.respond_to?(:size) and !rel_count.is_a?(Integer)
88
+ rel_count.size <= offset_value
89
+ else
90
+ rel_count <= offset_value
91
+ end
85
92
  else
86
93
  super
87
94
  end
88
95
  end
89
96
 
90
- def total_pages
91
- (total_entries / limit_value.to_f).ceil
97
+ def clone
98
+ copy_will_paginate_data super
92
99
  end
93
100
 
94
- def clone
95
- other = super
96
- other.current_page = current_page unless other.current_page
97
- other.total_entries = nil if defined? @total_entries_queried
98
- other.wp_count_options = @wp_count_options if defined? @wp_count_options
99
- other
101
+ # workaround for Active Record 3.0
102
+ def scoped(options = nil)
103
+ copy_will_paginate_data super
100
104
  end
101
105
 
102
106
  def to_a
@@ -108,6 +112,15 @@ module WillPaginate
108
112
  end
109
113
  end
110
114
  end
115
+
116
+ private
117
+
118
+ def copy_will_paginate_data(other)
119
+ other.current_page = current_page unless other.current_page
120
+ other.total_entries = nil if defined? @total_entries_queried
121
+ other.wp_count_options = @wp_count_options if defined? @wp_count_options
122
+ other
123
+ end
111
124
  end
112
125
 
113
126
  module Pagination
@@ -2,6 +2,38 @@ require 'will_paginate/per_page'
2
2
  require 'will_paginate/page_number'
3
3
 
4
4
  module WillPaginate
5
+ # Any will_paginate-compatible collection should have these methods:
6
+ #
7
+ # current_page, per_page, offset, total_entries, total_pages
8
+ #
9
+ # It can also define some of these optional methods:
10
+ #
11
+ # out_of_bounds?, previous_page, next_page
12
+ #
13
+ # This module provides few of these methods.
14
+ module CollectionMethods
15
+ def total_pages
16
+ total_entries.zero? ? 1 : (total_entries / per_page.to_f).ceil
17
+ end
18
+
19
+ # current_page - 1 or nil if there is no previous page
20
+ def previous_page
21
+ current_page > 1 ? (current_page - 1) : nil
22
+ end
23
+
24
+ # current_page + 1 or nil if there is no next page
25
+ def next_page
26
+ current_page < total_pages ? (current_page + 1) : nil
27
+ end
28
+
29
+ # Helper method that is true when someone tries to fetch a page with a
30
+ # larger number than the last page. Can be used in combination with flashes
31
+ # and redirecting.
32
+ def out_of_bounds?
33
+ current_page > total_pages
34
+ end
35
+ end
36
+
5
37
  # = The key to pagination
6
38
  # Arrays returned from paginating finds are, in fact, instances of this little
7
39
  # class. You may think of WillPaginate::Collection as an ordinary array with
@@ -18,7 +50,9 @@ module WillPaginate
18
50
  # require 'will_paginate/collection'
19
51
  # # WillPaginate::Collection is now available for use
20
52
  class Collection < Array
21
- attr_reader :current_page, :per_page, :total_entries, :total_pages
53
+ include CollectionMethods
54
+
55
+ attr_reader :current_page, :per_page, :total_entries
22
56
 
23
57
  # Arguments to the constructor are the current page number, per-page limit
24
58
  # and the total number of entries. The last argument is optional because it
@@ -63,35 +97,16 @@ module WillPaginate
63
97
  pager
64
98
  end
65
99
 
66
- # Helper method that is true when someone tries to fetch a page with a
67
- # larger number than the last page. Can be used in combination with flashes
68
- # and redirecting.
69
- def out_of_bounds?
70
- current_page > total_pages
71
- end
72
-
73
100
  # Current offset of the paginated collection. If we're on the first page,
74
101
  # it is always 0. If we're on the 2nd page and there are 30 entries per page,
75
102
  # the offset is 30. This property is useful if you want to render ordinals
76
103
  # side by side with records in the view: simply start with offset + 1.
77
104
  def offset
78
- @current_page.to_offset(per_page).to_i
79
- end
80
-
81
- # current_page - 1 or nil if there is no previous page
82
- def previous_page
83
- current_page > 1 ? (current_page - 1) : nil
105
+ current_page.to_offset(per_page).to_i
84
106
  end
85
107
 
86
- # current_page + 1 or nil if there is no next page
87
- def next_page
88
- current_page < total_pages ? (current_page + 1) : nil
89
- end
90
-
91
- # sets the <tt>total_entries</tt> property and calculates <tt>total_pages</tt>
92
108
  def total_entries=(number)
93
109
  @total_entries = number.to_i
94
- @total_pages = (@total_entries / per_page.to_f).ceil
95
110
  end
96
111
 
97
112
  # This is a magic wrapper for the original Array#replace method. It serves
@@ -30,6 +30,8 @@ module WillPaginate
30
30
  end
31
31
 
32
32
  module CollectionMethods
33
+ include WillPaginate::CollectionMethods
34
+
33
35
  attr_accessor :current_page
34
36
 
35
37
  def paginated?
@@ -58,10 +60,6 @@ module WillPaginate
58
60
  end
59
61
  end
60
62
 
61
- def total_pages
62
- (total_entries / per_page.to_f).ceil
63
- end
64
-
65
63
  def to_a
66
64
  ::WillPaginate::Collection.create(current_page, per_page) do |col|
67
65
  col.replace super
@@ -0,0 +1,55 @@
1
+ module WillPaginate::Deprecation
2
+ class << self
3
+ def warn(message, stack = caller)
4
+ offending_line = origin_of_call(stack)
5
+ full_message = "DEPRECATION WARNING: #{message} (called from #{offending_line})"
6
+ logger = rails_logger || Kernel
7
+ logger.warn full_message
8
+ end
9
+
10
+ private
11
+
12
+ def rails_logger
13
+ defined?(Rails) && Rails.logger
14
+ end
15
+
16
+ def origin_of_call(stack)
17
+ lib_root = File.expand_path('../../..', __FILE__)
18
+ stack.find { |line| line.index(lib_root) != 0 } || stack.first
19
+ end
20
+ end
21
+
22
+ class Hash < ::Hash
23
+ def initialize(values = {})
24
+ super()
25
+ update values
26
+ @deprecated = {}
27
+ end
28
+
29
+ def []=(key, value)
30
+ check_deprecated(key, value)
31
+ super
32
+ end
33
+
34
+ def deprecate_key(*keys)
35
+ message = block_given? ? Proc.new : keys.pop
36
+ Array(keys).each { |key| @deprecated[key] = message }
37
+ end
38
+
39
+ def merge(another)
40
+ to_hash.update(another)
41
+ end
42
+
43
+ def to_hash
44
+ ::Hash.new.update(self)
45
+ end
46
+
47
+ private
48
+
49
+ def check_deprecated(key, value)
50
+ if msg = @deprecated[key] and (!msg.respond_to?(:call) or (msg = msg.call(key, value)))
51
+ WillPaginate::Deprecation.warn(msg)
52
+ end
53
+ end
54
+ end
55
+ end
@@ -1,4 +1,5 @@
1
1
  require 'will_paginate'
2
+ require 'will_paginate/page_number'
2
3
  require 'will_paginate/collection'
3
4
  require 'will_paginate/i18n'
4
5
 
@@ -18,14 +19,44 @@ module WillPaginate
18
19
  end
19
20
 
20
21
  self.class.add_locale_path config
22
+
23
+ # early access to ViewHelpers.pagination_options
24
+ require 'will_paginate/view_helpers'
21
25
  end
22
26
 
23
27
  def self.setup_actioncontroller
24
- ActionDispatch::ShowExceptions.rescue_responses['WillPaginate::InvalidPage'] = :not_found
28
+ ActionDispatch::ShowExceptions.send :include, ShowExceptionsPatch
29
+ ActionController::Base.extend ControllerRescuePatch
25
30
  end
26
31
 
27
32
  def self.add_locale_path(config)
28
33
  config.i18n.railties_load_path.unshift(*WillPaginate::I18n.load_path)
29
34
  end
35
+
36
+ # Extending the exception handler middleware so it properly detects
37
+ # WillPaginate::InvalidPage regardless of it being a tag module.
38
+ module ShowExceptionsPatch
39
+ extend ActiveSupport::Concern
40
+ included { alias_method_chain :status_code, :paginate }
41
+ private
42
+ def status_code_with_paginate(exception)
43
+ if exception.is_a?(WillPaginate::InvalidPage) or
44
+ (exception.respond_to?(:original_exception) &&
45
+ exception.original_exception.is_a?(WillPaginate::InvalidPage))
46
+ Rack::Utils.status_code(:not_found)
47
+ else
48
+ status_code_without_paginate(exception)
49
+ end
50
+ end
51
+ end
52
+
53
+ module ControllerRescuePatch
54
+ def rescue_from(*args, &block)
55
+ if idx = args.index(WillPaginate::InvalidPage)
56
+ args[idx] = args[idx].name
57
+ end
58
+ super(*args, &block)
59
+ end
60
+ end
30
61
  end
31
62
  end
@@ -1,10 +1,13 @@
1
1
  require 'sequel'
2
2
  require 'sequel/extensions/pagination'
3
+ require 'will_paginate/collection'
3
4
 
4
5
  module WillPaginate
5
6
  # Sequel already supports pagination; we only need to make the
6
7
  # resulting dataset look a bit more like WillPaginate::Collection
7
8
  module SequelMethods
9
+ include WillPaginate::CollectionMethods
10
+
8
11
  def total_pages
9
12
  page_count
10
13
  end
@@ -2,7 +2,7 @@ module WillPaginate #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 3
4
4
  MINOR = 0
5
- TINY = 0
5
+ TINY = 1
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  require 'will_paginate/core_ext'
3
3
  require 'will_paginate/i18n'
4
+ require 'will_paginate/deprecation'
4
5
 
5
6
  module WillPaginate
6
7
  # = Will Paginate view helpers
@@ -19,7 +20,7 @@ module WillPaginate
19
20
  end
20
21
 
21
22
  # default view options
22
- self.pagination_options = {
23
+ self.pagination_options = Deprecation::Hash.new \
23
24
  :class => 'pagination',
24
25
  :previous_label => nil,
25
26
  :next_label => nil,
@@ -28,10 +29,14 @@ module WillPaginate
28
29
  :link_separator => ' ', # single space is friendly to spiders and non-graphic browsers
29
30
  :param_name => :page,
30
31
  :params => nil,
31
- :renderer => nil,
32
32
  :page_links => true,
33
33
  :container => true
34
+
35
+ label_deprecation = Proc.new { |key, value|
36
+ "set the 'will_paginate.#{key}' key in your i18n locale instead of editing pagination_options" if defined? Rails
34
37
  }
38
+ pagination_options.deprecate_key(:previous_label, :next_label, &label_deprecation)
39
+ pagination_options.deprecate_key(:renderer) { |key, _| "pagination_options[#{key.inspect}] shouldn't be set globally" }
35
40
 
36
41
  include WillPaginate::I18n
37
42
 
@@ -49,8 +54,8 @@ module WillPaginate
49
54
  # * <tt>:param_name</tt> -- parameter name for page number in URLs (default: <tt>:page</tt>)
50
55
  # * <tt>:params</tt> -- additional parameters when generating pagination links
51
56
  # (eg. <tt>:controller => "foo", :action => nil</tt>)
52
- # * <tt>:renderer</tt> -- class name, class or instance of a link renderer (default:
53
- # <tt>WillPaginate::LinkRenderer</tt>)
57
+ # * <tt>:renderer</tt> -- class name, class or instance of a link renderer (default in Rails:
58
+ # <tt>WillPaginate::ActionView::LinkRenderer</tt>)
54
59
  # * <tt>:page_links</tt> -- when false, only previous/next links are rendered (default: true)
55
60
  # * <tt>:container</tt> -- toggles rendering of the DIV container for pagination links, set to
56
61
  # false only when you are rendering your own pagination markup (default: true)
@@ -72,14 +72,18 @@ module WillPaginate
72
72
  end
73
73
 
74
74
  def will_paginate_translate(keys, options = {})
75
- if Array === keys
76
- defaults = keys.dup
77
- key = defaults.shift
75
+ if respond_to? :translate
76
+ if Array === keys
77
+ defaults = keys.dup
78
+ key = defaults.shift
79
+ else
80
+ defaults = nil
81
+ key = keys
82
+ end
83
+ translate(key, options.merge(:default => defaults, :scope => :will_paginate))
78
84
  else
79
- defaults = nil
80
- key = keys
85
+ super
81
86
  end
82
- translate(key, options.merge(:default => defaults, :scope => :will_paginate))
83
87
  end
84
88
 
85
89
  protected
@@ -101,9 +105,8 @@ module WillPaginate
101
105
 
102
106
  def url(page)
103
107
  @base_url_params ||= begin
104
- url_params = base_url_params
108
+ url_params = merge_get_params(default_url_params)
105
109
  merge_optional_params(url_params)
106
- url_params
107
110
  end
108
111
 
109
112
  url_params = @base_url_params.dup
@@ -112,15 +115,16 @@ module WillPaginate
112
115
  @template.url_for(url_params)
113
116
  end
114
117
 
115
- def base_url_params
116
- url_params = default_url_params
117
- # page links should preserve GET parameters
118
- symbolized_update(url_params, @template.params) if get_request?
118
+ def merge_get_params(url_params)
119
+ if @template.respond_to? :request and @template.request and @template.request.get?
120
+ symbolized_update(url_params, @template.params)
121
+ end
119
122
  url_params
120
123
  end
121
124
 
122
125
  def merge_optional_params(url_params)
123
126
  symbolized_update(url_params, @options[:params]) if @options[:params]
127
+ url_params
124
128
  end
125
129
 
126
130
  def add_current_page_param(url_params, page)
@@ -132,10 +136,6 @@ module WillPaginate
132
136
  end
133
137
  end
134
138
 
135
- def get_request?
136
- @template.request.get?
137
- end
138
-
139
139
  private
140
140
 
141
141
  def parse_query_parameters(params)
@@ -35,7 +35,7 @@ module WillPaginate
35
35
  # Returns the subset of +options+ this instance was initialized with that
36
36
  # represent HTML attributes for the container element of pagination links.
37
37
  def container_attributes
38
- @container_attributes ||= @options.except(*(ViewHelpers.pagination_options.keys - [:class]))
38
+ @container_attributes ||= @options.except(*(ViewHelpers.pagination_options.keys + [:renderer] - [:class]))
39
39
  end
40
40
 
41
41
  protected
@@ -71,12 +71,20 @@ describe WillPaginate::Collection do
71
71
  end
72
72
  end
73
73
 
74
- it "should show out of bounds when page number is too high" do
75
- create(2, 3, 2).should be_out_of_bounds
76
- end
77
-
78
- it "should not show out of bounds when inside collection" do
79
- create(1, 3, 2).should_not be_out_of_bounds
74
+ describe "out of bounds" do
75
+ it "is out of bounds when page number is too high" do
76
+ create(2, 3, 2).should be_out_of_bounds
77
+ end
78
+
79
+ it "isn't out of bounds when inside collection" do
80
+ create(1, 3, 2).should_not be_out_of_bounds
81
+ end
82
+
83
+ it "isn't out of bounds when the collection is empty" do
84
+ collection = create(1, 3, 0)
85
+ collection.should_not be_out_of_bounds
86
+ collection.total_pages.should == 1
87
+ end
80
88
  end
81
89
 
82
90
  describe "guessing total count" do
@@ -91,6 +91,13 @@ describe WillPaginate::ActiveRecord do
91
91
  rel = Developer.page(3).limit(3)
92
92
  rel.offset.should == 6
93
93
  end
94
+
95
+ it "keeps pagination data after 'scoped'" do
96
+ rel = Developer.page(2).scoped
97
+ rel.per_page.should == 10
98
+ rel.offset.should == 10
99
+ rel.current_page.should == 2
100
+ end
94
101
  end
95
102
 
96
103
  describe "counting" do
@@ -131,6 +138,13 @@ describe WillPaginate::ActiveRecord do
131
138
  topics.should_not be_empty
132
139
  }.should run_queries(1)
133
140
  end
141
+
142
+ it "support empty? for grouped queries" do
143
+ topics = Topic.group(:project_id).paginate :page => 1, :per_page => 3
144
+ lambda {
145
+ topics.should_not be_empty
146
+ }.should run_queries(1)
147
+ end
134
148
 
135
149
  it "overrides total_entries count with a fixed value" do
136
150
  lambda {
@@ -165,17 +179,16 @@ describe WillPaginate::ActiveRecord do
165
179
  it "should count with group" do
166
180
  Developer.group(:salary).page(1).total_entries.should == 4
167
181
  end
182
+
183
+ it "should not have zero total_pages when the result set is empty" do
184
+ Developer.where("1 = 2").page(1).total_pages.should == 1
185
+ end
168
186
  end
169
187
 
170
188
  it "should not ignore :select parameter when it says DISTINCT" do
171
189
  users = User.select('DISTINCT salary').paginate :page => 2
172
190
  users.total_entries.should == 5
173
191
  end
174
-
175
- it "should count with scoped select when :select => DISTINCT" do
176
- pending
177
- Topic.distinct.paginate :page => 2
178
- end
179
192
 
180
193
  describe "paginate_by_sql" do
181
194
  it "should respond" do
@@ -311,7 +324,7 @@ describe WillPaginate::ActiveRecord do
311
324
 
312
325
  lambda {
313
326
  # with association-specified order
314
- result = dhh.projects.paginate(:page => 1)
327
+ result = ignore_deprecation { dhh.projects.paginate(:page => 1) }
315
328
  result.should == expected_name_ordered
316
329
  result.total_entries.should == 2
317
330
  }.should run_queries(2)
@@ -402,7 +415,7 @@ describe WillPaginate::ActiveRecord do
402
415
  it "should paginate on habtm association" do
403
416
  project = projects(:active_record)
404
417
  lambda {
405
- result = project.developers.poor.paginate :page => 1, :per_page => 1
418
+ result = ignore_deprecation { project.developers.poor.paginate :page => 1, :per_page => 1 }
406
419
  result.size.should == 1
407
420
  result.total_entries.should == 1
408
421
  }.should run_queries(2)
@@ -452,6 +465,10 @@ describe WillPaginate::ActiveRecord do
452
465
 
453
466
  protected
454
467
 
468
+ def ignore_deprecation
469
+ ActiveSupport::Deprecation.silence { yield }
470
+ end
471
+
455
472
  def run_queries(num)
456
473
  QueryCountMatcher.new(num)
457
474
  end
@@ -76,4 +76,8 @@ describe WillPaginate::DataMapper do
76
76
  Animal.all(:limit => 2).page(2).per_page.should == 2
77
77
  end
78
78
 
79
+ it "has total_pages at 1 for empty collections" do
80
+ Animal.all(:conditions => ['1=2']).page(1).total_pages.should == 1
81
+ end
82
+
79
83
  end if datamapper_loaded
@@ -6,26 +6,18 @@ rescue LoadError
6
6
  # no debugger available
7
7
  end
8
8
 
9
- module MyExtras
10
- protected
11
-
12
- def include_phrase(string)
13
- PhraseMatcher.new(string)
14
- end
9
+ RSpec.configure do |config|
10
+ config.include Module.new {
11
+ protected
15
12
 
16
- def collection(params = {})
17
- if params[:total_pages]
18
- params[:per_page] = 1
19
- params[:total_entries] = params[:total_pages]
13
+ def include_phrase(string)
14
+ PhraseMatcher.new(string)
20
15
  end
21
- WillPaginate::Collection.new(params[:page] || 1, params[:per_page] || 30, params[:total_entries])
22
- end
23
- end
24
16
 
25
- RSpec.configure do |config|
26
- # config.include My::Pony, My::Horse, :type => :farm
27
- config.include MyExtras
28
- # config.predicate_matchers[:swim] = :can_swim?
17
+ def have_deprecation(msg)
18
+ DeprecationMatcher.new(msg)
19
+ end
20
+ }
29
21
 
30
22
  config.mock_with :mocha
31
23
  end
@@ -33,7 +25,7 @@ end
33
25
  class PhraseMatcher
34
26
  def initialize(string)
35
27
  @string = string
36
- @pattern = /\b#{string}\b/
28
+ @pattern = /\b#{Regexp.escape string}\b/
37
29
  end
38
30
 
39
31
  def matches?(actual)
@@ -49,3 +41,31 @@ class PhraseMatcher
49
41
  "expected #{@actual.inspect} not to contain phrase #{@string.inspect}"
50
42
  end
51
43
  end
44
+
45
+ require 'stringio'
46
+
47
+ class DeprecationMatcher
48
+ def initialize(message)
49
+ @message = message
50
+ end
51
+
52
+ def matches?(block)
53
+ @actual = hijack_stderr(&block)
54
+ PhraseMatcher.new("DEPRECATION WARNING: #{@message}").matches?(@actual)
55
+ end
56
+
57
+ def failure_message
58
+ "expected deprecation warning #{@message.inspect}, got #{@actual.inspect}"
59
+ end
60
+
61
+ private
62
+
63
+ def hijack_stderr
64
+ err = $stderr
65
+ $stderr = StringIO.new
66
+ yield
67
+ $stderr.string.rstrip
68
+ ensure
69
+ $stderr = err
70
+ end
71
+ end
@@ -293,6 +293,45 @@ describe WillPaginate::ActionView do
293
293
  end
294
294
  end
295
295
 
296
+ it "renders using ActionView helpers on a custom object" do
297
+ helper = Object.new
298
+ class << helper
299
+ attr_reader :controller
300
+ include ActionView::Helpers::UrlHelper
301
+ include Routes.url_helpers
302
+ include WillPaginate::ActionView
303
+ end
304
+ helper.default_url_options[:controller] = 'dummy'
305
+
306
+ collection = WillPaginate::Collection.new(2, 1, 3)
307
+ @render_output = helper.will_paginate(collection)
308
+
309
+ assert_select 'a[href]', 4 do |links|
310
+ urls = links.map {|l| l['href'] }.uniq
311
+ urls.should == ['/dummy/page/1', '/dummy/page/3']
312
+ end
313
+ end
314
+
315
+ it "renders using ActionDispatch helper on a custom object" do
316
+ helper = Object.new
317
+ class << helper
318
+ include ActionDispatch::Routing::UrlFor
319
+ include Routes.url_helpers
320
+ include WillPaginate::ActionView
321
+ end
322
+ helper.default_url_options[:host] = 'example.com'
323
+ helper.default_url_options[:controller] = 'dummy'
324
+ # helper.default_url_options[:only_path] = true
325
+
326
+ collection = WillPaginate::Collection.new(2, 1, 3)
327
+ @render_output = helper.will_paginate(collection)
328
+
329
+ assert_select 'a[href]', 4 do |links|
330
+ urls = links.map {|l| l['href'] }.uniq
331
+ urls.should == ['http://example.com/dummy/page/1', 'http://example.com/dummy/page/3']
332
+ end
333
+ end
334
+
296
335
  private
297
336
 
298
337
  def translation(data)
@@ -33,6 +33,20 @@ describe WillPaginate::ViewHelpers do
33
33
  will_paginate(collection).should be_nil
34
34
  end
35
35
  end
36
+
37
+ describe "pagination_options" do
38
+ let(:pagination_options) { WillPaginate::ViewHelpers.pagination_options }
39
+
40
+ it "deprecates setting :renderer" do
41
+ begin
42
+ lambda {
43
+ pagination_options[:renderer] = 'test'
44
+ }.should have_deprecation("pagination_options[:renderer] shouldn't be set")
45
+ ensure
46
+ pagination_options.delete :renderer
47
+ end
48
+ end
49
+ end
36
50
 
37
51
  describe "page_entries_info" do
38
52
  before :all do
@@ -71,7 +71,15 @@ describe WillPaginate::ViewHelpers::LinkRendererBase do
71
71
  end
72
72
 
73
73
  protected
74
-
74
+
75
+ def collection(params = {})
76
+ if params[:total_pages]
77
+ params[:per_page] = 1
78
+ params[:total_entries] = params[:total_pages]
79
+ end
80
+ WillPaginate::Collection.new(params[:page] || 1, params[:per_page] || 30, params[:total_entries])
81
+ end
82
+
75
83
  def prepare(collection_options, options = {})
76
84
  @renderer.prepare(collection(collection_options), options)
77
85
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: will_paginate
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 3.0.0
5
+ version: 3.0.1
6
6
  platform: ruby
7
7
  authors:
8
8
  - "Mislav Marohni\xC4\x87"
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-08-09 00:00:00 Z
13
+ date: 2011-09-17 00:00:00 Z
14
14
  dependencies: []
15
15
 
16
16
  description: will_paginate provides a simple API for performing paginated queries with Active Record, DataMapper and Sequel, and includes helpers for rendering pagination links in Rails, Sinatra and Merb web apps.
@@ -29,6 +29,7 @@ files:
29
29
  - lib/will_paginate/collection.rb
30
30
  - lib/will_paginate/core_ext.rb
31
31
  - lib/will_paginate/data_mapper.rb
32
+ - lib/will_paginate/deprecation.rb
32
33
  - lib/will_paginate/i18n.rb
33
34
  - lib/will_paginate/locale/en.yml
34
35
  - lib/will_paginate/page_number.rb
@@ -100,7 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
100
101
  requirements: []
101
102
 
102
103
  rubyforge_project:
103
- rubygems_version: 1.8.5
104
+ rubygems_version: 1.8.8
104
105
  signing_key:
105
106
  specification_version: 3
106
107
  summary: Pagination plugin for web frameworks and other apps