will_paginate 3.3.0 → 3.3.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a6263dfb6824224c74e2383ba39b7f35abe25288dfcdd89a3dbab6f2585eb91e
4
- data.tar.gz: c26bb41e5bf140fd2564ed63fda7ed4822f3c126a6a3b3885b27e2585dbf3647
3
+ metadata.gz: 3015c2c4a4d84d48b8a9c60a5ad19297e4ccbd515682df95399badb293386536
4
+ data.tar.gz: d28dd41a8fe68e9f5e43649978cb8a49b8ff03fc6fcdab303c04fcbe654a6894
5
5
  SHA512:
6
- metadata.gz: 8f67913552fff8839f5de82d9e55c61ad69c1a57216da3d5d627aef77455ee32a03d2b8c2b732299b37481ea6e9fd72a5baa1432e1fe296e78fc06b6a46ee8e0
7
- data.tar.gz: 8979fdd5d35ee416e4c607f759b8e868188b11bb2ca7540d982866e936168170519492a027fff90cb31db12fb758b144389691c9374acfd58fd1880105d2201c
6
+ metadata.gz: b6c6843a2f26883a439520ef4106124c1706c8f5deae59c16d1fee074d74a8eb50e39ef3ea8ae8dc0bd6a18331dd618c0f18079f3834b0ebda45a13f050d3f62
7
+ data.tar.gz: 5479f100b92648394d8074d2d34be19120008955ce5f5e289073eafac35389890f044d4a66fe0e54d5331fc7d6a82c17497fa800f4fee44c743939560a71af8c
data/README.md CHANGED
@@ -2,15 +2,13 @@
2
2
 
3
3
  will_paginate is a pagination library that integrates with Ruby on Rails, Sinatra, Hanami::View, Merb, DataMapper and Sequel.
4
4
 
5
- Installation:
6
-
7
5
  ``` ruby
8
- ## Gemfile for Rails 3+, Sinatra, and Merb
9
6
  gem 'will_paginate', '~> 3.1.0'
10
7
  ```
11
8
 
12
9
  See [installation instructions][install] on the wiki for more info.
13
10
 
11
+ ℹ️ will_paginate is now in _maintenance mode_ and it will not be receiving new features. [See alternatives](https://www.ruby-toolbox.com/categories/pagination)
14
12
 
15
13
  ## Basic will_paginate use
16
14
 
@@ -2,7 +2,7 @@ module WillPaginate #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 3
4
4
  MINOR = 3
5
- TINY = 0
5
+ TINY = 1
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -71,7 +71,7 @@ module WillPaginate
71
71
  if page
72
72
  link(text, page, :class => classname)
73
73
  else
74
- tag(:span, text, :class => classname + ' disabled')
74
+ tag(:span, text, :class => classname + ' disabled', :"aria-disabled" => true)
75
75
  end
76
76
  end
77
77
 
data/spec/database.yml CHANGED
@@ -3,27 +3,27 @@ sqlite3:
3
3
  adapter: sqlite3
4
4
  timeout: 500
5
5
 
6
- mysql: &mysql
7
- adapter: mysql
6
+ mysql:
7
+ adapter: mysql2
8
8
  database: will_paginate
9
- username: root
9
+ username: <%= ENV["MYSQL_USER"] || "root" %>
10
10
  encoding: utf8
11
- <% if File.exist?("/var/run/mysql5/mysqld.sock") %>
11
+ <% if ENV["MYSQL_PORT"] %>
12
+ host: <%= ENV["MYSQL_HOST"] %>
13
+ port: <%= ENV["MYSQL_PORT"] %>
14
+ <% elsif File.exist?("/var/run/mysql5/mysqld.sock") %>
12
15
  host: localhost
13
16
  socket: /var/run/mysql5/mysqld.sock
14
17
  <% elsif File.exist? "/tmp/mysql.sock" %>
15
18
  host: localhost
16
19
  socket: /tmp/mysql.sock
17
- <% else %>
18
- host: 127.0.0.1
19
20
  <% end %>
20
21
 
21
- mysql2:
22
- <<: *mysql
23
- adapter: mysql2
24
-
25
22
  postgres:
26
23
  adapter: postgresql
27
24
  database: will_paginate
28
- username: <%= "postgres" if ENV["TRAVIS"] %>
29
25
  min_messages: warning
26
+ username: <%= ENV["POSTGRES_USER"] %>
27
+ password: <%= ENV["POSTGRES_PASSWORD"] %>
28
+ host: <%= ENV["POSTGRES_HOST"] %>
29
+ port: <%= ENV["POSTGRES_PORT"] %>
@@ -1,20 +1,8 @@
1
1
  require 'active_record'
2
2
  require 'active_record/fixtures'
3
- require 'active_support/multibyte' # needed for Ruby 1.9.1
4
3
  require 'stringio'
5
4
  require 'erb'
6
5
 
7
- # https://travis-ci.org/mislav/will_paginate/jobs/99999001
8
- require 'active_support/core_ext/string/conversions'
9
- class String
10
- alias to_datetime_without_patch to_datetime
11
- def to_datetime
12
- to_datetime_without_patch
13
- rescue ArgumentError
14
- return nil
15
- end
16
- end
17
-
18
6
  $query_count = 0
19
7
  $query_sql = []
20
8
 
@@ -42,10 +30,6 @@ module ActiverecordTestConnector
42
30
 
43
31
  FIXTURES_PATH = File.expand_path('../../fixtures', __FILE__)
44
32
 
45
- Fixtures = defined?(ActiveRecord::FixtureSet) ? ActiveRecord::FixtureSet :
46
- defined?(ActiveRecord::Fixtures) ? ActiveRecord::Fixtures :
47
- ::Fixtures
48
-
49
33
  # Set our defaults
50
34
  self.connected = false
51
35
 
@@ -79,13 +63,6 @@ module ActiverecordTestConnector
79
63
  ActiveRecord::Base.configurations = { db => configuration }
80
64
  ActiveRecord::Base.establish_connection(db.to_sym)
81
65
  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
89
66
  end
90
67
 
91
68
  def load_schema
@@ -98,37 +75,27 @@ module ActiverecordTestConnector
98
75
  end
99
76
  end
100
77
 
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
-
107
78
  module FixtureSetup
108
79
  def fixtures(*tables)
109
80
  table_names = tables.map { |t| t.to_s }
110
81
 
111
- fixtures = Fixtures.create_fixtures ActiverecordTestConnector::FIXTURES_PATH, table_names
82
+ fixtures = ActiveRecord::FixtureSet.create_fixtures(ActiverecordTestConnector::FIXTURES_PATH, table_names)
112
83
  @@loaded_fixtures = {}
113
84
  @@fixture_cache = {}
114
85
 
115
86
  unless fixtures.nil?
116
- if fixtures.instance_of?(Fixtures)
117
- @@loaded_fixtures[fixtures.table_name] = fixtures
118
- else
119
- fixtures.each { |f| @@loaded_fixtures[f.table_name] = f }
120
- end
87
+ fixtures.each { |f| @@loaded_fixtures[f.table_name] = f }
121
88
  end
122
89
 
123
90
  table_names.each do |table_name|
124
- define_method(table_name) do |*fixtures|
91
+ define_method(table_name) do |*names|
125
92
  @@fixture_cache[table_name] ||= {}
126
93
 
127
- instances = fixtures.map do |fixture|
128
- if @@loaded_fixtures[table_name][fixture.to_s]
129
- @@fixture_cache[table_name][fixture] ||= @@loaded_fixtures[table_name][fixture.to_s].find
94
+ instances = names.map do |name|
95
+ if @@loaded_fixtures[table_name][name.to_s]
96
+ @@fixture_cache[table_name][name] ||= @@loaded_fixtures[table_name][name.to_s].find
130
97
  else
131
- raise StandardError, "No fixture with name '#{fixture}' found for table '#{table_name}'"
98
+ raise StandardError, "No fixture with name '#{name}' found for table '#{table_name}'"
132
99
  end
133
100
  end
134
101
 
data/spec/spec_helper.rb CHANGED
@@ -1,10 +1,5 @@
1
1
  require 'rspec'
2
2
  require 'view_helpers/view_example_group'
3
- begin
4
- require 'ruby-debug'
5
- rescue LoadError
6
- # no debugger available
7
- end
8
3
 
9
4
  Dir[File.expand_path('../matchers/*_matcher.rb', __FILE__)].each { |matcher| require matcher }
10
5
 
@@ -1,6 +1,5 @@
1
1
  # encoding: utf-8
2
2
  require 'spec_helper'
3
- require 'active_support/rescuable' # needed for Ruby 1.9.1
4
3
  require 'action_controller'
5
4
  require 'action_view'
6
5
  require 'will_paginate/view_helpers/action_view'
@@ -23,6 +22,8 @@ describe WillPaginate::ActionView do
23
22
  before(:all) do
24
23
  I18n.load_path.concat WillPaginate::I18n.load_path
25
24
  I18n.enforce_available_locales = false
25
+
26
+ ActionController::Parameters.permit_all_parameters = false
26
27
  end
27
28
 
28
29
  before(:each) do
@@ -40,9 +41,7 @@ describe WillPaginate::ActionView do
40
41
 
41
42
  def render(locals)
42
43
  lookup_context = []
43
- if defined? ActionView::LookupContext
44
- lookup_context = ActionView::LookupContext.new(lookup_context)
45
- end
44
+ lookup_context = ActionView::LookupContext.new(lookup_context)
46
45
 
47
46
  klass = ActionView::Base
48
47
  klass = klass.with_empty_template_cache if klass.respond_to?(:with_empty_template_cache)
@@ -128,7 +127,7 @@ describe WillPaginate::ActionView do
128
127
  it "should match expected markup" do
129
128
  paginate
130
129
  expected = <<-HTML
131
- <div class="pagination" role="navigation" aria-label="Pagination"><span class="previous_page disabled">&#8592; Previous</span>
130
+ <div class="pagination" role="navigation" aria-label="Pagination"><span class="previous_page disabled" aria-disabled="true">&#8592; Previous</span>
132
131
  <em class="current" aria-label="Page 1" aria-current="page">1</em>
133
132
  <a href="/foo/bar?page=2" aria-label="Page 2" rel="next">2</a>
134
133
  <a href="/foo/bar?page=3" aria-label="Page 3">3</a>
@@ -370,6 +369,16 @@ describe WillPaginate::ActionView do
370
369
  end
371
370
  end
372
371
 
372
+ # TODO: re-enable once Rails 6.1.4 ships
373
+ xit "page_entries_info" do
374
+ @template = "<%= page_entries_info collection, options %>"
375
+ output = render(
376
+ collection: WillPaginate::Collection.new(1, 1, 3),
377
+ options: {html: false},
378
+ )
379
+ output.should == "Displaying entries 1 - 0 of 3 in total"
380
+ end
381
+
373
382
  private
374
383
 
375
384
  def translation(data)
@@ -454,11 +463,7 @@ class DummyRequest
454
463
 
455
464
  def params(more = nil)
456
465
  @params.update(more) if more
457
- if defined?(ActionController::Parameters)
458
- ActionController::Parameters.new(@params)
459
- else
460
- @params
461
- end
466
+ ActionController::Parameters.new(@params)
462
467
  end
463
468
 
464
469
  def host_with_port
@@ -474,7 +479,3 @@ class DummyRequest
474
479
  'http:'
475
480
  end
476
481
  end
477
-
478
- if defined?(ActionController::Parameters)
479
- ActionController::Parameters.permit_all_parameters = false
480
- end
@@ -1,30 +1,13 @@
1
1
  require 'active_support'
2
2
  require 'stringio'
3
- begin
4
- $stderr = StringIO.new
5
- require 'minitest/unit'
6
- rescue LoadError
7
- # Fails on Ruby 1.8, but it's OK since we only need MiniTest::Assertions
8
- # on Rails 4 which doesn't support 1.8 anyway.
9
- ensure
10
- $stderr = STDERR
11
- end
12
-
13
- begin
14
- require 'rails/dom/testing/assertions'
15
- rescue LoadError
16
- require 'action_dispatch/testing/assertions'
17
- end
3
+ require 'minitest/assertions'
4
+ require 'rails/dom/testing/assertions'
18
5
  require 'will_paginate/array'
19
6
 
20
7
  module ViewExampleGroup
21
8
 
22
- if defined?(Rails::Dom::Testing::Assertions)
23
- include Rails::Dom::Testing::Assertions::SelectorAssertions
24
- else
25
- include ActionDispatch::Assertions::SelectorAssertions
26
- end
27
- include MiniTest::Assertions if defined? MiniTest
9
+ include Rails::Dom::Testing::Assertions::SelectorAssertions
10
+ include Minitest::Assertions
28
11
 
29
12
  def assert(value, message)
30
13
  raise message unless value
@@ -50,11 +33,7 @@ module ViewExampleGroup
50
33
  end
51
34
 
52
35
  def parse_html_document(html)
53
- if defined?(Rails::Dom::Testing::Assertions)
54
- Nokogiri::HTML::Document.parse(html)
55
- else
56
- HTML::Document.new(html, true, false)
57
- end
36
+ Nokogiri::HTML::Document.parse(html)
58
37
  end
59
38
 
60
39
  def html_document
@@ -124,23 +103,3 @@ RSpec.configure do |config|
124
103
  :file_path => %r{spec/view_helpers/}
125
104
  }
126
105
  end
127
-
128
- module HTML
129
- Node.class_eval do
130
- def inner_text
131
- children.map(&:inner_text).join('')
132
- end
133
- end
134
-
135
- Text.class_eval do
136
- def inner_text
137
- self.to_s
138
- end
139
- end
140
-
141
- Tag.class_eval do
142
- def inner_text
143
- childless?? '' : super
144
- end
145
- end
146
- end if defined?(HTML)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: will_paginate
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.0
4
+ version: 3.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mislav Marohnić
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-26 00:00:00.000000000 Z
11
+ date: 2021-08-12 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
@@ -48,14 +48,8 @@ files:
48
48
  - spec/console
49
49
  - spec/console_fixtures.rb
50
50
  - spec/database.yml
51
- - spec/fake_rubygems.rb
52
51
  - spec/finders/active_record_spec.rb
53
52
  - spec/finders/activerecord_test_connector.rb
54
- - spec/finders/data_mapper_spec.rb
55
- - spec/finders/data_mapper_test_connector.rb
56
- - spec/finders/mongoid_spec.rb
57
- - spec/finders/sequel_spec.rb
58
- - spec/finders/sequel_test_connector.rb
59
53
  - spec/fixtures/admin.rb
60
54
  - spec/fixtures/developer.rb
61
55
  - spec/fixtures/developers_projects.yml
@@ -83,11 +77,11 @@ licenses:
83
77
  - MIT
84
78
  metadata:
85
79
  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
80
+ changelog_uri: https://github.com/mislav/will_paginate/releases/tag/v3.3.1
81
+ documentation_uri: https://www.rubydoc.info/gems/will_paginate/3.3.1
82
+ source_code_uri: https://github.com/mislav/will_paginate/tree/v3.3.1
89
83
  wiki_uri: https://github.com/mislav/will_paginate/wiki
90
- post_install_message:
84
+ post_install_message:
91
85
  rdoc_options:
92
86
  - "--main"
93
87
  - README.md
@@ -105,8 +99,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
105
99
  - !ruby/object:Gem::Version
106
100
  version: '0'
107
101
  requirements: []
108
- rubygems_version: 3.1.2
109
- signing_key:
102
+ rubygems_version: 3.1.4
103
+ signing_key:
110
104
  specification_version: 4
111
105
  summary: Pagination plugin for web frameworks and other apps
112
106
  test_files: []
@@ -1,18 +0,0 @@
1
- # Makes the test suite compatible with Bundler standalone mode (used in CI)
2
- # because Active Record uses `gem` for loading adapters.
3
- Kernel.module_eval do
4
-
5
- remove_method :gem if 'method' == defined? gem
6
-
7
- def gem(*args)
8
- return if $VERBOSE.nil?
9
- $stderr << "warning: gem(#{args.map {|o| o.inspect }.join(', ')}) ignored"
10
- $stderr << "; called from:\n " << caller[0,5].join("\n ") if $DEBUG
11
- $stderr << "\n"
12
- end
13
-
14
- private :gem
15
-
16
- end
17
-
18
- $" << "rubygems.rb"
@@ -1,114 +0,0 @@
1
- require 'spec_helper'
2
-
3
- if !ENV['SKIP_NONRAILS_TESTS']
4
- require 'will_paginate/data_mapper'
5
- require File.expand_path('../data_mapper_test_connector', __FILE__)
6
- datamapper_loaded = true
7
- else
8
- datamapper_loaded = false
9
- end
10
-
11
- describe WillPaginate::DataMapper do
12
-
13
- it "has per_page" do
14
- Animal.per_page.should == 30
15
- begin
16
- Animal.per_page = 10
17
- Animal.per_page.should == 10
18
-
19
- subclass = Class.new(Animal)
20
- subclass.per_page.should == 10
21
- ensure
22
- Animal.per_page = 30
23
- end
24
- end
25
-
26
- it "doesn't make normal collections appear paginated" do
27
- Animal.all.should_not be_paginated
28
- end
29
-
30
- it "paginates to first page by default" do
31
- animals = Animal.paginate(:page => nil)
32
-
33
- animals.should be_paginated
34
- animals.current_page.should == 1
35
- animals.per_page.should == 30
36
- animals.offset.should == 0
37
- animals.total_entries.should == 3
38
- animals.total_pages.should == 1
39
- end
40
-
41
- it "paginates to first page, explicit limit" do
42
- animals = Animal.paginate(:page => 1, :per_page => 2)
43
-
44
- animals.current_page.should == 1
45
- animals.per_page.should == 2
46
- animals.total_entries.should == 3
47
- animals.total_pages.should == 2
48
- animals.map {|a| a.name }.should == %w[ Dog Cat ]
49
- end
50
-
51
- it "paginates to second page" do
52
- animals = Animal.paginate(:page => 2, :per_page => 2)
53
-
54
- animals.current_page.should == 2
55
- animals.offset.should == 2
56
- animals.map {|a| a.name }.should == %w[ Lion ]
57
- end
58
-
59
- it "paginates a collection" do
60
- friends = Animal.all(:notes.like => '%friend%')
61
- friends.paginate(:page => 1).per_page.should == 30
62
- friends.paginate(:page => 1, :per_page => 1).total_entries.should == 2
63
- end
64
-
65
- it "paginates a limited collection" do
66
- animals = Animal.all(:limit => 2).paginate(:page => 1)
67
- animals.per_page.should == 2
68
- end
69
-
70
- it "has page() method" do
71
- Animal.page(2).per_page.should == 30
72
- Animal.page(2).offset.should == 30
73
- Animal.page(2).current_page.should == 2
74
- Animal.all(:limit => 2).page(2).per_page.should == 2
75
- end
76
-
77
- it "has total_pages at 1 for empty collections" do
78
- Animal.all(:conditions => ['1=2']).page(1).total_pages.should == 1
79
- end
80
-
81
- it "overrides total_entries count with a fixed value" do
82
- lambda {
83
- animals = Animal.paginate :page => 1, :per_page => 3, :total_entries => 999
84
- animals.total_entries.should == 999
85
- }.should run_queries(0)
86
- end
87
-
88
- it "supports a non-int for total_entries" do
89
- topics = Animal.paginate :page => 1, :per_page => 3, :total_entries => "999"
90
- topics.total_entries.should == 999
91
- end
92
-
93
-
94
- it "can iterate and then call WP methods" do
95
- animals = Animal.all(:limit => 2).page(1)
96
- animals.each { |a| }
97
- animals.total_entries.should == 3
98
- end
99
-
100
- it "augments to_a to return a WP::Collection" do
101
- animals = Animal.all(:limit => 2).page(1)
102
- array = animals.to_a
103
- array.size.should == 2
104
- array.should be_kind_of(WillPaginate::Collection)
105
- array.current_page.should == 1
106
- array.per_page.should == 2
107
- end
108
-
109
- it "doesn't have a problem assigning has-one-through relationship" do
110
- human = Human.create :name => "Mislav"
111
- human.pet = Animal.first
112
- end
113
-
114
- end if datamapper_loaded
@@ -1,54 +0,0 @@
1
- require 'sqlite3'
2
- require 'dm-core'
3
- require 'dm-core/support/logger'
4
- require 'dm-migrations'
5
-
6
- DataMapper.setup :default, 'sqlite3::memory:'
7
-
8
- # Define models
9
- class Animal
10
- include DataMapper::Resource
11
- property :id, Serial
12
- property :name, String
13
- property :notes, Text
14
-
15
- def self.setup
16
- Animal.create(:name => 'Dog', :notes => "Man's best friend")
17
- Animal.create(:name => 'Cat', :notes => "Woman's best friend")
18
- Animal.create(:name => 'Lion', :notes => 'King of the Jungle')
19
- end
20
- end
21
-
22
- class Ownership
23
- include DataMapper::Resource
24
-
25
- belongs_to :animal, :key => true
26
- belongs_to :human, :key => true
27
-
28
- def self.setup
29
- end
30
- end
31
-
32
- class Human
33
- include DataMapper::Resource
34
-
35
- property :id, Serial
36
- property :name, String
37
-
38
- has n, :ownerships
39
- has 1, :pet, :model => 'Animal', :through => :ownerships, :via => :animal
40
-
41
- def self.setup
42
- end
43
- end
44
-
45
- # Load fixtures
46
- [Animal, Ownership, Human].each do |klass|
47
- klass.auto_migrate!
48
- klass.setup
49
- end
50
-
51
- if 'irb' == $0
52
- DataMapper.logger.set_log($stdout, :debug)
53
- DataMapper.logger.auto_flush = true
54
- end
@@ -1,147 +0,0 @@
1
- require 'spec_helper'
2
-
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
10
- require 'will_paginate/mongoid'
11
- Object.send(:const_set, :Rails, old_rails) if old_rails
12
-
13
- Mongo::Logger.logger.level = Logger::INFO
14
-
15
- Mongoid.connect_to 'will_paginate_test'
16
- class MongoidModel
17
- include Mongoid::Document
18
- end
19
-
20
- mongoid_loaded = true
21
- else
22
- mongoid_loaded = false
23
- end
24
-
25
- describe WillPaginate::Mongoid do
26
- before(:all) do
27
- MongoidModel.delete_all
28
- 4.times { MongoidModel.create! }
29
- end
30
-
31
- let(:criteria) { MongoidModel.criteria }
32
-
33
- describe "#page" do
34
- it "should forward to the paginate method" do
35
- criteria.expects(:paginate).with(:page => 2).returns("itself")
36
- criteria.page(2).should == "itself"
37
- end
38
-
39
- it "should not override per_page if set earlier in the chain" do
40
- criteria.paginate(:per_page => 10).page(1).per_page.should == 10
41
- criteria.paginate(:per_page => 20).page(1).per_page.should == 20
42
- end
43
- end
44
-
45
- describe "#per_page" do
46
- it "should set the limit if given an argument" do
47
- criteria.per_page(10).options[:limit].should == 10
48
- end
49
-
50
- it "should return the current limit if no argument is given" do
51
- criteria.per_page.should == nil
52
- criteria.per_page(10).per_page.should == 10
53
- end
54
-
55
- it "should be interchangable with limit" do
56
- criteria.limit(15).per_page.should == 15
57
- end
58
-
59
- it "should be nil'able" do
60
- criteria.per_page(nil).per_page.should be_nil
61
- end
62
- end
63
-
64
- describe "#paginate" do
65
- it "should use criteria" do
66
- criteria.paginate.should be_instance_of(::Mongoid::Criteria)
67
- end
68
-
69
- it "should not override page number if set earlier in the chain" do
70
- criteria.page(3).paginate.current_page.should == 3
71
- end
72
-
73
- it "should limit according to per_page parameter" do
74
- criteria.paginate(:per_page => 10).options.should include(:limit => 10)
75
- end
76
-
77
- it "should skip according to page and per_page parameters" do
78
- criteria.paginate(:page => 2, :per_page => 5).options.should include(:skip => 5)
79
- end
80
-
81
- specify "first fallback value for per_page option is the current limit" do
82
- criteria.limit(12).paginate.options.should include(:limit => 12)
83
- end
84
-
85
- specify "second fallback value for per_page option is WillPaginate.per_page" do
86
- criteria.paginate.options.should include(:limit => WillPaginate.per_page)
87
- end
88
-
89
- specify "page should default to 1" do
90
- criteria.paginate.options.should include(:skip => 0)
91
- end
92
-
93
- it "should convert strings to integers" do
94
- criteria.paginate(:page => "2", :per_page => "3").options.should include(:limit => 3)
95
- end
96
-
97
- describe "collection compatibility" do
98
- describe "#total_count" do
99
- it "should be calculated correctly" do
100
- criteria.paginate(:per_page => 1).total_entries.should == 4
101
- criteria.paginate(:per_page => 3).total_entries.should == 4
102
- end
103
-
104
- it "should be cached" do
105
- criteria.expects(:count).once.returns(123)
106
- criteria.paginate
107
- 2.times { criteria.total_entries.should == 123 }
108
- end
109
- end
110
-
111
- it "should calculate total_pages" do
112
- criteria.paginate(:per_page => 1).total_pages.should == 4
113
- criteria.paginate(:per_page => 3).total_pages.should == 2
114
- criteria.paginate(:per_page => 10).total_pages.should == 1
115
- end
116
-
117
- it "should return per_page" do
118
- criteria.paginate(:per_page => 1).per_page.should == 1
119
- criteria.paginate(:per_page => 5).per_page.should == 5
120
- end
121
-
122
- describe "#current_page" do
123
- it "should return current_page" do
124
- criteria.paginate(:page => 1).current_page.should == 1
125
- criteria.paginate(:page => 3).current_page.should == 3
126
- end
127
-
128
- it "should be casted to PageNumber" do
129
- page = criteria.paginate(:page => 1).current_page
130
- (page.instance_of? WillPaginate::PageNumber).should be
131
- end
132
- end
133
-
134
- it "should return offset" do
135
- criteria.paginate(:page => 1).offset.should == 0
136
- criteria.paginate(:page => 2, :per_page => 5).offset.should == 5
137
- criteria.paginate(:page => 3, :per_page => 10).offset.should == 20
138
- end
139
-
140
- it "should not pollute plain mongoid criterias" do
141
- %w(total_entries total_pages current_page).each do |method|
142
- criteria.should_not respond_to(method)
143
- end
144
- end
145
- end
146
- end
147
- end if mongoid_loaded
@@ -1,66 +0,0 @@
1
- require 'spec_helper'
2
-
3
- if !ENV['SKIP_NONRAILS_TESTS']
4
- require 'will_paginate/sequel'
5
- require File.expand_path('../sequel_test_connector', __FILE__)
6
- sequel_loaded = true
7
- else
8
- sequel_loaded = false
9
- end
10
-
11
- describe Sequel::Dataset::Pagination, 'extension' do
12
-
13
- class Car < Sequel::Model
14
- self.dataset = dataset.extension(:pagination)
15
- end
16
-
17
- it "should have the #paginate method" do
18
- Car.dataset.should respond_to(:paginate)
19
- end
20
-
21
- it "should NOT have the #paginate_by_sql method" do
22
- Car.dataset.should_not respond_to(:paginate_by_sql)
23
- end
24
-
25
- describe 'pagination' do
26
- before(:all) do
27
- Car.create(:name => 'Shelby', :notes => "Man's best friend")
28
- Car.create(:name => 'Aston Martin', :notes => "Woman's best friend")
29
- Car.create(:name => 'Corvette', :notes => 'King of the Jungle')
30
- end
31
-
32
- it "should imitate WillPaginate::Collection" do
33
- result = Car.dataset.paginate(1, 2)
34
-
35
- result.should_not be_empty
36
- result.size.should == 2
37
- result.length.should == 2
38
- result.total_entries.should == 3
39
- result.total_pages.should == 2
40
- result.per_page.should == 2
41
- result.current_page.should == 1
42
- end
43
-
44
- it "should perform" do
45
- Car.dataset.paginate(1, 2).all.should == [Car[1], Car[2]]
46
- end
47
-
48
- it "should be empty" do
49
- result = Car.dataset.paginate(3, 2)
50
- result.should be_empty
51
- end
52
-
53
- it "should perform with #select and #order" do
54
- result = Car.select(Sequel.lit("name as foo")).order(:name).paginate(1, 2).all
55
- result.size.should == 2
56
- result.first.values[:foo].should == "Aston Martin"
57
- end
58
-
59
- it "should perform with #filter" do
60
- results = Car.filter(:name => 'Shelby').paginate(1, 2).all
61
- results.size.should == 1
62
- results.first.should == Car.find(:name => 'Shelby')
63
- end
64
- end
65
-
66
- end if sequel_loaded
@@ -1,15 +0,0 @@
1
- require 'sequel'
2
-
3
- Symbol.class_eval do
4
- # Active Record calculations tries `as` on some objects but chokes when that
5
- # object was a Symbol and it gets a Sequel::SQL::AliasedExpression.
6
- undef as if method_defined? :as
7
- end
8
-
9
- db = Sequel.sqlite
10
-
11
- db.create_table :cars do
12
- primary_key :id, :integer, :auto_increment => true
13
- column :name, :text
14
- column :notes, :text
15
- end