mislav-will_paginate 2.3.8 → 2.3.10
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.
- data/lib/will_paginate.rb +14 -3
- data/lib/will_paginate/core_ext.rb +13 -2
- data/lib/will_paginate/finder.rb +2 -2
- data/lib/will_paginate/version.rb +1 -1
- data/lib/will_paginate/view_helpers.rb +9 -7
- data/test/finder_test.rb +9 -12
- data/test/lib/view_test_process.rb +1 -0
- data/test/tasks.rake +1 -1
- data/test/view_test.rb +8 -0
- metadata +2 -2
data/lib/will_paginate.rb
CHANGED
|
@@ -17,7 +17,7 @@ module WillPaginate
|
|
|
17
17
|
|
|
18
18
|
# hooks WillPaginate::ViewHelpers into ActionView::Base
|
|
19
19
|
def enable_actionpack
|
|
20
|
-
return if ActionView::Base.instance_methods.
|
|
20
|
+
return if ActionView::Base.instance_methods.include_method? :will_paginate
|
|
21
21
|
require 'will_paginate/view_helpers'
|
|
22
22
|
ActionView::Base.send :include, ViewHelpers
|
|
23
23
|
|
|
@@ -44,6 +44,16 @@ module WillPaginate
|
|
|
44
44
|
klass.send :include, Finder::ClassMethods
|
|
45
45
|
klass.class_eval { alias_method_chain :method_missing, :paginate }
|
|
46
46
|
end
|
|
47
|
+
|
|
48
|
+
# monkeypatch Rails ticket #2189: "count breaks has_many :through"
|
|
49
|
+
ActiveRecord::Base.class_eval do
|
|
50
|
+
protected
|
|
51
|
+
def self.construct_count_options_from_args(*args)
|
|
52
|
+
result = super
|
|
53
|
+
result[0] = '*' if result[0].is_a?(String) and result[0] =~ /\.\*$/
|
|
54
|
+
result
|
|
55
|
+
end
|
|
56
|
+
end
|
|
47
57
|
end
|
|
48
58
|
|
|
49
59
|
# Enable named_scope, a feature of Rails 2.1, even if you have older Rails
|
|
@@ -73,6 +83,7 @@ module WillPaginate
|
|
|
73
83
|
end
|
|
74
84
|
end
|
|
75
85
|
|
|
76
|
-
if defined?
|
|
77
|
-
WillPaginate.
|
|
86
|
+
if defined? Rails
|
|
87
|
+
WillPaginate.enable_activerecord if defined? ActiveRecord
|
|
88
|
+
WillPaginate.enable_actionpack if defined? ActionController
|
|
78
89
|
end
|
|
@@ -1,7 +1,18 @@
|
|
|
1
1
|
require 'set'
|
|
2
2
|
require 'will_paginate/array'
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
# helper to check for method existance in ruby 1.8- and 1.9-compatible way
|
|
5
|
+
# because `methods`, `instance_methods` and others return strings in 1.8 and symbols in 1.9
|
|
6
|
+
#
|
|
7
|
+
# ['foo', 'bar'].include_method?(:foo) # => true
|
|
8
|
+
class Array
|
|
9
|
+
def include_method?(name)
|
|
10
|
+
name = name.to_sym
|
|
11
|
+
!!(find { |item| item.to_sym == name })
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
unless Hash.instance_methods.include_method? :except
|
|
5
16
|
Hash.class_eval do
|
|
6
17
|
# Returns a new hash without the given keys.
|
|
7
18
|
def except(*keys)
|
|
@@ -16,7 +27,7 @@ unless Hash.instance_methods.include? 'except'
|
|
|
16
27
|
end
|
|
17
28
|
end
|
|
18
29
|
|
|
19
|
-
unless Hash.instance_methods.
|
|
30
|
+
unless Hash.instance_methods.include_method? :slice
|
|
20
31
|
Hash.class_eval do
|
|
21
32
|
# Returns a new hash with only the given keys.
|
|
22
33
|
def slice(*keys)
|
data/lib/will_paginate/finder.rb
CHANGED
|
@@ -141,7 +141,7 @@ module WillPaginate
|
|
|
141
141
|
count_query = original_query.sub /\bORDER\s+BY\s+[\w`,\s]+$/mi, ''
|
|
142
142
|
count_query = "SELECT COUNT(*) FROM (#{count_query})"
|
|
143
143
|
|
|
144
|
-
unless
|
|
144
|
+
unless self.connection.adapter_name =~ /^(oracle|oci$)/i
|
|
145
145
|
count_query << ' AS count_table'
|
|
146
146
|
end
|
|
147
147
|
# perform the count query
|
|
@@ -214,7 +214,7 @@ module WillPaginate
|
|
|
214
214
|
|
|
215
215
|
# forget about includes if they are irrelevant (Rails 2.1)
|
|
216
216
|
if count_options[:include] and
|
|
217
|
-
klass.private_methods.
|
|
217
|
+
klass.private_methods.include_method?(:references_eager_loaded_tables?) and
|
|
218
218
|
!klass.send(:references_eager_loaded_tables?, count_options)
|
|
219
219
|
count_options.delete :include
|
|
220
220
|
end
|
|
@@ -332,21 +332,21 @@ module WillPaginate
|
|
|
332
332
|
return url if page_one
|
|
333
333
|
|
|
334
334
|
if complex
|
|
335
|
-
@url_string = url.sub(%r!((?:\?|&)#{CGI.escape param_name}=)#{page}!,
|
|
335
|
+
@url_string = url.sub(%r!((?:\?|&)#{CGI.escape param_name}=)#{page}!, "\\1\0")
|
|
336
336
|
return url
|
|
337
337
|
else
|
|
338
338
|
@url_string = url
|
|
339
339
|
@url_params[param_name] = 3
|
|
340
340
|
@template.url_for(@url_params).split(//).each_with_index do |char, i|
|
|
341
341
|
if char == '3' and url[i, 1] == '2'
|
|
342
|
-
@url_string[i] =
|
|
342
|
+
@url_string[i] = "\0"
|
|
343
343
|
break
|
|
344
344
|
end
|
|
345
345
|
end
|
|
346
346
|
end
|
|
347
347
|
end
|
|
348
348
|
# finally!
|
|
349
|
-
@url_string.sub
|
|
349
|
+
@url_string.sub "\0", page.to_s
|
|
350
350
|
end
|
|
351
351
|
|
|
352
352
|
private
|
|
@@ -386,16 +386,18 @@ module WillPaginate
|
|
|
386
386
|
end
|
|
387
387
|
|
|
388
388
|
def parse_query_parameters(params)
|
|
389
|
-
if defined?
|
|
390
|
-
|
|
389
|
+
if defined? Rack::Utils
|
|
390
|
+
# For Rails > 2.3
|
|
391
|
+
Rack::Utils.parse_nested_query(params)
|
|
391
392
|
elsif defined?(ActionController::AbstractRequest)
|
|
392
393
|
ActionController::AbstractRequest.parse_query_parameters(params)
|
|
393
394
|
elsif defined?(ActionController::UrlEncodedPairParser)
|
|
394
395
|
# For Rails > 2.2
|
|
395
396
|
ActionController::UrlEncodedPairParser.parse_query_parameters(params)
|
|
397
|
+
elsif defined?(CGIMethods)
|
|
398
|
+
CGIMethods.parse_query_parameters(params)
|
|
396
399
|
else
|
|
397
|
-
|
|
398
|
-
Rack::Utils.parse_nested_query(params)
|
|
400
|
+
raise "unsupported ActionPack version"
|
|
399
401
|
end
|
|
400
402
|
end
|
|
401
403
|
end
|
data/test/finder_test.rb
CHANGED
|
@@ -284,11 +284,11 @@ class FinderTest < ActiveRecordTestCase
|
|
|
284
284
|
# this functionality is temporarily removed
|
|
285
285
|
def xtest_pagination_defines_method
|
|
286
286
|
pager = "paginate_by_created_at"
|
|
287
|
-
assert !User.methods.
|
|
287
|
+
assert !User.methods.include_method?(pager), "User methods should not include `#{pager}` method"
|
|
288
288
|
# paginate!
|
|
289
289
|
assert 0, User.send(pager, nil, :page => 1).total_entries
|
|
290
290
|
# the paging finder should now be defined
|
|
291
|
-
assert User.methods.
|
|
291
|
+
assert User.methods.include_method?(pager), "`#{pager}` method should be defined on User"
|
|
292
292
|
end
|
|
293
293
|
|
|
294
294
|
# Is this Rails 2.0? Find out by testing find_all which was removed in [6998]
|
|
@@ -361,18 +361,15 @@ class FinderTest < ActiveRecordTestCase
|
|
|
361
361
|
end
|
|
362
362
|
|
|
363
363
|
def test_paginate_by_sql
|
|
364
|
-
|
|
365
|
-
Developer.
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
entries = Developer.paginate_by_sql 'sql', :page => 2, :per_page => 3
|
|
364
|
+
sql = "SELECT * FROM users WHERE type = 'Developer' ORDER BY id"
|
|
365
|
+
entries = Developer.paginate_by_sql(sql, :page => 2, :per_page => 3)
|
|
366
|
+
assert_equal 11, entries.total_entries
|
|
367
|
+
assert_equal [users(:dev_4), users(:dev_5), users(:dev_6)], entries
|
|
369
368
|
end
|
|
370
369
|
|
|
371
370
|
def test_paginate_by_sql_respects_total_entries_setting
|
|
372
|
-
|
|
373
|
-
Developer.
|
|
374
|
-
|
|
375
|
-
entries = Developer.paginate_by_sql 'sql', :page => 1, :total_entries => 999
|
|
371
|
+
sql = "SELECT * FROM users"
|
|
372
|
+
entries = Developer.paginate_by_sql(sql, :page => 1, :total_entries => 999)
|
|
376
373
|
assert_equal 999, entries.total_entries
|
|
377
374
|
end
|
|
378
375
|
|
|
@@ -440,7 +437,7 @@ class FinderTest < ActiveRecordTestCase
|
|
|
440
437
|
end
|
|
441
438
|
|
|
442
439
|
# detect ActiveRecord 2.1
|
|
443
|
-
if ActiveRecord::Base.private_methods.
|
|
440
|
+
if ActiveRecord::Base.private_methods.include_method?(:references_eager_loaded_tables?)
|
|
444
441
|
def test_removes_irrelevant_includes_in_count
|
|
445
442
|
Developer.expects(:find).returns([1])
|
|
446
443
|
Developer.expects(:count).with({}).returns(0)
|
data/test/tasks.rake
CHANGED
|
@@ -35,7 +35,7 @@ task :test_full => %w(test test_mysql test_postgres)
|
|
|
35
35
|
desc %{Test everything with Rails 2.1.x, 2.0.x & 1.2.x gems}
|
|
36
36
|
task :test_all do
|
|
37
37
|
all = Rake::Task['test_full']
|
|
38
|
-
versions = %w(2.1.0 2.0.4 1.2.6)
|
|
38
|
+
versions = %w(2.3.2 2.2.2 2.1.0 2.0.4 1.2.6)
|
|
39
39
|
versions.each do |version|
|
|
40
40
|
ENV['RAILS_VERSION'] = "~> #{version}"
|
|
41
41
|
all.invoke
|
data/test/view_test.rb
CHANGED
|
@@ -277,6 +277,14 @@ class ViewTest < WillPaginate::ViewTestCase
|
|
|
277
277
|
end
|
|
278
278
|
end
|
|
279
279
|
end
|
|
280
|
+
|
|
281
|
+
def test_will_paginate_with_atmark_url
|
|
282
|
+
@request.symbolized_path_parameters[:action] = "@tag"
|
|
283
|
+
renderer = WillPaginate::LinkRenderer.new
|
|
284
|
+
|
|
285
|
+
paginate({ :page => 1 }, :renderer=>renderer)
|
|
286
|
+
assert_links_match %r[/foo/@tag\?page=\d]
|
|
287
|
+
end
|
|
280
288
|
|
|
281
289
|
def test_complex_custom_page_param
|
|
282
290
|
@request.params :developers => { :page => 2 }
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: mislav-will_paginate
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.3.
|
|
4
|
+
version: 2.3.10
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- "Mislav Marohni\xC4\x87"
|
|
@@ -10,7 +10,7 @@ autorequire:
|
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
12
|
|
|
13
|
-
date: 2009-
|
|
13
|
+
date: 2009-05-21 00:00:00 -07:00
|
|
14
14
|
default_executable:
|
|
15
15
|
dependencies: []
|
|
16
16
|
|