will_paginate 2.3.17 → 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.

Potentially problematic release.


This version of will_paginate might be problematic. Click here for more details.

Files changed (83) hide show
  1. data/CHANGELOG.rdoc +24 -80
  2. data/LICENSE +1 -1
  3. data/README.rdoc +125 -0
  4. data/Rakefile +26 -22
  5. data/lib/will_paginate.rb +10 -84
  6. data/lib/will_paginate/array.rb +25 -8
  7. data/lib/will_paginate/collection.rb +15 -28
  8. data/lib/will_paginate/core_ext.rb +26 -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 +26 -0
  17. data/lib/will_paginate/version.rb +5 -5
  18. data/lib/will_paginate/view_helpers.rb +25 -436
  19. data/lib/will_paginate/view_helpers/action_view.rb +142 -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/{test → spec}/fixtures/admin.rb +0 -0
  37. data/{test → spec}/fixtures/developer.rb +2 -3
  38. data/{test → spec}/fixtures/developers_projects.yml +0 -0
  39. data/{test → spec}/fixtures/project.rb +2 -6
  40. data/{test → spec}/fixtures/projects.yml +1 -1
  41. data/{test → spec}/fixtures/replies.yml +0 -0
  42. data/{test → spec}/fixtures/reply.rb +1 -1
  43. data/{test → spec}/fixtures/schema.rb +0 -0
  44. data/spec/fixtures/topic.rb +7 -0
  45. data/{test → spec}/fixtures/topics.yml +0 -0
  46. data/{test → spec}/fixtures/user.rb +0 -0
  47. data/{test → spec}/fixtures/users.yml +0 -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 +345 -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 +60 -65
  57. data/README.md +0 -53
  58. data/lib/will_paginate/finder.rb +0 -269
  59. data/lib/will_paginate/i18n.rb +0 -29
  60. data/lib/will_paginate/locale/en.yml +0 -33
  61. data/lib/will_paginate/named_scope.rb +0 -170
  62. data/lib/will_paginate/named_scope_patch.rb +0 -37
  63. data/lib/will_paginate/per_page.rb +0 -27
  64. data/test/ci.rb +0 -60
  65. data/test/collection_test.rb +0 -160
  66. data/test/console +0 -8
  67. data/test/database.yml +0 -16
  68. data/test/finder_test.rb +0 -527
  69. data/test/fixtures/topic.rb +0 -12
  70. data/test/gemfiles/Gemfile.1.2 +0 -13
  71. data/test/gemfiles/Gemfile.1.2.lock +0 -39
  72. data/test/gemfiles/Gemfile.2.0 +0 -16
  73. data/test/gemfiles/Gemfile.2.0.lock +0 -28
  74. data/test/gemfiles/Gemfile.2.1 +0 -16
  75. data/test/gemfiles/Gemfile.2.1.lock +0 -28
  76. data/test/gemfiles/Gemfile.2.2 +0 -16
  77. data/test/gemfiles/Gemfile.2.2.lock +0 -28
  78. data/test/helper.rb +0 -34
  79. data/test/lib/activerecord_test_case.rb +0 -38
  80. data/test/lib/activerecord_test_connector.rb +0 -86
  81. data/test/lib/load_fixtures.rb +0 -12
  82. data/test/lib/view_test_process.rb +0 -186
  83. data/test/view_test.rb +0 -380
@@ -1,12 +0,0 @@
1
- class Topic < ActiveRecord::Base
2
- has_many :replies, :dependent => :destroy, :order => 'replies.created_at DESC'
3
- belongs_to :project
4
-
5
- named_scope :mentions_activerecord, :conditions => ['topics.title LIKE ?', '%ActiveRecord%']
6
-
7
- named_scope :with_replies_starting_with, lambda { |text|
8
- { :conditions => "replies.content LIKE '#{text}%' ", :include => :replies }
9
- }
10
-
11
- def self.paginate_by_definition_in_class; end
12
- end
@@ -1,13 +0,0 @@
1
- source 'http://rubygems.org'
2
-
3
- gem 'rails', '~> 1.2.6'
4
-
5
- gem 'rake', '~> 0.8.7'
6
- gem 'mocha', '0.9.2'
7
- gem 'sqlite3-ruby', '1.3.1'
8
- gem 'mysql', :group => :mysql
9
-
10
- group :pg do
11
- gem 'postgres', :platforms => :ruby_18
12
- gem 'pg', :platforms => :ruby_19
13
- end
@@ -1,39 +0,0 @@
1
- GEM
2
- remote: http://rubygems.org/
3
- specs:
4
- actionmailer (1.3.6)
5
- actionpack (= 1.13.6)
6
- actionpack (1.13.6)
7
- activesupport (= 1.4.4)
8
- actionwebservice (1.2.6)
9
- actionpack (= 1.13.6)
10
- activerecord (= 1.15.6)
11
- activerecord (1.15.6)
12
- activesupport (= 1.4.4)
13
- activesupport (1.4.4)
14
- mocha (0.9.2)
15
- rake
16
- mysql (2.8.1)
17
- pg (0.11.0)
18
- postgres (0.7.9.2008.01.28)
19
- rails (1.2.6)
20
- actionmailer (= 1.3.6)
21
- actionpack (= 1.13.6)
22
- actionwebservice (= 1.2.6)
23
- activerecord (= 1.15.6)
24
- activesupport (= 1.4.4)
25
- rake (>= 0.7.2)
26
- rake (0.8.7)
27
- sqlite3-ruby (1.3.1)
28
-
29
- PLATFORMS
30
- ruby
31
-
32
- DEPENDENCIES
33
- mocha (= 0.9.2)
34
- mysql
35
- pg
36
- postgres
37
- rails (~> 1.2.6)
38
- rake (~> 0.8.7)
39
- sqlite3-ruby (= 1.3.1)
@@ -1,16 +0,0 @@
1
- source 'http://rubygems.org'
2
-
3
- rails_version = '~> 2.0.4'
4
-
5
- gem 'actionpack', rails_version
6
- gem 'activerecord', rails_version
7
-
8
- gem 'rake', '~> 0.8.7'
9
- gem 'mocha', '0.9.2'
10
- gem 'sqlite3-ruby', '1.3.1'
11
- gem 'mysql', :group => :mysql
12
-
13
- group :pg do
14
- gem 'postgres', :platforms => :ruby_18
15
- gem 'pg', :platforms => :ruby_19
16
- end
@@ -1,28 +0,0 @@
1
- GEM
2
- remote: http://rubygems.org/
3
- specs:
4
- actionpack (2.0.5)
5
- activesupport (= 2.0.5)
6
- activerecord (2.0.5)
7
- activesupport (= 2.0.5)
8
- activesupport (2.0.5)
9
- mocha (0.9.2)
10
- rake
11
- mysql (2.8.1)
12
- pg (0.11.0)
13
- postgres (0.7.9.2008.01.28)
14
- rake (0.8.7)
15
- sqlite3-ruby (1.3.1)
16
-
17
- PLATFORMS
18
- ruby
19
-
20
- DEPENDENCIES
21
- actionpack (~> 2.0.4)
22
- activerecord (~> 2.0.4)
23
- mocha (= 0.9.2)
24
- mysql
25
- pg
26
- postgres
27
- rake (~> 0.8.7)
28
- sqlite3-ruby (= 1.3.1)
@@ -1,16 +0,0 @@
1
- source 'http://rubygems.org'
2
-
3
- rails_version = '~> 2.1.0'
4
-
5
- gem 'actionpack', rails_version
6
- gem 'activerecord', rails_version
7
-
8
- gem 'rake', '~> 0.8.7'
9
- gem 'mocha', '0.9.2'
10
- gem 'sqlite3-ruby', '1.3.1'
11
- gem 'mysql', :group => :mysql
12
-
13
- group :pg do
14
- gem 'postgres', :platforms => :ruby_18
15
- gem 'pg', :platforms => :ruby_19
16
- end
@@ -1,28 +0,0 @@
1
- GEM
2
- remote: http://rubygems.org/
3
- specs:
4
- actionpack (2.1.2)
5
- activesupport (= 2.1.2)
6
- activerecord (2.1.2)
7
- activesupport (= 2.1.2)
8
- activesupport (2.1.2)
9
- mocha (0.9.2)
10
- rake
11
- mysql (2.8.1)
12
- pg (0.11.0)
13
- postgres (0.7.9.2008.01.28)
14
- rake (0.8.7)
15
- sqlite3-ruby (1.3.1)
16
-
17
- PLATFORMS
18
- ruby
19
-
20
- DEPENDENCIES
21
- actionpack (~> 2.1.0)
22
- activerecord (~> 2.1.0)
23
- mocha (= 0.9.2)
24
- mysql
25
- pg
26
- postgres
27
- rake (~> 0.8.7)
28
- sqlite3-ruby (= 1.3.1)
@@ -1,16 +0,0 @@
1
- source 'http://rubygems.org'
2
-
3
- rails_version = '~> 2.2.2'
4
-
5
- gem 'actionpack', rails_version
6
- gem 'activerecord', rails_version
7
-
8
- gem 'rake', '~> 0.8.7'
9
- gem 'mocha', '0.9.2'
10
- gem 'sqlite3-ruby', '1.3.1'
11
- gem 'mysql', :group => :mysql
12
-
13
- group :pg do
14
- gem 'postgres', :platforms => :ruby_18
15
- gem 'pg', :platforms => :ruby_19
16
- end
@@ -1,28 +0,0 @@
1
- GEM
2
- remote: http://rubygems.org/
3
- specs:
4
- actionpack (2.2.3)
5
- activesupport (= 2.2.3)
6
- activerecord (2.2.3)
7
- activesupport (= 2.2.3)
8
- activesupport (2.2.3)
9
- mocha (0.9.2)
10
- rake
11
- mysql (2.8.1)
12
- pg (0.11.0)
13
- postgres (0.7.9.2008.01.28)
14
- rake (0.8.7)
15
- sqlite3-ruby (1.3.1)
16
-
17
- PLATFORMS
18
- ruby
19
-
20
- DEPENDENCIES
21
- actionpack (~> 2.2.2)
22
- activerecord (~> 2.2.2)
23
- mocha (= 0.9.2)
24
- mysql
25
- pg
26
- postgres
27
- rake (~> 0.8.7)
28
- sqlite3-ruby (= 1.3.1)
data/test/helper.rb DELETED
@@ -1,34 +0,0 @@
1
- require 'test/unit'
2
- require 'mocha'
3
- require 'will_paginate'
4
- begin
5
- require 'ruby-debug'
6
- rescue LoadError
7
- # no debuggging
8
- end
9
-
10
- class Test::Unit::TestCase
11
- protected
12
- def assert_respond_to_all object, methods
13
- methods.each do |method|
14
- [method.to_s, method.to_sym].each { |m| assert_respond_to object, m }
15
- end
16
- end
17
-
18
- def collect_deprecations
19
- old_behavior = WillPaginate::Deprecation.behavior
20
- deprecations = []
21
- WillPaginate::Deprecation.behavior = Proc.new do |message, callstack|
22
- deprecations << message
23
- end
24
- result = yield
25
- [result, deprecations]
26
- ensure
27
- WillPaginate::Deprecation.behavior = old_behavior
28
- end
29
- end
30
-
31
- # Wrap tests that use Mocha and skip if unavailable.
32
- def uses_mocha(test_name)
33
- yield
34
- end
@@ -1,38 +0,0 @@
1
- require 'lib/activerecord_test_connector'
2
-
3
- class ActiveRecordTestCase < Test::Unit::TestCase
4
- if defined?(ActiveSupport::Testing::SetupAndTeardown)
5
- include ActiveSupport::Testing::SetupAndTeardown
6
- end
7
-
8
- if defined?(ActiveRecord::TestFixtures)
9
- include ActiveRecord::TestFixtures
10
- end
11
-
12
- self.fixture_path = File.join(File.dirname(__FILE__), '..', 'fixtures')
13
- self.use_transactional_fixtures = true
14
-
15
- # Default so Test::Unit::TestCase doesn't complain
16
- def test_truth
17
- end
18
-
19
- protected
20
-
21
- def assert_queries(num = 1)
22
- $query_count = 0
23
- yield
24
- ensure
25
- assert_equal num, $query_count, "#{$query_count} instead of #{num} queries were executed."
26
- end
27
-
28
- def method_name
29
- 'moo' # hack
30
- end
31
-
32
- def assert_no_queries(&block)
33
- assert_queries(0, &block)
34
- end
35
- end
36
-
37
- ActiveRecordTestConnector.setup
38
- abort unless ActiveRecordTestConnector.able_to_connect
@@ -1,86 +0,0 @@
1
- require 'active_record'
2
- require 'active_record/version'
3
- require 'active_record/fixtures'
4
-
5
- # prevent psych kicking in on 1.9 and interpreting
6
- # local timestamps in fixtures as UTC
7
- YAML::ENGINE.yamler = 'syck' if defined? YAML::ENGINE
8
-
9
- class ActiveRecordTestConnector
10
- cattr_accessor :able_to_connect
11
- cattr_accessor :connected
12
-
13
- FIXTURES_PATH = File.join(File.dirname(__FILE__), '..', 'fixtures')
14
-
15
- # Set our defaults
16
- self.connected = false
17
- self.able_to_connect = true
18
-
19
- def self.setup
20
- unless self.connected || !self.able_to_connect
21
- setup_connection
22
- load_schema
23
- add_load_path FIXTURES_PATH
24
- self.connected = true
25
- end
26
- rescue Exception => e # errors from ActiveRecord setup
27
- $stderr.puts "\nSkipping ActiveRecord tests: #{e}\n\n"
28
- self.able_to_connect = false
29
- end
30
-
31
- private
32
-
33
- def self.add_load_path(path)
34
- dep = defined?(ActiveSupport::Dependencies) ? ActiveSupport::Dependencies : ::Dependencies
35
- autoload_paths = dep.respond_to?(:autoload_paths) ? dep.autoload_paths : dep.load_paths
36
- autoload_paths.unshift path
37
- end
38
-
39
- def self.setup_connection
40
- db = ENV['DB'].blank?? 'sqlite3' : ENV['DB']
41
-
42
- configurations = YAML.load_file(File.join(File.dirname(__FILE__), '..', 'database.yml'))
43
- raise "no configuration for '#{db}'" unless configurations.key? db
44
- configuration = configurations[db]
45
-
46
- ActiveRecord::Base.logger = Logger.new(STDOUT) if $0 == 'irb'
47
- puts "using #{configuration['adapter']} adapter" unless ENV['DB'].blank?
48
-
49
- ActiveRecord::Base.establish_connection(configuration)
50
- ActiveRecord::Base.configurations = { db => configuration }
51
- ActiveRecord::Base.default_timezone = :local if ActiveRecord::Base.respond_to? :default_timezone
52
- prepare ActiveRecord::Base.connection
53
-
54
- unless Object.const_defined?(:QUOTED_TYPE)
55
- Object.send :const_set, :QUOTED_TYPE, ActiveRecord::Base.connection.quote_column_name('type')
56
- end
57
- end
58
-
59
- def self.load_schema
60
- ActiveRecord::Base.silence do
61
- ActiveRecord::Migration.verbose = false
62
- load File.join(FIXTURES_PATH, 'schema.rb')
63
- end
64
- end
65
-
66
- def self.prepare(conn)
67
- class << conn
68
- IGNORED_SQL = /
69
- ^(
70
- PRAGMA | SHOW\ max_identifier_length |
71
- SELECT\ (currval|CAST|@@IDENTITY|@@ROWCOUNT) |
72
- SHOW\ (FIELDS|TABLES)
73
- )\b |
74
- \bFROM\ (sqlite_master|pg_tables|pg_attribute)\b
75
- /x
76
-
77
- def execute_with_counting(sql, name = nil, &block)
78
- $query_count ||= 0
79
- $query_count += 1 unless sql =~ IGNORED_SQL
80
- execute_without_counting(sql, name, &block)
81
- end
82
-
83
- alias_method_chain :execute, :counting
84
- end
85
- end
86
- end
@@ -1,12 +0,0 @@
1
- require 'bundler'
2
- Bundler.setup
3
- require 'lib/activerecord_test_connector'
4
-
5
- # setup the connection
6
- ActiveRecordTestConnector.setup
7
-
8
- # load all fixtures
9
- Fixtures.create_fixtures(ActiveRecordTestConnector::FIXTURES_PATH, ActiveRecord::Base.connection.tables)
10
-
11
- require 'will_paginate'
12
- WillPaginate.enable_activerecord
@@ -1,186 +0,0 @@
1
- require 'will_paginate/core_ext'
2
- require 'action_controller'
3
- require 'action_controller/test_process'
4
-
5
- require 'will_paginate'
6
- WillPaginate.enable_actionpack
7
-
8
- ActionController::Routing::Routes.draw do |map|
9
- map.connect 'dummy/page/:page', :controller => 'dummy'
10
- map.connect 'dummy/dots/page.:page', :controller => 'dummy', :action => 'dots'
11
- map.connect 'ibocorp/:page', :controller => 'ibocorp',
12
- :requirements => { :page => /\d+/ },
13
- :defaults => { :page => 1 }
14
-
15
- map.connect ':controller/:action/:id'
16
- end
17
-
18
- ActionController::Base.perform_caching = false
19
-
20
- class WillPaginate::ViewTestCase < Test::Unit::TestCase
21
- if defined?(ActionController::TestCase::Assertions)
22
- include ActionController::TestCase::Assertions
23
- end
24
- if defined?(ActiveSupport::Testing::Deprecation)
25
- include ActiveSupport::Testing::Deprecation
26
- end
27
-
28
- def setup
29
- super
30
- @controller = DummyController.new
31
- @request = @controller.request
32
- @html_result = nil
33
- @template = '<%= will_paginate collection, options %>'
34
-
35
- @view = ActionView::Base.new
36
- @view.assigns['controller'] = @controller
37
- @view.assigns['_request'] = @request
38
- @view.assigns['_params'] = @request.params
39
- end
40
-
41
- def test_no_complain; end
42
-
43
- protected
44
-
45
- def paginate(collection = {}, options = {}, &block)
46
- if collection.instance_of? Hash
47
- page_options = { :page => 1, :total_entries => 11, :per_page => 4 }.merge(collection)
48
- collection = [1].paginate(page_options)
49
- end
50
-
51
- locals = { :collection => collection, :options => options }
52
-
53
- unless @view.respond_to? :render_template
54
- # Rails 2.2
55
- @html_result = ActionView::InlineTemplate.new(@template).render(@view, locals)
56
- else
57
- if defined? ActionView::InlineTemplate
58
- # Rails 2.1
59
- args = [ ActionView::InlineTemplate.new(@view, @template, locals) ]
60
- else
61
- # older Rails versions
62
- args = [nil, @template, nil, locals]
63
- end
64
-
65
- @html_result = @view.render_template(*args)
66
- end
67
-
68
- @html_document = HTML::Document.new(@html_result, true, false)
69
-
70
- if block_given?
71
- classname = options[:class] || WillPaginate::ViewHelpers.pagination_options[:class]
72
- assert_select("div.#{classname}", 1, 'no main DIV', &block)
73
- end
74
- end
75
-
76
- def response_from_page_or_rjs
77
- @html_document.root
78
- end
79
-
80
- def validate_page_numbers expected, links, param_name = :page
81
- param_pattern = /\W#{CGI.escape(param_name.to_s)}=([^&]*)/
82
-
83
- assert_equal(expected, links.map { |e|
84
- e['href'] =~ param_pattern
85
- $1 ? $1.to_i : $1
86
- })
87
- end
88
-
89
- def assert_links_match pattern, links = nil, numbers = nil
90
- links ||= assert_select 'div.pagination a[href]' do |elements|
91
- elements
92
- end
93
-
94
- pages = [] if numbers
95
-
96
- links.each do |el|
97
- assert_match pattern, el['href']
98
- if numbers
99
- el['href'] =~ pattern
100
- pages << ($1.nil?? nil : $1.to_i)
101
- end
102
- end
103
-
104
- assert_equal numbers, pages, "page numbers don't match" if numbers
105
- end
106
-
107
- def assert_no_links_match pattern
108
- assert_select 'div.pagination a[href]' do |elements|
109
- elements.each do |el|
110
- assert_no_match pattern, el['href']
111
- end
112
- end
113
- end
114
-
115
- private
116
-
117
- def load_fixtures
118
- # fix for Rails 1.2
119
- @loaded_fixtures = {}
120
- end
121
- end
122
-
123
- class DummyRequest
124
- attr_accessor :symbolized_path_parameters
125
-
126
- def initialize
127
- @get = true
128
- @params = {}
129
- @symbolized_path_parameters = { :controller => 'foo', :action => 'bar' }
130
- end
131
-
132
- def get?
133
- @get
134
- end
135
-
136
- def post
137
- @get = false
138
- end
139
-
140
- def relative_url_root
141
- ''
142
- end
143
-
144
- def params(more = nil)
145
- @params.update(more) if more
146
- @params
147
- end
148
- end
149
-
150
- class DummyController
151
- attr_reader :request
152
- attr_accessor :controller_name
153
-
154
- def initialize
155
- @request = DummyRequest.new
156
- @url = ActionController::UrlRewriter.new(@request, @request.params)
157
- end
158
-
159
- def params
160
- @request.params
161
- end
162
-
163
- def url_for(params)
164
- @url.rewrite(params)
165
- end
166
- end
167
-
168
- module HTML
169
- Node.class_eval do
170
- def inner_text
171
- children.map(&:inner_text).join('')
172
- end
173
- end
174
-
175
- Text.class_eval do
176
- def inner_text
177
- self.to_s
178
- end
179
- end
180
-
181
- Tag.class_eval do
182
- def inner_text
183
- childless?? '' : super
184
- end
185
- end
186
- end