will_paginate 3.0.3 → 3.0.4

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.

@@ -39,6 +39,26 @@ module WillPaginate
39
39
  end
40
40
  end
41
41
 
42
+ # dirty hack to enable `first` after `limit` behavior above
43
+ def first(*args)
44
+ if current_page
45
+ rel = clone
46
+ rel.current_page = nil
47
+ rel.first(*args)
48
+ else
49
+ super
50
+ end
51
+ end
52
+
53
+ # fix for Rails 3.0
54
+ def find_last
55
+ if !loaded? and offset_value || limit_value
56
+ @last ||= to_a.last
57
+ else
58
+ super
59
+ end
60
+ end
61
+
42
62
  def offset(value = nil)
43
63
  if value.nil? then offset_value
44
64
  else super(value)
@@ -138,7 +158,17 @@ module WillPaginate
138
158
  end
139
159
 
140
160
  def page(num)
141
- rel = scoped.extending(RelationMethods)
161
+ rel = if ::ActiveRecord::Relation === self
162
+ self
163
+ elsif !defined?(::ActiveRecord::Scoping) or ::ActiveRecord::Scoping::ClassMethods.method_defined? :with_scope
164
+ # Active Record 3
165
+ scoped
166
+ else
167
+ # Active Record 4
168
+ all
169
+ end
170
+
171
+ rel = rel.extending(RelationMethods)
142
172
  pagenum = ::WillPaginate::PageNumber(num.nil? ? 1 : num)
143
173
  per_page = rel.limit_value || self.per_page
144
174
  rel = rel.offset(pagenum.to_offset(per_page).to_i)
@@ -40,7 +40,6 @@ module WillPaginate
40
40
  module ShowExceptionsPatch
41
41
  extend ActiveSupport::Concern
42
42
  included { alias_method_chain :status_code, :paginate }
43
- private
44
43
  def status_code_with_paginate(exception = @exception)
45
44
  if exception.is_a?(WillPaginate::InvalidPage) or
46
45
  (exception.respond_to?(:original_exception) &&
@@ -2,7 +2,7 @@ module WillPaginate #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 3
4
4
  MINOR = 0
5
- TINY = 3
5
+ TINY = 4
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -47,7 +47,6 @@ module WillPaginate
47
47
  # * <tt>:class</tt> -- CSS class name for the generated DIV (default: "pagination")
48
48
  # * <tt>:previous_label</tt> -- default: "« Previous"
49
49
  # * <tt>:next_label</tt> -- default: "Next »"
50
- # * <tt>:page_links</tt> -- when false, only previous/next links are rendered (default: true)
51
50
  # * <tt>:inner_window</tt> -- how many links are shown around the current page (default: 4)
52
51
  # * <tt>:outer_window</tt> -- how many links are around the first and the last page (default: 1)
53
52
  # * <tt>:link_separator</tt> -- string separator for page HTML elements (default: single space)
@@ -137,7 +136,7 @@ module WillPaginate
137
136
  i18n_key = :"page_entries_info.single_page#{html_key}"
138
137
  keys = [:"#{model_key}.#{i18n_key}", i18n_key]
139
138
 
140
- will_paginate_translate keys, :count => collection.size, :model => model_name do |_, opts|
139
+ will_paginate_translate keys, :count => collection.total_entries, :model => model_name do |_, opts|
141
140
  case opts[:count]
142
141
  when 0; "No #{opts[:model]} found"
143
142
  when 1; "Displaying #{b}1#{eb} #{opts[:model]}"
@@ -59,7 +59,7 @@ module WillPaginate
59
59
  end
60
60
 
61
61
  def next_page
62
- num = @collection.current_page < @collection.total_pages && @collection.current_page + 1
62
+ num = @collection.current_page < total_pages && @collection.current_page + 1
63
63
  previous_or_next_page(num, @options[:next_label], 'next_page')
64
64
  end
65
65
 
@@ -92,6 +92,19 @@ describe WillPaginate::ActiveRecord do
92
92
  rel.offset.should == 6
93
93
  end
94
94
 
95
+ it "supports #first" do
96
+ rel = Developer.order('id').page(2).per_page(4)
97
+ rel.first.should == users(:dev_5)
98
+ rel.first(2).should == users(:dev_5, :dev_6)
99
+ end
100
+
101
+ it "supports #last" do
102
+ rel = Developer.order('id').page(2).per_page(4)
103
+ rel.last.should == users(:dev_8)
104
+ rel.last(2).should == users(:dev_7, :dev_8)
105
+ rel.page(3).last.should == users(:poor_jamis)
106
+ end
107
+
95
108
  it "keeps pagination data after 'scoped'" do
96
109
  rel = Developer.page(2).scoped
97
110
  rel.per_page.should == 10
@@ -207,7 +220,7 @@ describe WillPaginate::ActiveRecord do
207
220
  sql = "select content from topics where content like '%futurama%'"
208
221
  topics = Topic.paginate_by_sql sql, :page => 1, :per_page => 1
209
222
  topics.total_entries.should == 1
210
- topics.first['title'].should be_nil
223
+ topics.first.attributes.has_key?('title').should be_false
211
224
  }.should run_queries(2)
212
225
  end
213
226
 
@@ -368,7 +381,7 @@ describe WillPaginate::ActiveRecord do
368
381
  end
369
382
 
370
383
  it "should paginate through association extension" do
371
- project = Project.find(:first)
384
+ project = Project.order('id').first
372
385
  expected = [replies(:brave)]
373
386
 
374
387
  lambda {
@@ -30,7 +30,9 @@ module ActiverecordTestConnector
30
30
 
31
31
  FIXTURES_PATH = File.expand_path('../../fixtures', __FILE__)
32
32
 
33
- Fixtures = defined?(ActiveRecord::Fixtures) ? ActiveRecord::Fixtures : ::Fixtures
33
+ Fixtures = defined?(ActiveRecord::FixtureSet) ? ActiveRecord::FixtureSet :
34
+ defined?(ActiveRecord::Fixtures) ? ActiveRecord::Fixtures :
35
+ ::Fixtures
34
36
 
35
37
  # Set our defaults
36
38
  self.connected = false
@@ -1,5 +1,11 @@
1
1
  require 'sequel'
2
2
 
3
+ Symbol.class_eval do
4
+ # Active Record calculations tries `as` on some objects but chokes when that
5
+ # object was a Symbol and it gets a Sequel::SQL::AliasedExpression.
6
+ undef as if method_defined? :as
7
+ end
8
+
3
9
  db = Sequel.sqlite
4
10
 
5
11
  db.create_table :cars do
@@ -1,5 +1,5 @@
1
1
  class Developer < User
2
- has_and_belongs_to_many :projects, :include => :topics, :order => 'projects.name'
2
+ has_and_belongs_to_many :projects, :include => :topics, :order => 'projects.name', :join_table => 'developers_projects'
3
3
 
4
4
  def self.with_poor_ones(&block)
5
5
  with_scope :find => { :conditions => ['salary <= ?', 80000], :order => 'salary' } do
@@ -1,5 +1,5 @@
1
1
  class Project < ActiveRecord::Base
2
- has_and_belongs_to_many :developers, :uniq => true
2
+ has_and_belongs_to_many :developers, :uniq => true, :join_table => 'developers_projects'
3
3
 
4
4
  has_many :topics
5
5
  # :finder_sql => 'SELECT * FROM topics WHERE (topics.project_id = #{id})',
@@ -7,12 +7,12 @@ require 'will_paginate/collection'
7
7
  Routes = ActionDispatch::Routing::RouteSet.new
8
8
 
9
9
  Routes.draw do
10
- match 'dummy/page/:page' => 'dummy#index'
11
- match 'dummy/dots/page.:page' => 'dummy#dots'
12
- match 'ibocorp(/:page)' => 'ibocorp#index',
10
+ get 'dummy/page/:page' => 'dummy#index'
11
+ get 'dummy/dots/page.:page' => 'dummy#dots'
12
+ get 'ibocorp(/:page)' => 'ibocorp#index',
13
13
  :constraints => { :page => /\d+/ }, :defaults => { :page => 1 }
14
14
 
15
- match ':controller(/:action(/:id(.:format)))'
15
+ get ':controller(/:action(/:id(.:format)))'
16
16
  end
17
17
 
18
18
  describe WillPaginate::ActionView do
@@ -1,11 +1,18 @@
1
1
  require 'active_support'
2
+ begin
3
+ require 'minitest/unit'
4
+ rescue LoadError
5
+ # Fails on Ruby 1.8, but it's OK since we only need MiniTest::Assertions
6
+ # on Rails 4 which doesn't support 1.8 anyway.
7
+ end
2
8
  require 'action_dispatch/testing/assertions'
3
9
  require 'will_paginate/array'
4
10
 
5
11
  module ViewExampleGroup
6
12
 
7
13
  include ActionDispatch::Assertions::SelectorAssertions
8
-
14
+ include MiniTest::Assertions if defined? MiniTest
15
+
9
16
  def assert(value, message)
10
17
  raise message unless value
11
18
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: will_paginate
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.3
4
+ version: 3.0.4
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-01-31 00:00:00.000000000 Z
12
+ date: 2013-01-10 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: will_paginate provides a simple API for performing paginated queries
15
15
  with Active Record, DataMapper and Sequel, and includes helpers for rendering pagination
@@ -97,7 +97,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
97
97
  version: '0'
98
98
  requirements: []
99
99
  rubyforge_project:
100
- rubygems_version: 1.8.12
100
+ rubygems_version: 1.8.23
101
101
  signing_key:
102
102
  specification_version: 3
103
103
  summary: Pagination plugin for web frameworks and other apps