will_paginate-rails3 3.0.pre

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 (56) hide show
  1. data/CHANGELOG.rdoc +105 -0
  2. data/LICENSE +18 -0
  3. data/README.rdoc +125 -0
  4. data/Rakefile +32 -0
  5. data/lib/will_paginate.rb +23 -0
  6. data/lib/will_paginate/array.rb +33 -0
  7. data/lib/will_paginate/collection.rb +145 -0
  8. data/lib/will_paginate/core_ext.rb +69 -0
  9. data/lib/will_paginate/deprecation.rb +50 -0
  10. data/lib/will_paginate/finders.rb +9 -0
  11. data/lib/will_paginate/finders/active_record.rb +158 -0
  12. data/lib/will_paginate/finders/active_resource.rb +51 -0
  13. data/lib/will_paginate/finders/base.rb +112 -0
  14. data/lib/will_paginate/finders/data_mapper.rb +30 -0
  15. data/lib/will_paginate/finders/sequel.rb +23 -0
  16. data/lib/will_paginate/railtie.rb +24 -0
  17. data/lib/will_paginate/version.rb +9 -0
  18. data/lib/will_paginate/view_helpers.rb +42 -0
  19. data/lib/will_paginate/view_helpers/action_view.rb +134 -0
  20. data/lib/will_paginate/view_helpers/base.rb +126 -0
  21. data/lib/will_paginate/view_helpers/link_renderer.rb +130 -0
  22. data/lib/will_paginate/view_helpers/link_renderer_base.rb +83 -0
  23. data/lib/will_paginate/view_helpers/merb.rb +13 -0
  24. data/spec/collection_spec.rb +147 -0
  25. data/spec/console +8 -0
  26. data/spec/console_fixtures.rb +8 -0
  27. data/spec/database.yml +22 -0
  28. data/spec/finders/active_record_spec.rb +377 -0
  29. data/spec/finders/active_resource_spec.rb +52 -0
  30. data/spec/finders/activerecord_test_connector.rb +114 -0
  31. data/spec/finders/data_mapper_spec.rb +62 -0
  32. data/spec/finders/data_mapper_test_connector.rb +20 -0
  33. data/spec/finders/sequel_spec.rb +53 -0
  34. data/spec/finders/sequel_test_connector.rb +9 -0
  35. data/spec/finders_spec.rb +76 -0
  36. data/spec/fixtures/admin.rb +3 -0
  37. data/spec/fixtures/developer.rb +13 -0
  38. data/spec/fixtures/developers_projects.yml +13 -0
  39. data/spec/fixtures/project.rb +13 -0
  40. data/spec/fixtures/projects.yml +6 -0
  41. data/spec/fixtures/replies.yml +29 -0
  42. data/spec/fixtures/reply.rb +7 -0
  43. data/spec/fixtures/schema.rb +38 -0
  44. data/spec/fixtures/topic.rb +7 -0
  45. data/spec/fixtures/topics.yml +30 -0
  46. data/spec/fixtures/user.rb +2 -0
  47. data/spec/fixtures/users.yml +35 -0
  48. data/spec/rcov.opts +2 -0
  49. data/spec/spec.opts +2 -0
  50. data/spec/spec_helper.rb +74 -0
  51. data/spec/tasks.rake +60 -0
  52. data/spec/view_helpers/action_view_spec.rb +356 -0
  53. data/spec/view_helpers/base_spec.rb +64 -0
  54. data/spec/view_helpers/link_renderer_base_spec.rb +84 -0
  55. data/spec/view_helpers/view_example_group.rb +103 -0
  56. metadata +127 -0
@@ -0,0 +1,64 @@
1
+ require 'spec_helper'
2
+ require 'will_paginate/view_helpers/base'
3
+ require 'will_paginate/array'
4
+
5
+ describe WillPaginate::ViewHelpers::Base do
6
+
7
+ include WillPaginate::ViewHelpers::Base
8
+
9
+ describe "will_paginate" do
10
+ it "should render" do
11
+ collection = WillPaginate::Collection.new(1, 2, 4)
12
+ renderer = mock 'Renderer'
13
+ renderer.expects(:prepare).with(collection, instance_of(Hash), self)
14
+ renderer.expects(:to_html).returns('<PAGES>')
15
+
16
+ will_paginate(collection, :renderer => renderer).should == '<PAGES>'
17
+ end
18
+
19
+ it "should return nil for single-page collections" do
20
+ collection = mock 'Collection', :total_pages => 1
21
+ will_paginate(collection).should be_nil
22
+ end
23
+ end
24
+
25
+ describe "page_entries_info" do
26
+ before :all do
27
+ @array = ('a'..'z').to_a
28
+ end
29
+
30
+ def info(params, options = {})
31
+ options[:html] ||= false unless options.key?(:html) and options[:html].nil?
32
+ collection = Hash === params ? @array.paginate(params) : params
33
+ page_entries_info collection, options
34
+ end
35
+
36
+ it "should display middle results and total count" do
37
+ info(:page => 2, :per_page => 5).should == "Displaying strings 6 - 10 of 26 in total"
38
+ end
39
+
40
+ it "should output HTML by default" do
41
+ info({ :page => 2, :per_page => 5 }, :html => nil).should ==
42
+ "Displaying strings <b>6&nbsp;-&nbsp;10</b> of <b>26</b> in total"
43
+ end
44
+
45
+ it "should display shortened end results" do
46
+ info(:page => 7, :per_page => 4).should include_phrase('strings 25 - 26')
47
+ end
48
+
49
+ it "should handle longer class names" do
50
+ collection = @array.paginate(:page => 2, :per_page => 5)
51
+ collection.first.stubs(:class).returns(mock('Class', :name => 'ProjectType'))
52
+ info(collection).should include_phrase('project types')
53
+ end
54
+
55
+ it "should adjust output for single-page collections" do
56
+ info(('a'..'d').to_a.paginate(:page => 1, :per_page => 5)).should == "Displaying all 4 strings"
57
+ info(['a'].paginate(:page => 1, :per_page => 5)).should == "Displaying 1 string"
58
+ end
59
+
60
+ it "should display 'no entries found' for empty collections" do
61
+ info([].paginate(:page => 1, :per_page => 5)).should == "No entries found"
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,84 @@
1
+ require 'spec_helper'
2
+ require 'will_paginate/view_helpers/link_renderer_base'
3
+ require 'will_paginate/collection'
4
+
5
+ describe WillPaginate::ViewHelpers::LinkRendererBase do
6
+
7
+ before do
8
+ @renderer = WillPaginate::ViewHelpers::LinkRendererBase.new
9
+ end
10
+
11
+ it "should raise error when unprepared" do
12
+ lambda {
13
+ @renderer.send :param_name
14
+ }.should raise_error
15
+ end
16
+
17
+ it "should prepare with collection and options" do
18
+ prepare({}, :param_name => 'mypage')
19
+ @renderer.send(:current_page).should == 1
20
+ @renderer.send(:param_name).should == 'mypage'
21
+ end
22
+
23
+ it "should have total_pages accessor" do
24
+ prepare :total_pages => 42
25
+ lambda {
26
+ @renderer.send(:total_pages).should == 42
27
+ }.should_not have_deprecation
28
+ end
29
+
30
+ it "should clear old cached values when prepared" do
31
+ prepare({ :total_pages => 1 }, :param_name => 'foo')
32
+ @renderer.send(:total_pages).should == 1
33
+ @renderer.send(:param_name).should == 'foo'
34
+ # prepare with different object and options:
35
+ prepare({ :total_pages => 2 }, :param_name => 'bar')
36
+ @renderer.send(:total_pages).should == 2
37
+ @renderer.send(:param_name).should == 'bar'
38
+ end
39
+
40
+ it "should have pagination definition" do
41
+ prepare({ :total_pages => 1 }, :page_links => true)
42
+ @renderer.pagination.should == [:previous_page, 1, :next_page]
43
+ end
44
+
45
+ describe "visible page numbers" do
46
+ it "should calculate windowed visible links" do
47
+ prepare({ :page => 6, :total_pages => 11 }, :inner_window => 1, :outer_window => 1)
48
+ showing_pages 1, 2, :gap, 5, 6, 7, :gap, 10, 11
49
+ end
50
+
51
+ it "should eliminate small gaps" do
52
+ prepare({ :page => 6, :total_pages => 11 }, :inner_window => 2, :outer_window => 1)
53
+ # pages 4 and 8 appear instead of the gap
54
+ showing_pages 1..11
55
+ end
56
+
57
+ it "should support having no windows at all" do
58
+ prepare({ :page => 4, :total_pages => 7 }, :inner_window => 0, :outer_window => 0)
59
+ showing_pages 1, :gap, 4, :gap, 7
60
+ end
61
+
62
+ it "should adjust upper limit if lower is out of bounds" do
63
+ prepare({ :page => 1, :total_pages => 10 }, :inner_window => 2, :outer_window => 1)
64
+ showing_pages 1, 2, 3, 4, 5, :gap, 9, 10
65
+ end
66
+
67
+ it "should adjust lower limit if upper is out of bounds" do
68
+ prepare({ :page => 10, :total_pages => 10 }, :inner_window => 2, :outer_window => 1)
69
+ showing_pages 1, 2, :gap, 6, 7, 8, 9, 10
70
+ end
71
+
72
+ def showing_pages(*pages)
73
+ pages = pages.first.to_a if Array === pages.first or Range === pages.first
74
+ @renderer.send(:windowed_page_numbers).should == pages
75
+ end
76
+ end
77
+
78
+ protected
79
+
80
+ def prepare(collection_options, options = {})
81
+ @renderer.prepare(collection(collection_options), options)
82
+ end
83
+
84
+ end
@@ -0,0 +1,103 @@
1
+ require 'action_dispatch/testing/assertions'
2
+
3
+ class ViewExampleGroup < Spec::Example::ExampleGroup
4
+
5
+ include ActionDispatch::Assertions::SelectorAssertions
6
+
7
+ def assert(value, message)
8
+ raise message unless value
9
+ end
10
+
11
+ def paginate(collection = {}, options = {}, &block)
12
+ if collection.instance_of? Hash
13
+ page_options = { :page => 1, :total_entries => 11, :per_page => 4 }.merge(collection)
14
+ collection = [1].paginate(page_options)
15
+ end
16
+
17
+ locals = { :collection => collection, :options => options }
18
+
19
+ @render_output = render(locals)
20
+ @html_document = nil
21
+
22
+ if block_given?
23
+ classname = options[:class] || WillPaginate::ViewHelpers.pagination_options[:class]
24
+ assert_select("div.#{classname}", 1, 'no main DIV', &block)
25
+ end
26
+
27
+ @render_output
28
+ end
29
+
30
+ def html_document
31
+ @html_document ||= HTML::Document.new(@render_output, true, false)
32
+ end
33
+
34
+ def response_from_page_or_rjs
35
+ html_document.root
36
+ end
37
+
38
+ def validate_page_numbers(expected, links, param_name = :page)
39
+ param_pattern = /\W#{Regexp.escape(param_name.to_s)}=([^&]*)/
40
+
41
+ links.map { |e|
42
+ e['href'] =~ param_pattern
43
+ $1 ? $1.to_i : $1
44
+ }.should == expected
45
+ end
46
+
47
+ def assert_links_match(pattern, links = nil, numbers = nil)
48
+ links ||= assert_select 'div.pagination a[href]' do |elements|
49
+ elements
50
+ end
51
+
52
+ pages = [] if numbers
53
+
54
+ links.each do |el|
55
+ el['href'].should =~ pattern
56
+ if numbers
57
+ el['href'] =~ pattern
58
+ pages << ($1.nil?? nil : $1.to_i)
59
+ end
60
+ end
61
+
62
+ pages.should == numbers if numbers
63
+ end
64
+
65
+ def assert_no_links_match(pattern)
66
+ assert_select 'div.pagination a[href]' do |elements|
67
+ elements.each do |el|
68
+ el['href'] !~ pattern
69
+ end
70
+ end
71
+ end
72
+
73
+ def build_message(message, pattern, *args)
74
+ built_message = pattern.dup
75
+ for value in args
76
+ built_message.sub! '?', value.inspect
77
+ end
78
+ built_message
79
+ end
80
+
81
+ end
82
+
83
+ Spec::Example::ExampleGroupFactory.register(:view_helpers, ViewExampleGroup)
84
+
85
+ module HTML
86
+ Node.class_eval do
87
+ def inner_text
88
+ children.map(&:inner_text).join('')
89
+ end
90
+ end
91
+
92
+ Text.class_eval do
93
+ def inner_text
94
+ self.to_s
95
+ end
96
+ end
97
+
98
+ Tag.class_eval do
99
+ def inner_text
100
+ childless?? '' : super
101
+ end
102
+ end
103
+ end
metadata ADDED
@@ -0,0 +1,127 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: will_paginate-rails3
3
+ version: !ruby/object:Gem::Version
4
+ hash: 961915916
5
+ prerelease: true
6
+ segments:
7
+ - 3
8
+ - 0
9
+ - pre
10
+ version: 3.0.pre
11
+ platform: ruby
12
+ authors:
13
+ - "Mislav Marohni\xC4\x87"
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-07-26 00:00:00 -04:00
19
+ default_executable:
20
+ dependencies: []
21
+
22
+ description: The will_paginate library provides a simple, yet powerful and extensible API for pagination and rendering of page links in web application templates.
23
+ email: mislav.marohnic@gmail.com
24
+ executables: []
25
+
26
+ extensions: []
27
+
28
+ extra_rdoc_files:
29
+ - README.rdoc
30
+ - LICENSE
31
+ - CHANGELOG.rdoc
32
+ files:
33
+ - Rakefile
34
+ - lib/will_paginate/array.rb
35
+ - lib/will_paginate/collection.rb
36
+ - lib/will_paginate/core_ext.rb
37
+ - lib/will_paginate/deprecation.rb
38
+ - lib/will_paginate/finders/active_record.rb
39
+ - lib/will_paginate/finders/active_resource.rb
40
+ - lib/will_paginate/finders/base.rb
41
+ - lib/will_paginate/finders/data_mapper.rb
42
+ - lib/will_paginate/finders/sequel.rb
43
+ - lib/will_paginate/finders.rb
44
+ - lib/will_paginate/railtie.rb
45
+ - lib/will_paginate/version.rb
46
+ - lib/will_paginate/view_helpers/action_view.rb
47
+ - lib/will_paginate/view_helpers/base.rb
48
+ - lib/will_paginate/view_helpers/link_renderer.rb
49
+ - lib/will_paginate/view_helpers/link_renderer_base.rb
50
+ - lib/will_paginate/view_helpers/merb.rb
51
+ - lib/will_paginate/view_helpers.rb
52
+ - lib/will_paginate.rb
53
+ - spec/collection_spec.rb
54
+ - spec/console
55
+ - spec/console_fixtures.rb
56
+ - spec/database.yml
57
+ - spec/finders/active_record_spec.rb
58
+ - spec/finders/active_resource_spec.rb
59
+ - spec/finders/activerecord_test_connector.rb
60
+ - spec/finders/data_mapper_spec.rb
61
+ - spec/finders/data_mapper_test_connector.rb
62
+ - spec/finders/sequel_spec.rb
63
+ - spec/finders/sequel_test_connector.rb
64
+ - spec/finders_spec.rb
65
+ - spec/fixtures/admin.rb
66
+ - spec/fixtures/developer.rb
67
+ - spec/fixtures/developers_projects.yml
68
+ - spec/fixtures/project.rb
69
+ - spec/fixtures/projects.yml
70
+ - spec/fixtures/replies.yml
71
+ - spec/fixtures/reply.rb
72
+ - spec/fixtures/schema.rb
73
+ - spec/fixtures/topic.rb
74
+ - spec/fixtures/topics.yml
75
+ - spec/fixtures/user.rb
76
+ - spec/fixtures/users.yml
77
+ - spec/rcov.opts
78
+ - spec/spec.opts
79
+ - spec/spec_helper.rb
80
+ - spec/tasks.rake
81
+ - spec/view_helpers/action_view_spec.rb
82
+ - spec/view_helpers/base_spec.rb
83
+ - spec/view_helpers/link_renderer_base_spec.rb
84
+ - spec/view_helpers/view_example_group.rb
85
+ - README.rdoc
86
+ - LICENSE
87
+ - CHANGELOG.rdoc
88
+ has_rdoc: true
89
+ homepage: http://github.com/mislav/will_paginate/wikis
90
+ licenses: []
91
+
92
+ post_install_message:
93
+ rdoc_options:
94
+ - --main
95
+ - README.rdoc
96
+ - --charset=UTF-8
97
+ require_paths:
98
+ - lib
99
+ required_ruby_version: !ruby/object:Gem::Requirement
100
+ none: false
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ hash: 3
105
+ segments:
106
+ - 0
107
+ version: "0"
108
+ required_rubygems_version: !ruby/object:Gem::Requirement
109
+ none: false
110
+ requirements:
111
+ - - ">"
112
+ - !ruby/object:Gem::Version
113
+ hash: 25
114
+ segments:
115
+ - 1
116
+ - 3
117
+ - 1
118
+ version: 1.3.1
119
+ requirements: []
120
+
121
+ rubyforge_project:
122
+ rubygems_version: 1.3.7
123
+ signing_key:
124
+ specification_version: 3
125
+ summary: Rails 3 compatible adaptive pagination plugin for web frameworks and other applications
126
+ test_files: []
127
+