jcnetdev-will_paginate 2.3.21

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.
Files changed (44) hide show
  1. data/CHANGELOG +92 -0
  2. data/LICENSE +18 -0
  3. data/README.rdoc +131 -0
  4. data/Rakefile +62 -0
  5. data/examples/apple-circle.gif +0 -0
  6. data/examples/index.haml +69 -0
  7. data/examples/index.html +92 -0
  8. data/examples/pagination.css +90 -0
  9. data/examples/pagination.sass +91 -0
  10. data/init.rb +1 -0
  11. data/lib/will_paginate.rb +86 -0
  12. data/lib/will_paginate/array.rb +16 -0
  13. data/lib/will_paginate/collection.rb +145 -0
  14. data/lib/will_paginate/core_ext.rb +32 -0
  15. data/lib/will_paginate/finder.rb +247 -0
  16. data/lib/will_paginate/named_scope.rb +132 -0
  17. data/lib/will_paginate/named_scope_patch.rb +39 -0
  18. data/lib/will_paginate/version.rb +9 -0
  19. data/lib/will_paginate/view_helpers.rb +373 -0
  20. data/test/boot.rb +21 -0
  21. data/test/collection_test.rb +140 -0
  22. data/test/console +8 -0
  23. data/test/database.yml +22 -0
  24. data/test/finder_test.rb +434 -0
  25. data/test/fixtures/admin.rb +3 -0
  26. data/test/fixtures/developer.rb +13 -0
  27. data/test/fixtures/developers_projects.yml +13 -0
  28. data/test/fixtures/project.rb +15 -0
  29. data/test/fixtures/projects.yml +6 -0
  30. data/test/fixtures/replies.yml +29 -0
  31. data/test/fixtures/reply.rb +7 -0
  32. data/test/fixtures/schema.rb +38 -0
  33. data/test/fixtures/topic.rb +6 -0
  34. data/test/fixtures/topics.yml +30 -0
  35. data/test/fixtures/user.rb +2 -0
  36. data/test/fixtures/users.yml +35 -0
  37. data/test/helper.rb +37 -0
  38. data/test/lib/activerecord_test_case.rb +36 -0
  39. data/test/lib/activerecord_test_connector.rb +69 -0
  40. data/test/lib/load_fixtures.rb +11 -0
  41. data/test/lib/view_test_process.rb +165 -0
  42. data/test/tasks.rake +56 -0
  43. data/test/view_test.rb +355 -0
  44. metadata +140 -0
@@ -0,0 +1,56 @@
1
+ require 'rake/testtask'
2
+
3
+ desc 'Test the will_paginate plugin.'
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.pattern = 'test/**/*_test.rb'
6
+ t.verbose = true
7
+ t.libs << 'test'
8
+ end
9
+
10
+ # I want to specify environment variables at call time
11
+ class EnvTestTask < Rake::TestTask
12
+ attr_accessor :env
13
+
14
+ def ruby(*args)
15
+ env.each { |key, value| ENV[key] = value } if env
16
+ super
17
+ env.keys.each { |key| ENV.delete key } if env
18
+ end
19
+ end
20
+
21
+ for configuration in %w( sqlite3 mysql postgres )
22
+ EnvTestTask.new("test_#{configuration}") do |t|
23
+ t.pattern = 'test/finder_test.rb'
24
+ t.verbose = true
25
+ t.env = { 'DB' => configuration }
26
+ t.libs << 'test'
27
+ end
28
+ end
29
+
30
+ task :test_databases => %w(test_mysql test_sqlite3 test_postgres)
31
+
32
+ desc %{Test everything on SQLite3, MySQL and PostgreSQL}
33
+ task :test_full => %w(test test_mysql test_postgres)
34
+
35
+ desc %{Test everything with Rails 1.2.x and 2.0.x gems}
36
+ task :test_all do
37
+ all = Rake::Task['test_full']
38
+ ENV['RAILS_VERSION'] = '~>1.2.6'
39
+ all.invoke
40
+ # reset the invoked flag
41
+ %w( test_full test test_mysql test_postgres ).each do |name|
42
+ Rake::Task[name].instance_variable_set '@already_invoked', false
43
+ end
44
+ # do it again
45
+ ENV['RAILS_VERSION'] = '~>2.0.2'
46
+ all.invoke
47
+ end
48
+
49
+ task :rcov do
50
+ excludes = %w( lib/will_paginate/named_scope*
51
+ lib/will_paginate/core_ext.rb
52
+ lib/will_paginate.rb
53
+ rails* )
54
+
55
+ system %[rcov -Itest:lib test/*.rb -x #{excludes.join(',')}]
56
+ end
@@ -0,0 +1,355 @@
1
+ require 'helper'
2
+ require 'lib/view_test_process'
3
+
4
+ class AdditionalLinkAttributesRenderer < WillPaginate::LinkRenderer
5
+ def initialize(link_attributes = nil)
6
+ super()
7
+ @additional_link_attributes = link_attributes || { :default => 'true' }
8
+ end
9
+
10
+ def page_link(page, text, attributes = {})
11
+ @template.link_to text, url_for(page), attributes.merge(@additional_link_attributes)
12
+ end
13
+ end
14
+
15
+ class ViewTest < WillPaginate::ViewTestCase
16
+
17
+ ## basic pagination ##
18
+
19
+ def test_will_paginate
20
+ paginate do |pagination|
21
+ assert_select 'a[href]', 3 do |elements|
22
+ validate_page_numbers [2,3,2], elements
23
+ assert_select elements.last, ':last-child', "Next &raquo;"
24
+ end
25
+ assert_select 'span', 2
26
+ assert_select 'span.disabled:first-child', '&laquo; Previous'
27
+ assert_select 'span.current', '1'
28
+ assert_equal '&laquo; Previous 1 2 3 Next &raquo;', pagination.first.inner_text
29
+ end
30
+ end
31
+
32
+ def test_no_pagination_when_page_count_is_one
33
+ paginate :per_page => 30
34
+ assert_equal '', @html_result
35
+ end
36
+
37
+ def test_will_paginate_with_options
38
+ paginate({ :page => 2 },
39
+ :class => 'will_paginate', :prev_label => 'Prev', :next_label => 'Next') do
40
+ assert_select 'a[href]', 4 do |elements|
41
+ validate_page_numbers [1,1,3,3], elements
42
+ # test rel attribute values:
43
+ assert_select elements[1], 'a', '1' do |link|
44
+ assert_equal 'prev start', link.first['rel']
45
+ end
46
+ assert_select elements.first, 'a', "Prev" do |link|
47
+ assert_equal 'prev start', link.first['rel']
48
+ end
49
+ assert_select elements.last, 'a', "Next" do |link|
50
+ assert_equal 'next', link.first['rel']
51
+ end
52
+ end
53
+ assert_select 'span.current', '2'
54
+ end
55
+ end
56
+
57
+ def test_will_paginate_using_renderer_class
58
+ paginate({}, :renderer => AdditionalLinkAttributesRenderer) do
59
+ assert_select 'a[default=true]', 3
60
+ end
61
+ end
62
+
63
+ def test_will_paginate_using_renderer_instance
64
+ renderer = WillPaginate::LinkRenderer.new
65
+ renderer.gap_marker = '<span class="my-gap">~~</span>'
66
+
67
+ paginate({ :per_page => 2 }, :inner_window => 0, :outer_window => 0, :renderer => renderer) do
68
+ assert_select 'span.my-gap', '~~'
69
+ end
70
+
71
+ renderer = AdditionalLinkAttributesRenderer.new(:title => 'rendered')
72
+ paginate({}, :renderer => renderer) do
73
+ assert_select 'a[title=rendered]', 3
74
+ end
75
+ end
76
+
77
+ def test_prev_next_links_have_classnames
78
+ paginate do |pagination|
79
+ assert_select 'span.disabled.prev_page:first-child'
80
+ assert_select 'a.next_page[href]:last-child'
81
+ end
82
+ end
83
+
84
+ def test_full_output
85
+ paginate
86
+ expected = <<-HTML
87
+ <div class="pagination"><span class="disabled prev_page">&laquo; Previous</span>
88
+ <span class="current">1</span>
89
+ <a href="/foo/bar?page=2" rel="next">2</a>
90
+ <a href="/foo/bar?page=3">3</a>
91
+ <a href="/foo/bar?page=2" class="next_page" rel="next">Next &raquo;</a></div>
92
+ HTML
93
+ expected.strip!.gsub!(/\s{2,}/, ' ')
94
+
95
+ assert_dom_equal expected, @html_result
96
+ end
97
+
98
+ def test_escaping_of_urls
99
+ paginate({:page => 1, :per_page => 1, :total_entries => 2},
100
+ :page_links => false, :params => { :tag => '<br>' })
101
+
102
+ assert_select 'a[href]', 1 do |links|
103
+ query = links.first['href'].split('?', 2)[1]
104
+ assert_equal %w(page=2 tag=%3Cbr%3E), query.split('&amp;').sort
105
+ end
106
+ end
107
+
108
+ ## advanced options for pagination ##
109
+
110
+ def test_will_paginate_without_container
111
+ paginate({}, :container => false)
112
+ assert_select 'div.pagination', 0, 'main DIV present when it shouldn\'t'
113
+ assert_select 'a[href]', 3
114
+ end
115
+
116
+ def test_will_paginate_without_page_links
117
+ paginate({ :page => 2 }, :page_links => false) do
118
+ assert_select 'a[href]', 2 do |elements|
119
+ validate_page_numbers [1,3], elements
120
+ end
121
+ end
122
+ end
123
+
124
+ def test_will_paginate_windows
125
+ paginate({ :page => 6, :per_page => 1 }, :inner_window => 1) do |pagination|
126
+ assert_select 'a[href]', 8 do |elements|
127
+ validate_page_numbers [5,1,2,5,7,10,11,7], elements
128
+ assert_select elements.first, 'a', '&laquo; Previous'
129
+ assert_select elements.last, 'a', 'Next &raquo;'
130
+ end
131
+ assert_select 'span.current', '6'
132
+ assert_equal '&laquo; Previous 1 2 &hellip; 5 6 7 &hellip; 10 11 Next &raquo;', pagination.first.inner_text
133
+ end
134
+ end
135
+
136
+ def test_will_paginate_eliminates_small_gaps
137
+ paginate({ :page => 6, :per_page => 1 }, :inner_window => 2) do
138
+ assert_select 'a[href]', 12 do |elements|
139
+ validate_page_numbers [5,1,2,3,4,5,7,8,9,10,11,7], elements
140
+ end
141
+ end
142
+ end
143
+
144
+ def test_container_id
145
+ paginate do |div|
146
+ assert_nil div.first['id']
147
+ end
148
+
149
+ # magic ID
150
+ paginate({}, :id => true) do |div|
151
+ assert_equal 'fixnums_pagination', div.first['id']
152
+ end
153
+
154
+ # explicit ID
155
+ paginate({}, :id => 'custom_id') do |div|
156
+ assert_equal 'custom_id', div.first['id']
157
+ end
158
+ end
159
+
160
+ ## other helpers ##
161
+
162
+ def test_paginated_section
163
+ @template = <<-ERB
164
+ <% paginated_section collection, options do %>
165
+ <%= content_tag :div, '', :id => "developers" %>
166
+ <% end %>
167
+ ERB
168
+
169
+ paginate
170
+ assert_select 'div.pagination', 2
171
+ assert_select 'div.pagination + div#developers', 1
172
+ end
173
+
174
+ def test_page_entries_info
175
+ @template = '<%= page_entries_info collection %>'
176
+ array = ('a'..'z').to_a
177
+
178
+ paginate array.paginate(:page => 2, :per_page => 5)
179
+ assert_equal %{Displaying strings <b>6&nbsp;-&nbsp;10</b> of <b>26</b> in total},
180
+ @html_result
181
+
182
+ paginate array.paginate(:page => 7, :per_page => 4)
183
+ assert_equal %{Displaying strings <b>25&nbsp;-&nbsp;26</b> of <b>26</b> in total},
184
+ @html_result
185
+ end
186
+
187
+ def test_page_entries_info_with_longer_class_name
188
+ @template = '<%= page_entries_info collection %>'
189
+ collection = ('a'..'z').to_a.paginate
190
+ collection.first.stubs(:class).returns(mock('class', :name => 'ProjectType'))
191
+
192
+ paginate collection
193
+ assert @html_result.index('project types'), "expected <#{@html_result.inspect}> to mention 'project types'"
194
+ end
195
+
196
+ def test_page_entries_info_with_single_page_collection
197
+ @template = '<%= page_entries_info collection %>'
198
+
199
+ paginate(('a'..'d').to_a.paginate(:page => 1, :per_page => 5))
200
+ assert_equal %{Displaying <b>all 4</b> strings}, @html_result
201
+
202
+ paginate(['a'].paginate(:page => 1, :per_page => 5))
203
+ assert_equal %{Displaying <b>1</b> string}, @html_result
204
+
205
+ paginate([].paginate(:page => 1, :per_page => 5))
206
+ assert_equal %{No entries found}, @html_result
207
+ end
208
+
209
+ def test_page_entries_info_with_custom_entry_name
210
+ @template = '<%= page_entries_info collection, :entry_name => "author" %>'
211
+
212
+ entries = (1..20).to_a
213
+
214
+ paginate(entries.paginate(:page => 1, :per_page => 5))
215
+ assert_equal %{Displaying authors <b>1&nbsp;-&nbsp;5</b> of <b>20</b> in total}, @html_result
216
+
217
+ paginate(entries.paginate(:page => 1, :per_page => 20))
218
+ assert_equal %{Displaying <b>all 20</b> authors}, @html_result
219
+
220
+ paginate(['a'].paginate(:page => 1, :per_page => 5))
221
+ assert_equal %{Displaying <b>1</b> author}, @html_result
222
+
223
+ paginate([].paginate(:page => 1, :per_page => 5))
224
+ assert_equal %{No authors found}, @html_result
225
+ end
226
+
227
+ ## parameter handling in page links ##
228
+
229
+ def test_will_paginate_preserves_parameters_on_get
230
+ @request.params :foo => { :bar => 'baz' }
231
+ paginate
232
+ assert_links_match /foo%5Bbar%5D=baz/
233
+ end
234
+
235
+ def test_will_paginate_doesnt_preserve_parameters_on_post
236
+ @request.post
237
+ @request.params :foo => 'bar'
238
+ paginate
239
+ assert_no_links_match /foo=bar/
240
+ end
241
+
242
+ def test_adding_additional_parameters
243
+ paginate({}, :params => { :foo => 'bar' })
244
+ assert_links_match /foo=bar/
245
+ end
246
+
247
+ def test_adding_anchor_parameter
248
+ paginate({}, :params => { :anchor => 'anchor' })
249
+ assert_links_match /#anchor$/
250
+ end
251
+
252
+ def test_removing_arbitrary_parameters
253
+ @request.params :foo => 'bar'
254
+ paginate({}, :params => { :foo => nil })
255
+ assert_no_links_match /foo=bar/
256
+ end
257
+
258
+ def test_adding_additional_route_parameters
259
+ paginate({}, :params => { :controller => 'baz', :action => 'list' })
260
+ assert_links_match %r{\Wbaz/list\W}
261
+ end
262
+
263
+ def test_will_paginate_with_custom_page_param
264
+ paginate({ :page => 2 }, :param_name => :developers_page) do
265
+ assert_select 'a[href]', 4 do |elements|
266
+ validate_page_numbers [1,1,3,3], elements, :developers_page
267
+ end
268
+ end
269
+ end
270
+
271
+ def test_complex_custom_page_param
272
+ @request.params :developers => { :page => 2 }
273
+
274
+ paginate({ :page => 2 }, :param_name => 'developers[page]') do
275
+ assert_select 'a[href]', 4 do |links|
276
+ assert_links_match /\?developers%5Bpage%5D=\d+$/, links
277
+ validate_page_numbers [1,1,3,3], links, 'developers[page]'
278
+ end
279
+ end
280
+ end
281
+
282
+ def test_custom_routing_page_param
283
+ @request.symbolized_path_parameters.update :controller => 'dummy', :action => nil
284
+ paginate :per_page => 2 do
285
+ assert_select 'a[href]', 6 do |links|
286
+ assert_links_match %r{/page/(\d+)$}, links, [2, 3, 4, 5, 6, 2]
287
+ end
288
+ end
289
+ end
290
+
291
+ def test_custom_routing_page_param_with_dot_separator
292
+ @request.symbolized_path_parameters.update :controller => 'dummy', :action => 'dots'
293
+ paginate :per_page => 2 do
294
+ assert_select 'a[href]', 6 do |links|
295
+ assert_links_match %r{/page\.(\d+)$}, links, [2, 3, 4, 5, 6, 2]
296
+ end
297
+ end
298
+ end
299
+
300
+ def test_custom_routing_with_first_page_hidden
301
+ @request.symbolized_path_parameters.update :controller => 'ibocorp', :action => nil
302
+ paginate :page => 2, :per_page => 2 do
303
+ assert_select 'a[href]', 7 do |links|
304
+ assert_links_match %r{/ibocorp(?:/(\d+))?$}, links, [nil, nil, 3, 4, 5, 6, 3]
305
+ end
306
+ end
307
+ end
308
+
309
+ ## internal hardcore stuff ##
310
+
311
+ class LegacyCollection < WillPaginate::Collection
312
+ alias :page_count :total_pages
313
+ undef :total_pages
314
+ end
315
+
316
+ def test_deprecation_notices_with_page_count
317
+ collection = LegacyCollection.new(1, 1, 2)
318
+
319
+ assert_deprecated collection.class.name do
320
+ paginate collection
321
+ end
322
+ end
323
+
324
+ uses_mocha 'view internals' do
325
+ def test_collection_name_can_be_guessed
326
+ collection = mock
327
+ collection.expects(:total_pages).returns(1)
328
+
329
+ @template = '<%= will_paginate options %>'
330
+ @controller.controller_name = 'developers'
331
+ @view.assigns['developers'] = collection
332
+
333
+ paginate(nil)
334
+ end
335
+ end
336
+
337
+ def test_inferred_collection_name_raises_error_when_nil
338
+ @template = '<%= will_paginate options %>'
339
+ @controller.controller_name = 'developers'
340
+
341
+ e = assert_raise ArgumentError do
342
+ paginate(nil)
343
+ end
344
+ assert e.message.include?('@developers')
345
+ end
346
+
347
+ if ActionController::Base.respond_to? :rescue_responses
348
+ # only on Rails 2
349
+ def test_rescue_response_hook_presence
350
+ assert_equal :not_found,
351
+ ActionController::Base.rescue_responses['WillPaginate::InvalidPage']
352
+ end
353
+ end
354
+
355
+ end
metadata ADDED
@@ -0,0 +1,140 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jcnetdev-will_paginate
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.3.21
5
+ platform: ruby
6
+ authors:
7
+ - "Mislav Marohni\xC4\x87"
8
+ - PJ Hyett
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2008-07-04 00:00:00 -07:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: activesupport
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 1.4.4
24
+ version:
25
+ description: The will_paginate library provides a simple, yet powerful and extensible API for ActiveRecord pagination and rendering of pagination links in ActionView templates.
26
+ email: mislav.marohnic@gmail.com
27
+ executables: []
28
+
29
+ extensions: []
30
+
31
+ extra_rdoc_files:
32
+ - README.rdoc
33
+ - LICENSE
34
+ - CHANGELOG
35
+ files:
36
+ - CHANGELOG
37
+ - LICENSE
38
+ - README.rdoc
39
+ - Rakefile
40
+ - examples
41
+ - examples/apple-circle.gif
42
+ - examples/index.haml
43
+ - examples/index.html
44
+ - examples/pagination.css
45
+ - examples/pagination.sass
46
+ - init.rb
47
+ - lib
48
+ - lib/will_paginate
49
+ - lib/will_paginate.rb
50
+ - lib/will_paginate/array.rb
51
+ - lib/will_paginate/collection.rb
52
+ - lib/will_paginate/core_ext.rb
53
+ - lib/will_paginate/finder.rb
54
+ - lib/will_paginate/named_scope.rb
55
+ - lib/will_paginate/named_scope_patch.rb
56
+ - lib/will_paginate/version.rb
57
+ - lib/will_paginate/view_helpers.rb
58
+ - test
59
+ - test/boot.rb
60
+ - test/collection_test.rb
61
+ - test/console
62
+ - test/database.yml
63
+ - test/finder_test.rb
64
+ - test/fixtures
65
+ - test/fixtures/admin.rb
66
+ - test/fixtures/developer.rb
67
+ - test/fixtures/developers_projects.yml
68
+ - test/fixtures/project.rb
69
+ - test/fixtures/projects.yml
70
+ - test/fixtures/replies.yml
71
+ - test/fixtures/reply.rb
72
+ - test/fixtures/schema.rb
73
+ - test/fixtures/topic.rb
74
+ - test/fixtures/topics.yml
75
+ - test/fixtures/user.rb
76
+ - test/fixtures/users.yml
77
+ - test/helper.rb
78
+ - test/lib
79
+ - test/lib/activerecord_test_case.rb
80
+ - test/lib/activerecord_test_connector.rb
81
+ - test/lib/load_fixtures.rb
82
+ - test/lib/view_test_process.rb
83
+ - test/tasks.rake
84
+ - test/view_test.rb
85
+ has_rdoc: true
86
+ homepage: http://github.com/mislav/will_paginate/wikis
87
+ post_install_message:
88
+ rdoc_options:
89
+ - --main
90
+ - README.rdoc
91
+ - --inline-source
92
+ - --charset=UTF-8
93
+ require_paths:
94
+ - lib
95
+ required_ruby_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ version: "0"
100
+ version:
101
+ required_rubygems_version: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: "0"
106
+ version:
107
+ requirements: []
108
+
109
+ rubyforge_project:
110
+ rubygems_version: 1.2.0
111
+ signing_key:
112
+ specification_version: 2
113
+ summary: Most awesome pagination solution for Rails
114
+ test_files:
115
+ - test/boot.rb
116
+ - test/collection_test.rb
117
+ - test/console
118
+ - test/database.yml
119
+ - test/finder_test.rb
120
+ - test/fixtures
121
+ - test/fixtures/admin.rb
122
+ - test/fixtures/developer.rb
123
+ - test/fixtures/developers_projects.yml
124
+ - test/fixtures/project.rb
125
+ - test/fixtures/projects.yml
126
+ - test/fixtures/replies.yml
127
+ - test/fixtures/reply.rb
128
+ - test/fixtures/schema.rb
129
+ - test/fixtures/topic.rb
130
+ - test/fixtures/topics.yml
131
+ - test/fixtures/user.rb
132
+ - test/fixtures/users.yml
133
+ - test/helper.rb
134
+ - test/lib
135
+ - test/lib/activerecord_test_case.rb
136
+ - test/lib/activerecord_test_connector.rb
137
+ - test/lib/load_fixtures.rb
138
+ - test/lib/view_test_process.rb
139
+ - test/tasks.rake
140
+ - test/view_test.rb