will_paginate 3.1.3 → 3.3.0
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.
- checksums.yaml +5 -5
- data/README.md +4 -5
- data/lib/will_paginate/active_record.rb +7 -11
- data/lib/will_paginate/deprecation.rb +2 -2
- data/lib/will_paginate/i18n.rb +3 -3
- data/lib/will_paginate/locale/en.yml +2 -0
- data/lib/will_paginate/mongoid.rb +2 -0
- data/lib/will_paginate/page_number.rb +7 -11
- data/lib/will_paginate/railtie.rb +11 -6
- data/lib/will_paginate/version.rb +2 -2
- data/lib/will_paginate/view_helpers/action_view.rb +2 -2
- data/lib/will_paginate/view_helpers/hanami.rb +41 -0
- data/lib/will_paginate/view_helpers/link_renderer.rb +11 -8
- data/lib/will_paginate/view_helpers/link_renderer_base.rb +1 -1
- data/spec/database.yml +1 -1
- data/spec/finders/active_record_spec.rb +10 -4
- data/spec/finders/activerecord_test_connector.rb +15 -7
- data/spec/finders/data_mapper_spec.rb +3 -5
- data/spec/finders/mongoid_spec.rb +13 -6
- data/spec/finders/sequel_spec.rb +10 -11
- data/spec/page_number_spec.rb +13 -5
- data/spec/spec_helper.rb +1 -1
- data/spec/view_helpers/action_view_spec.rb +22 -10
- data/spec/view_helpers/view_example_group.rb +1 -1
- metadata +13 -8
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: a6263dfb6824224c74e2383ba39b7f35abe25288dfcdd89a3dbab6f2585eb91e
|
|
4
|
+
data.tar.gz: c26bb41e5bf140fd2564ed63fda7ed4822f3c126a6a3b3885b27e2585dbf3647
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8f67913552fff8839f5de82d9e55c61ad69c1a57216da3d5d627aef77455ee32a03d2b8c2b732299b37481ea6e9fd72a5baa1432e1fe296e78fc06b6a46ee8e0
|
|
7
|
+
data.tar.gz: 8979fdd5d35ee416e4c607f759b8e868188b11bb2ca7540d982866e936168170519492a027fff90cb31db12fb758b144389691c9374acfd58fd1880105d2201c
|
data/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# will_paginate
|
|
2
2
|
|
|
3
|
-
will_paginate is a pagination library that integrates with Ruby on Rails, Sinatra, Merb, DataMapper and Sequel.
|
|
3
|
+
will_paginate is a pagination library that integrates with Ruby on Rails, Sinatra, Hanami::View, Merb, DataMapper and Sequel.
|
|
4
4
|
|
|
5
5
|
Installation:
|
|
6
6
|
|
|
@@ -16,10 +16,10 @@ See [installation instructions][install] on the wiki for more info.
|
|
|
16
16
|
|
|
17
17
|
``` ruby
|
|
18
18
|
## perform a paginated query:
|
|
19
|
-
@posts = Post.paginate(:
|
|
19
|
+
@posts = Post.paginate(page: params[:page])
|
|
20
20
|
|
|
21
21
|
# or, use an explicit "per page" limit:
|
|
22
|
-
Post.paginate(:
|
|
22
|
+
Post.paginate(page: params[:page], per_page: 30)
|
|
23
23
|
|
|
24
24
|
## render page links in the view:
|
|
25
25
|
<%= will_paginate @posts %>
|
|
@@ -49,13 +49,12 @@ Post.where(:published => true).paginate(:page => params[:page]).order('id DESC')
|
|
|
49
49
|
Post.page(params[:page]).order('created_at DESC')
|
|
50
50
|
```
|
|
51
51
|
|
|
52
|
-
See [the wiki][wiki] for more documentation. [
|
|
52
|
+
See [the wiki][wiki] for more documentation. [Report bugs][issues] on GitHub.
|
|
53
53
|
|
|
54
54
|
Happy paginating.
|
|
55
55
|
|
|
56
56
|
|
|
57
57
|
[wiki]: https://github.com/mislav/will_paginate/wiki
|
|
58
58
|
[install]: https://github.com/mislav/will_paginate/wiki/Installation "will_paginate installation"
|
|
59
|
-
[group]: http://groups.google.com/group/will_paginate "will_paginate discussion and support group"
|
|
60
59
|
[issues]: https://github.com/mislav/will_paginate/issues
|
|
61
60
|
[css]: http://mislav.github.io/will_paginate/
|
|
@@ -83,7 +83,10 @@ module WillPaginate
|
|
|
83
83
|
excluded = [:order, :limit, :offset, :reorder]
|
|
84
84
|
excluded << :includes unless eager_loading?
|
|
85
85
|
rel = self.except(*excluded)
|
|
86
|
-
column_name =
|
|
86
|
+
column_name = if rel.select_values.present?
|
|
87
|
+
select = rel.select_values.join(", ")
|
|
88
|
+
select if select !~ /[,*]/
|
|
89
|
+
end || :all
|
|
87
90
|
rel.count(column_name)
|
|
88
91
|
else
|
|
89
92
|
super(*args)
|
|
@@ -102,9 +105,7 @@ module WillPaginate
|
|
|
102
105
|
# overloaded to be pagination-aware
|
|
103
106
|
def empty?
|
|
104
107
|
if !loaded? and offset_value
|
|
105
|
-
|
|
106
|
-
result = result.size if result.respond_to?(:size) and !result.is_a?(Integer)
|
|
107
|
-
result <= offset_value
|
|
108
|
+
total_entries <= offset_value
|
|
108
109
|
else
|
|
109
110
|
super
|
|
110
111
|
end
|
|
@@ -136,13 +137,6 @@ module WillPaginate
|
|
|
136
137
|
other.total_entries = nil if defined? @total_entries_queried
|
|
137
138
|
other
|
|
138
139
|
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
|
|
146
140
|
end
|
|
147
141
|
|
|
148
142
|
module Pagination
|
|
@@ -216,6 +210,8 @@ module WillPaginate
|
|
|
216
210
|
WHERE rownum <= #{pager.offset + pager.per_page}
|
|
217
211
|
) WHERE rnum >= #{pager.offset}
|
|
218
212
|
SQL
|
|
213
|
+
elsif (self.connection.adapter_name =~ /^sqlserver/i)
|
|
214
|
+
query << " OFFSET #{pager.offset} ROWS FETCH NEXT #{pager.per_page} ROWS ONLY"
|
|
219
215
|
else
|
|
220
216
|
query << " LIMIT #{pager.per_page} OFFSET #{pager.offset}"
|
|
221
217
|
end
|
|
@@ -31,8 +31,8 @@ module WillPaginate::Deprecation
|
|
|
31
31
|
super
|
|
32
32
|
end
|
|
33
33
|
|
|
34
|
-
def deprecate_key(*keys)
|
|
35
|
-
message = block_given? ?
|
|
34
|
+
def deprecate_key(*keys, &block)
|
|
35
|
+
message = block_given? ? block : keys.pop
|
|
36
36
|
Array(keys).each { |key| @deprecated[key] = message }
|
|
37
37
|
end
|
|
38
38
|
|
data/lib/will_paginate/i18n.rb
CHANGED
|
@@ -8,11 +8,11 @@ module WillPaginate
|
|
|
8
8
|
Dir["#{locale_dir}/*.{rb,yml}"]
|
|
9
9
|
end
|
|
10
10
|
|
|
11
|
-
def will_paginate_translate(keys, options = {})
|
|
11
|
+
def will_paginate_translate(keys, options = {}, &block)
|
|
12
12
|
if defined? ::I18n
|
|
13
13
|
defaults = Array(keys).dup
|
|
14
|
-
defaults <<
|
|
15
|
-
::I18n.translate(defaults.shift, options.merge(:default => defaults, :scope => :will_paginate))
|
|
14
|
+
defaults << block if block_given?
|
|
15
|
+
::I18n.translate(defaults.shift, **options.merge(:default => defaults, :scope => :will_paginate))
|
|
16
16
|
else
|
|
17
17
|
key = Array === keys ? keys.first : keys
|
|
18
18
|
yield key, options
|
|
@@ -8,6 +8,8 @@ module WillPaginate
|
|
|
8
8
|
extend CollectionMethods
|
|
9
9
|
@current_page = WillPaginate::PageNumber(options[:page] || @current_page || 1)
|
|
10
10
|
@page_multiplier = current_page - 1
|
|
11
|
+
@total_entries = options.delete(:total_entries)
|
|
12
|
+
|
|
11
13
|
pp = (options[:per_page] || per_page || WillPaginate.per_page).to_i
|
|
12
14
|
limit(pp).skip(@page_multiplier * pp)
|
|
13
15
|
end
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
require 'delegate'
|
|
2
1
|
require 'forwardable'
|
|
3
2
|
|
|
4
3
|
module WillPaginate
|
|
@@ -6,7 +5,7 @@ module WillPaginate
|
|
|
6
5
|
module InvalidPage; end
|
|
7
6
|
|
|
8
7
|
# integer representing a page number
|
|
9
|
-
class PageNumber <
|
|
8
|
+
class PageNumber < Numeric
|
|
10
9
|
# a value larger than this is not supported in SQL queries
|
|
11
10
|
BIGINT = 9223372036854775807
|
|
12
11
|
|
|
@@ -18,13 +17,17 @@ module WillPaginate
|
|
|
18
17
|
raise RangeError, "invalid #{name}: #{value.inspect}"
|
|
19
18
|
end
|
|
20
19
|
@name = name
|
|
21
|
-
|
|
20
|
+
@value = value
|
|
22
21
|
rescue ArgumentError, TypeError, RangeError => error
|
|
23
22
|
error.extend InvalidPage
|
|
24
23
|
raise error
|
|
25
24
|
end
|
|
26
25
|
|
|
27
|
-
|
|
26
|
+
def to_i
|
|
27
|
+
@value
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def_delegators :@value, :coerce, :==, :<=>, :to_s, :+, :-, :*, :/, :to_json
|
|
28
31
|
|
|
29
32
|
def inspect
|
|
30
33
|
"#{@name} #{to_i}"
|
|
@@ -40,13 +43,6 @@ module WillPaginate
|
|
|
40
43
|
alias is_a? kind_of?
|
|
41
44
|
end
|
|
42
45
|
|
|
43
|
-
# Ultrahax: makes `Fixnum === current_page` checks pass
|
|
44
|
-
Numeric.extend Module.new {
|
|
45
|
-
def ===(obj)
|
|
46
|
-
obj.instance_of? PageNumber or super
|
|
47
|
-
end
|
|
48
|
-
}
|
|
49
|
-
|
|
50
46
|
# An idemptotent coercion method
|
|
51
47
|
def self.PageNumber(value, name = 'page')
|
|
52
48
|
case value
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
require 'will_paginate'
|
|
2
1
|
require 'will_paginate/page_number'
|
|
3
2
|
require 'will_paginate/collection'
|
|
4
3
|
require 'will_paginate/i18n'
|
|
@@ -38,9 +37,15 @@ module WillPaginate
|
|
|
38
37
|
alias_method :status_code, :status_code_with_paginate
|
|
39
38
|
end
|
|
40
39
|
def status_code_with_paginate(exception = @exception)
|
|
41
|
-
if exception.
|
|
42
|
-
|
|
43
|
-
|
|
40
|
+
actual_exception = if exception.respond_to?(:cause)
|
|
41
|
+
exception.cause || exception
|
|
42
|
+
elsif exception.respond_to?(:original_exception)
|
|
43
|
+
exception.original_exception
|
|
44
|
+
else
|
|
45
|
+
exception
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
if actual_exception.is_a?(WillPaginate::InvalidPage)
|
|
44
49
|
Rack::Utils.status_code(:not_found)
|
|
45
50
|
else
|
|
46
51
|
original_method = method(:status_code_without_paginate)
|
|
@@ -54,11 +59,11 @@ module WillPaginate
|
|
|
54
59
|
end
|
|
55
60
|
|
|
56
61
|
module ControllerRescuePatch
|
|
57
|
-
def rescue_from(*args, &block)
|
|
62
|
+
def rescue_from(*args, **kwargs, &block)
|
|
58
63
|
if idx = args.index(WillPaginate::InvalidPage)
|
|
59
64
|
args[idx] = args[idx].name
|
|
60
65
|
end
|
|
61
|
-
super(*args, &block)
|
|
66
|
+
super(*args, **kwargs, &block)
|
|
62
67
|
end
|
|
63
68
|
end
|
|
64
69
|
end
|
|
@@ -43,7 +43,7 @@ module WillPaginate
|
|
|
43
43
|
# Wrapper for rendering pagination links at both top and bottom of a block
|
|
44
44
|
# of content.
|
|
45
45
|
#
|
|
46
|
-
#
|
|
46
|
+
# <%= paginated_section @posts do %>
|
|
47
47
|
# <ol id="posts">
|
|
48
48
|
# <% for post in @posts %>
|
|
49
49
|
# <li> ... </li>
|
|
@@ -80,7 +80,7 @@ module WillPaginate
|
|
|
80
80
|
defaults = nil
|
|
81
81
|
key = keys
|
|
82
82
|
end
|
|
83
|
-
translate(key, options.merge(:default => defaults, :scope => :will_paginate))
|
|
83
|
+
translate(key, **options.merge(:default => defaults, :scope => :will_paginate))
|
|
84
84
|
else
|
|
85
85
|
super
|
|
86
86
|
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
require 'hanami/view'
|
|
2
|
+
require 'will_paginate/view_helpers'
|
|
3
|
+
require 'will_paginate/view_helpers/link_renderer'
|
|
4
|
+
|
|
5
|
+
module WillPaginate
|
|
6
|
+
module Hanami
|
|
7
|
+
module Helpers
|
|
8
|
+
include ViewHelpers
|
|
9
|
+
|
|
10
|
+
def will_paginate(collection, options = {}) #:nodoc:
|
|
11
|
+
options = options.merge(:renderer => LinkRenderer) unless options[:renderer]
|
|
12
|
+
str = super(collection, options)
|
|
13
|
+
str && raw(str)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
class LinkRenderer < ViewHelpers::LinkRenderer
|
|
18
|
+
protected
|
|
19
|
+
|
|
20
|
+
def url(page)
|
|
21
|
+
str = File.join(request_env['SCRIPT_NAME'].to_s, request_env['PATH_INFO'])
|
|
22
|
+
params = request_env['rack.request.query_hash'].merge(param_name.to_s => page.to_s)
|
|
23
|
+
params.update @options[:params] if @options[:params]
|
|
24
|
+
str << '?' << build_query(params)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def request_env
|
|
28
|
+
@template.params.env
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def build_query(params)
|
|
32
|
+
Rack::Utils.build_nested_query params
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def self.included(base)
|
|
37
|
+
base.include Helpers
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -24,7 +24,7 @@ module WillPaginate
|
|
|
24
24
|
# method as you see fit.
|
|
25
25
|
def to_html
|
|
26
26
|
html = pagination.map do |item|
|
|
27
|
-
item.is_a?(
|
|
27
|
+
item.is_a?(Integer) ?
|
|
28
28
|
page_number(item) :
|
|
29
29
|
send(item)
|
|
30
30
|
end.join(@options[:link_separator])
|
|
@@ -35,16 +35,20 @@ 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 ||=
|
|
38
|
+
@container_attributes ||= {
|
|
39
|
+
:role => 'navigation',
|
|
40
|
+
:"aria-label" => @template.will_paginate_translate(:container_aria_label) { 'Pagination' }
|
|
41
|
+
}.update @options.except(*(ViewHelpers.pagination_options.keys + [:renderer] - [:class]))
|
|
39
42
|
end
|
|
40
43
|
|
|
41
44
|
protected
|
|
42
45
|
|
|
43
46
|
def page_number(page)
|
|
44
|
-
|
|
45
|
-
|
|
47
|
+
aria_label = @template.will_paginate_translate(:page_aria_label, :page => page.to_i) { "Page #{page}" }
|
|
48
|
+
if page == current_page
|
|
49
|
+
tag(:em, page, :class => 'current', :"aria-label" => aria_label, :"aria-current" => 'page')
|
|
46
50
|
else
|
|
47
|
-
|
|
51
|
+
link(page, page, :rel => rel_value(page), :"aria-label" => aria_label)
|
|
48
52
|
end
|
|
49
53
|
end
|
|
50
54
|
|
|
@@ -88,7 +92,7 @@ module WillPaginate
|
|
|
88
92
|
end
|
|
89
93
|
|
|
90
94
|
def link(text, target, attributes = {})
|
|
91
|
-
if target.is_a?
|
|
95
|
+
if target.is_a?(Integer)
|
|
92
96
|
attributes[:rel] = rel_value(target)
|
|
93
97
|
target = url(target)
|
|
94
98
|
end
|
|
@@ -108,9 +112,8 @@ module WillPaginate
|
|
|
108
112
|
|
|
109
113
|
def rel_value(page)
|
|
110
114
|
case page
|
|
111
|
-
when @collection.current_page - 1; 'prev'
|
|
115
|
+
when @collection.current_page - 1; 'prev'
|
|
112
116
|
when @collection.current_page + 1; 'next'
|
|
113
|
-
when 1; 'start'
|
|
114
117
|
end
|
|
115
118
|
end
|
|
116
119
|
|
|
@@ -30,7 +30,7 @@ module WillPaginate
|
|
|
30
30
|
window_from = current_page - inner_window
|
|
31
31
|
window_to = current_page + inner_window
|
|
32
32
|
|
|
33
|
-
# adjust lower or upper limit if
|
|
33
|
+
# adjust lower or upper limit if either is out of bounds
|
|
34
34
|
if window_to > total_pages
|
|
35
35
|
window_from -= window_to - total_pages
|
|
36
36
|
window_to = total_pages
|
data/spec/database.yml
CHANGED
|
@@ -3,7 +3,6 @@ require 'will_paginate/active_record'
|
|
|
3
3
|
require File.expand_path('../activerecord_test_connector', __FILE__)
|
|
4
4
|
|
|
5
5
|
ActiverecordTestConnector.setup
|
|
6
|
-
abort unless ActiverecordTestConnector.able_to_connect
|
|
7
6
|
|
|
8
7
|
describe WillPaginate::ActiveRecord do
|
|
9
8
|
|
|
@@ -164,6 +163,13 @@ describe WillPaginate::ActiveRecord do
|
|
|
164
163
|
topics.total_entries.should == 999
|
|
165
164
|
end
|
|
166
165
|
|
|
166
|
+
it "overrides empty? count call with a total_entries fixed value" do
|
|
167
|
+
lambda {
|
|
168
|
+
topics = Topic.paginate :page => 1, :per_page => 3, :total_entries => 999
|
|
169
|
+
topics.should_not be_empty
|
|
170
|
+
}.should run_queries(0)
|
|
171
|
+
end
|
|
172
|
+
|
|
167
173
|
it "removes :include for count" do
|
|
168
174
|
lambda {
|
|
169
175
|
developers = Developer.paginate(:page => 1, :per_page => 1).includes(:projects)
|
|
@@ -214,7 +220,7 @@ describe WillPaginate::ActiveRecord do
|
|
|
214
220
|
sql = "select content from topics where content like '%futurama%'"
|
|
215
221
|
topics = Topic.paginate_by_sql sql, :page => 1, :per_page => 1
|
|
216
222
|
topics.total_entries.should == 1
|
|
217
|
-
topics.first.attributes.has_key?('title').should
|
|
223
|
+
topics.first.attributes.has_key?('title').should be(false)
|
|
218
224
|
}.should run_queries(2)
|
|
219
225
|
end
|
|
220
226
|
|
|
@@ -272,12 +278,12 @@ describe WillPaginate::ActiveRecord do
|
|
|
272
278
|
}.should run_queries(1)
|
|
273
279
|
end
|
|
274
280
|
|
|
275
|
-
it "should get second (inexistent) page of Topics, requiring
|
|
281
|
+
it "should get second (inexistent) page of Topics, requiring 1 query" do
|
|
276
282
|
lambda {
|
|
277
283
|
result = Topic.paginate :page => 2
|
|
278
284
|
result.total_pages.should == 1
|
|
279
285
|
result.should be_empty
|
|
280
|
-
}.should run_queries(
|
|
286
|
+
}.should run_queries(1)
|
|
281
287
|
end
|
|
282
288
|
|
|
283
289
|
describe "associations" do
|
|
@@ -38,7 +38,6 @@ end
|
|
|
38
38
|
module ActiverecordTestConnector
|
|
39
39
|
extend self
|
|
40
40
|
|
|
41
|
-
attr_accessor :able_to_connect
|
|
42
41
|
attr_accessor :connected
|
|
43
42
|
|
|
44
43
|
FIXTURES_PATH = File.expand_path('../../fixtures', __FILE__)
|
|
@@ -49,18 +48,14 @@ module ActiverecordTestConnector
|
|
|
49
48
|
|
|
50
49
|
# Set our defaults
|
|
51
50
|
self.connected = false
|
|
52
|
-
self.able_to_connect = true
|
|
53
51
|
|
|
54
52
|
def setup
|
|
55
|
-
unless self.connected
|
|
53
|
+
unless self.connected
|
|
56
54
|
setup_connection
|
|
57
55
|
load_schema
|
|
58
56
|
add_load_path FIXTURES_PATH
|
|
59
57
|
self.connected = true
|
|
60
58
|
end
|
|
61
|
-
rescue Exception => e # errors from ActiveRecord setup
|
|
62
|
-
$stderr.puts "\nSkipping ActiveRecord tests: #{e}\n\n"
|
|
63
|
-
self.able_to_connect = false
|
|
64
59
|
end
|
|
65
60
|
|
|
66
61
|
private
|
|
@@ -84,6 +79,13 @@ module ActiverecordTestConnector
|
|
|
84
79
|
ActiveRecord::Base.configurations = { db => configuration }
|
|
85
80
|
ActiveRecord::Base.establish_connection(db.to_sym)
|
|
86
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
|
|
87
89
|
end
|
|
88
90
|
|
|
89
91
|
def load_schema
|
|
@@ -95,7 +97,13 @@ module ActiverecordTestConnector
|
|
|
95
97
|
$stdout = STDOUT
|
|
96
98
|
end
|
|
97
99
|
end
|
|
98
|
-
|
|
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
|
+
|
|
99
107
|
module FixtureSetup
|
|
100
108
|
def fixtures(*tables)
|
|
101
109
|
table_names = tables.map { |t| t.to_s }
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
if !ENV['SKIP_NONRAILS_TESTS']
|
|
4
4
|
require 'will_paginate/data_mapper'
|
|
5
5
|
require File.expand_path('../data_mapper_test_connector', __FILE__)
|
|
6
|
-
rescue LoadError => error
|
|
7
|
-
warn "Error running DataMapper specs: #{error.message}"
|
|
8
|
-
datamapper_loaded = false
|
|
9
|
-
else
|
|
10
6
|
datamapper_loaded = true
|
|
7
|
+
else
|
|
8
|
+
datamapper_loaded = false
|
|
11
9
|
end
|
|
12
10
|
|
|
13
11
|
describe WillPaginate::DataMapper do
|
|
@@ -1,18 +1,25 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
if !ENV['SKIP_NONRAILS_TESTS']
|
|
4
|
+
if defined?(Rails)
|
|
5
|
+
old_rails = Rails
|
|
6
|
+
# Mongoid sees the `Rails` constant and then proceeds to `require "rails"`
|
|
7
|
+
# from its railtie. This tricks it into believing there is no Rails.
|
|
8
|
+
Object.send(:remove_const, :Rails)
|
|
9
|
+
end
|
|
4
10
|
require 'will_paginate/mongoid'
|
|
5
|
-
|
|
6
|
-
warn "Error running Mongoid specs: #{error.message}"
|
|
7
|
-
mongoid_loaded = false
|
|
8
|
-
else
|
|
9
|
-
Mongoid.connect_to 'will_paginate_test'
|
|
11
|
+
Object.send(:const_set, :Rails, old_rails) if old_rails
|
|
10
12
|
|
|
13
|
+
Mongo::Logger.logger.level = Logger::INFO
|
|
14
|
+
|
|
15
|
+
Mongoid.connect_to 'will_paginate_test'
|
|
11
16
|
class MongoidModel
|
|
12
17
|
include Mongoid::Document
|
|
13
18
|
end
|
|
14
19
|
|
|
15
20
|
mongoid_loaded = true
|
|
21
|
+
else
|
|
22
|
+
mongoid_loaded = false
|
|
16
23
|
end
|
|
17
24
|
|
|
18
25
|
describe WillPaginate::Mongoid do
|
data/spec/finders/sequel_spec.rb
CHANGED
|
@@ -1,26 +1,25 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
if !ENV['SKIP_NONRAILS_TESTS']
|
|
4
4
|
require 'will_paginate/sequel'
|
|
5
5
|
require File.expand_path('../sequel_test_connector', __FILE__)
|
|
6
|
-
rescue LoadError, ArgumentError => error
|
|
7
|
-
warn "Error running Sequel specs: #{error.message}"
|
|
8
|
-
sequel_loaded = false
|
|
9
|
-
else
|
|
10
6
|
sequel_loaded = true
|
|
7
|
+
else
|
|
8
|
+
sequel_loaded = false
|
|
11
9
|
end
|
|
12
10
|
|
|
13
11
|
describe Sequel::Dataset::Pagination, 'extension' do
|
|
14
12
|
|
|
15
13
|
class Car < Sequel::Model
|
|
14
|
+
self.dataset = dataset.extension(:pagination)
|
|
16
15
|
end
|
|
17
16
|
|
|
18
17
|
it "should have the #paginate method" do
|
|
19
|
-
Car.should respond_to(:paginate)
|
|
18
|
+
Car.dataset.should respond_to(:paginate)
|
|
20
19
|
end
|
|
21
20
|
|
|
22
21
|
it "should NOT have the #paginate_by_sql method" do
|
|
23
|
-
Car.should_not respond_to(:paginate_by_sql)
|
|
22
|
+
Car.dataset.should_not respond_to(:paginate_by_sql)
|
|
24
23
|
end
|
|
25
24
|
|
|
26
25
|
describe 'pagination' do
|
|
@@ -31,7 +30,7 @@ describe Sequel::Dataset::Pagination, 'extension' do
|
|
|
31
30
|
end
|
|
32
31
|
|
|
33
32
|
it "should imitate WillPaginate::Collection" do
|
|
34
|
-
result = Car.paginate(1, 2)
|
|
33
|
+
result = Car.dataset.paginate(1, 2)
|
|
35
34
|
|
|
36
35
|
result.should_not be_empty
|
|
37
36
|
result.size.should == 2
|
|
@@ -43,16 +42,16 @@ describe Sequel::Dataset::Pagination, 'extension' do
|
|
|
43
42
|
end
|
|
44
43
|
|
|
45
44
|
it "should perform" do
|
|
46
|
-
Car.paginate(1, 2).all.should == [Car[1], Car[2]]
|
|
45
|
+
Car.dataset.paginate(1, 2).all.should == [Car[1], Car[2]]
|
|
47
46
|
end
|
|
48
47
|
|
|
49
48
|
it "should be empty" do
|
|
50
|
-
result = Car.paginate(3, 2)
|
|
49
|
+
result = Car.dataset.paginate(3, 2)
|
|
51
50
|
result.should be_empty
|
|
52
51
|
end
|
|
53
52
|
|
|
54
53
|
it "should perform with #select and #order" do
|
|
55
|
-
result = Car.select("name as foo"
|
|
54
|
+
result = Car.select(Sequel.lit("name as foo")).order(:name).paginate(1, 2).all
|
|
56
55
|
result.size.should == 2
|
|
57
56
|
result.first.values[:foo].should == "Aston Martin"
|
|
58
57
|
end
|
data/spec/page_number_spec.rb
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require 'spec_helper'
|
|
2
2
|
require 'will_paginate/page_number'
|
|
3
|
+
require 'json'
|
|
3
4
|
|
|
4
5
|
describe WillPaginate::PageNumber do
|
|
5
6
|
describe "valid" do
|
|
@@ -23,12 +24,12 @@ describe WillPaginate::PageNumber do
|
|
|
23
24
|
(num.is_a? Numeric).should be
|
|
24
25
|
end
|
|
25
26
|
|
|
26
|
-
it "is a kind of
|
|
27
|
-
(num.is_a?
|
|
27
|
+
it "is a kind of Integer" do
|
|
28
|
+
(num.is_a? Integer).should be
|
|
28
29
|
end
|
|
29
30
|
|
|
30
|
-
it "isn't directly a
|
|
31
|
-
(num.instance_of?
|
|
31
|
+
it "isn't directly a Integer" do
|
|
32
|
+
(num.instance_of? Integer).should_not be
|
|
32
33
|
end
|
|
33
34
|
|
|
34
35
|
it "passes the PageNumber=== type check" do |variable|
|
|
@@ -37,7 +38,14 @@ describe WillPaginate::PageNumber do
|
|
|
37
38
|
|
|
38
39
|
it "passes the Numeric=== type check" do |variable|
|
|
39
40
|
(Numeric === num).should be
|
|
40
|
-
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it "fails the Numeric=== type check" do |variable|
|
|
44
|
+
(Integer === num).should_not be
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it "serializes as JSON number" do
|
|
48
|
+
JSON.dump(page: num).should eq('{"page":12}')
|
|
41
49
|
end
|
|
42
50
|
end
|
|
43
51
|
|
data/spec/spec_helper.rb
CHANGED
|
@@ -14,7 +14,8 @@ Routes.draw do
|
|
|
14
14
|
get 'ibocorp(/:page)' => 'ibocorp#index',
|
|
15
15
|
:constraints => { :page => /\d+/ }, :defaults => { :page => 1 }
|
|
16
16
|
|
|
17
|
-
get '
|
|
17
|
+
get 'foo/bar' => 'foo#bar'
|
|
18
|
+
get 'baz/list' => 'baz#list'
|
|
18
19
|
end
|
|
19
20
|
|
|
20
21
|
describe WillPaginate::ActionView do
|
|
@@ -38,7 +39,14 @@ describe WillPaginate::ActionView do
|
|
|
38
39
|
attr_reader :assigns, :controller, :request
|
|
39
40
|
|
|
40
41
|
def render(locals)
|
|
41
|
-
|
|
42
|
+
lookup_context = []
|
|
43
|
+
if defined? ActionView::LookupContext
|
|
44
|
+
lookup_context = ActionView::LookupContext.new(lookup_context)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
klass = ActionView::Base
|
|
48
|
+
klass = klass.with_empty_template_cache if klass.respond_to?(:with_empty_template_cache)
|
|
49
|
+
@view = klass.new(lookup_context, @assigns, @controller)
|
|
42
50
|
@view.request = @request
|
|
43
51
|
@view.singleton_class.send(:include, @controller._routes.url_helpers)
|
|
44
52
|
@view.render(:inline => @template, :locals => locals)
|
|
@@ -80,9 +88,9 @@ describe WillPaginate::ActionView do
|
|
|
80
88
|
validate_page_numbers [1,1,3,3], elements
|
|
81
89
|
# test rel attribute values:
|
|
82
90
|
text(elements[0]).should == 'Prev'
|
|
83
|
-
elements[0]['rel'].should == 'prev
|
|
91
|
+
elements[0]['rel'].should == 'prev'
|
|
84
92
|
text(elements[1]).should == '1'
|
|
85
|
-
elements[1]['rel'].should == 'prev
|
|
93
|
+
elements[1]['rel'].should == 'prev'
|
|
86
94
|
text(elements[3]).should == 'Next'
|
|
87
95
|
elements[3]['rel'].should == 'next'
|
|
88
96
|
end
|
|
@@ -120,16 +128,20 @@ describe WillPaginate::ActionView do
|
|
|
120
128
|
it "should match expected markup" do
|
|
121
129
|
paginate
|
|
122
130
|
expected = <<-HTML
|
|
123
|
-
<div class="pagination"><span class="previous_page disabled">← Previous</span>
|
|
124
|
-
<em class="current">1</em>
|
|
125
|
-
<a href="/foo/bar?page=2" rel="next">2</a>
|
|
126
|
-
<a href="/foo/bar?page=3">3</a>
|
|
131
|
+
<div class="pagination" role="navigation" aria-label="Pagination"><span class="previous_page disabled">← Previous</span>
|
|
132
|
+
<em class="current" aria-label="Page 1" aria-current="page">1</em>
|
|
133
|
+
<a href="/foo/bar?page=2" aria-label="Page 2" rel="next">2</a>
|
|
134
|
+
<a href="/foo/bar?page=3" aria-label="Page 3">3</a>
|
|
127
135
|
<a href="/foo/bar?page=2" class="next_page" rel="next">Next →</a></div>
|
|
128
136
|
HTML
|
|
129
137
|
expected.strip!.gsub!(/\s{2,}/, ' ')
|
|
130
|
-
expected_dom = parse_html_document(expected)
|
|
138
|
+
expected_dom = parse_html_document(expected)
|
|
131
139
|
|
|
132
|
-
|
|
140
|
+
if expected_dom.respond_to?(:canonicalize)
|
|
141
|
+
html_document.canonicalize.should == expected_dom.canonicalize
|
|
142
|
+
else
|
|
143
|
+
html_document.root.should == expected_dom.root
|
|
144
|
+
end
|
|
133
145
|
end
|
|
134
146
|
|
|
135
147
|
it "should output escaped URLs" do
|
|
@@ -50,7 +50,7 @@ module ViewExampleGroup
|
|
|
50
50
|
end
|
|
51
51
|
|
|
52
52
|
def parse_html_document(html)
|
|
53
|
-
|
|
53
|
+
if defined?(Rails::Dom::Testing::Assertions)
|
|
54
54
|
Nokogiri::HTML::Document.parse(html)
|
|
55
55
|
else
|
|
56
56
|
HTML::Document.new(html, true, false)
|
metadata
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: will_paginate
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.
|
|
4
|
+
version: 3.3.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Mislav Marohnić
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2020-02-26 00:00:00.000000000 Z
|
|
12
12
|
dependencies: []
|
|
13
13
|
description: will_paginate provides a simple API for performing paginated queries
|
|
14
14
|
with Active Record, DataMapper and Sequel, and includes helpers for rendering pagination
|
|
15
|
-
links in Rails, Sinatra and Merb web apps.
|
|
15
|
+
links in Rails, Sinatra, Hanami, and Merb web apps.
|
|
16
16
|
email: mislav.marohnic@gmail.com
|
|
17
17
|
executables: []
|
|
18
18
|
extensions: []
|
|
@@ -39,6 +39,7 @@ files:
|
|
|
39
39
|
- lib/will_paginate/version.rb
|
|
40
40
|
- lib/will_paginate/view_helpers.rb
|
|
41
41
|
- lib/will_paginate/view_helpers/action_view.rb
|
|
42
|
+
- lib/will_paginate/view_helpers/hanami.rb
|
|
42
43
|
- lib/will_paginate/view_helpers/link_renderer.rb
|
|
43
44
|
- lib/will_paginate/view_helpers/link_renderer_base.rb
|
|
44
45
|
- lib/will_paginate/view_helpers/merb.rb
|
|
@@ -77,10 +78,15 @@ files:
|
|
|
77
78
|
- spec/view_helpers/base_spec.rb
|
|
78
79
|
- spec/view_helpers/link_renderer_base_spec.rb
|
|
79
80
|
- spec/view_helpers/view_example_group.rb
|
|
80
|
-
homepage: https://github.com/mislav/will_paginate
|
|
81
|
+
homepage: https://github.com/mislav/will_paginate
|
|
81
82
|
licenses:
|
|
82
83
|
- MIT
|
|
83
|
-
metadata:
|
|
84
|
+
metadata:
|
|
85
|
+
bug_tracker_uri: https://github.com/mislav/will_paginate/issues
|
|
86
|
+
changelog_uri: https://github.com/mislav/will_paginate/releases/tag/v3.3.0
|
|
87
|
+
documentation_uri: https://www.rubydoc.info/gems/will_paginate/3.3.0
|
|
88
|
+
source_code_uri: https://github.com/mislav/will_paginate/tree/v3.3.0
|
|
89
|
+
wiki_uri: https://github.com/mislav/will_paginate/wiki
|
|
84
90
|
post_install_message:
|
|
85
91
|
rdoc_options:
|
|
86
92
|
- "--main"
|
|
@@ -92,15 +98,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
92
98
|
requirements:
|
|
93
99
|
- - ">="
|
|
94
100
|
- !ruby/object:Gem::Version
|
|
95
|
-
version: '0'
|
|
101
|
+
version: '2.0'
|
|
96
102
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
97
103
|
requirements:
|
|
98
104
|
- - ">="
|
|
99
105
|
- !ruby/object:Gem::Version
|
|
100
106
|
version: '0'
|
|
101
107
|
requirements: []
|
|
102
|
-
|
|
103
|
-
rubygems_version: 2.5.1
|
|
108
|
+
rubygems_version: 3.1.2
|
|
104
109
|
signing_key:
|
|
105
110
|
specification_version: 4
|
|
106
111
|
summary: Pagination plugin for web frameworks and other apps
|