simple_paginate 0.0.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 +7 -0
- data/.gitignore +39 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/LICENSE.txt +22 -0
- data/README.md +77 -0
- data/Rakefile +50 -0
- data/app/views/simple_paginate/_next_page.html.erb +9 -0
- data/app/views/simple_paginate/_next_page.html.haml +7 -0
- data/app/views/simple_paginate/_next_page.html.slim +7 -0
- data/app/views/simple_paginate/_paginator.html.erb +12 -0
- data/app/views/simple_paginate/_paginator.html.haml +9 -0
- data/app/views/simple_paginate/_paginator.html.slim +9 -0
- data/app/views/simple_paginate/_prev_page.html.erb +9 -0
- data/app/views/simple_paginate/_prev_page.html.haml +7 -0
- data/app/views/simple_paginate/_prev_page.html.slim +7 -0
- data/config/locales/simple_paginate.yml +5 -0
- data/gemfiles/.bundle/config +2 -0
- data/gemfiles/active_record_42.gemfile +24 -0
- data/gemfiles/active_record_42.gemfile.lock +319 -0
- data/lib/generators/simple_paginate/config_generator.rb +16 -0
- data/lib/generators/simple_paginate/templates/simple_paginate_config.rb +3 -0
- data/lib/generators/simple_paginate/views_generator.rb +31 -0
- data/lib/simple_paginate/config.rb +21 -0
- data/lib/simple_paginate/engine.rb +4 -0
- data/lib/simple_paginate/helpers/action_view_extension.rb +19 -0
- data/lib/simple_paginate/helpers/paginator.rb +70 -0
- data/lib/simple_paginate/helpers/tags.rb +84 -0
- data/lib/simple_paginate/models/active_record_extension.rb +27 -0
- data/lib/simple_paginate/railtie.rb +16 -0
- data/lib/simple_paginate/version.rb +3 -0
- data/lib/simple_paginate.rb +9 -0
- data/simple_paginate.gemspec +28 -0
- data/spec/fake_app/active_record/config.rb +3 -0
- data/spec/fake_app/active_record/models.rb +12 -0
- data/spec/fake_app/log/development.log +0 -0
- data/spec/fake_app/rails_app.rb +38 -0
- data/spec/simple_paginate/config_spec.rb +27 -0
- data/spec/simple_paginate/helpers/action_view_extension_spec.rb +43 -0
- data/spec/simple_paginate/helpers/tags_spec.rb +57 -0
- data/spec/simple_paginate/models/active_record_extension_spec.rb +71 -0
- data/spec/simple_paginate/version_spec.rb +8 -0
- data/spec/spec_helper.rb +19 -0
- data/spec/support/database_cleaner.rb +12 -0
- metadata +182 -0
@@ -0,0 +1,31 @@
|
|
1
|
+
module SimplePaginate
|
2
|
+
module Generators
|
3
|
+
|
4
|
+
class ViewsGenerator < Rails::Generators::Base
|
5
|
+
source_root File.expand_path('../../../../app/views/simple_paginate', __FILE__)
|
6
|
+
|
7
|
+
class_option :template_engine, :type => :string, :aliases => '-e', :desc => 'Template engine for the views. Available options are "erb", "haml", and "slim".'
|
8
|
+
|
9
|
+
def self.banner #:nodoc:
|
10
|
+
<<-BANNER.chomp
|
11
|
+
rails g simple_paginate:views [options]
|
12
|
+
|
13
|
+
Copies all paginator partial templates to your application.
|
14
|
+
BANNER
|
15
|
+
end
|
16
|
+
|
17
|
+
def copy_views
|
18
|
+
filename_pattern = File.join self.class.source_root, "*.html.#{template_engine}"
|
19
|
+
Dir.glob(filename_pattern).map {|f| File.basename f}.each do |f|
|
20
|
+
copy_file f, "app/views/simple_paginate/#{f}"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def template_engine
|
27
|
+
options[:template_engine].try(:to_s).try(:downcase) || 'erb'
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'active_support/configurable'
|
2
|
+
|
3
|
+
module SimplePaginate
|
4
|
+
def self.configure(&block)
|
5
|
+
yield @config ||= SimplePaginate::Configuration.new
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.config
|
9
|
+
@config
|
10
|
+
end
|
11
|
+
|
12
|
+
class Configuration
|
13
|
+
include ActiveSupport::Configurable
|
14
|
+
|
15
|
+
config_accessor :default_per_page
|
16
|
+
end
|
17
|
+
|
18
|
+
configure do |config|
|
19
|
+
config.default_per_page = 25
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module SimplePaginate
|
2
|
+
module ActionViewExtension
|
3
|
+
# A helper that renders the pagination links
|
4
|
+
def simple_paginate(scope, options = {})
|
5
|
+
paginator = SimplePaginate::Helpers::Paginator.new self, options.reverse_merge(current_page: scope.current_page, per_page: scope.limit_value, length: scope.length)
|
6
|
+
paginator.to_s
|
7
|
+
end
|
8
|
+
|
9
|
+
def link_to_previous_page(scope, name = nil, options = {})
|
10
|
+
prev_page = SimplePaginate::Helpers::PrevPage.new self, options.reverse_merge(:current_page => scope.current_page)
|
11
|
+
link_to_unless scope.first_page?, name, prev_page.url, options.except(:params, :param_name).reverse_merge(:rel => 'prev')
|
12
|
+
end
|
13
|
+
|
14
|
+
def link_to_next_page(scope, name = nil, options = {})
|
15
|
+
next_page = SimplePaginate::Helpers::NextPage.new self, options.reverse_merge(:current_page => scope.current_page)
|
16
|
+
link_to_unless scope.last_page?, name, next_page.url, options.except(:params, :param_name).reverse_merge(:rel => 'next')
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'action_view'
|
2
|
+
require 'simple_paginate/helpers/tags'
|
3
|
+
|
4
|
+
module SimplePaginate
|
5
|
+
module Helpers
|
6
|
+
class Paginator < Tag
|
7
|
+
include ActionView::Context
|
8
|
+
|
9
|
+
def initialize(template, options)
|
10
|
+
super template, options.merge(current_page: PageProxy.new(options))
|
11
|
+
@output_buffer = ActionView::OutputBuffer.new
|
12
|
+
end
|
13
|
+
|
14
|
+
def render(&block)
|
15
|
+
instance_eval(&block)
|
16
|
+
@output_buffer
|
17
|
+
end
|
18
|
+
|
19
|
+
def prev_page_tag
|
20
|
+
PrevPage.new @template, @options
|
21
|
+
end
|
22
|
+
|
23
|
+
def next_page_tag
|
24
|
+
NextPage.new @template, @options
|
25
|
+
end
|
26
|
+
|
27
|
+
def to_s
|
28
|
+
super @options.merge(paginator: self)
|
29
|
+
end
|
30
|
+
|
31
|
+
class PageProxy
|
32
|
+
def initialize(options)
|
33
|
+
@options = options
|
34
|
+
end
|
35
|
+
|
36
|
+
def number
|
37
|
+
@options[:current_page]
|
38
|
+
end
|
39
|
+
|
40
|
+
def first?
|
41
|
+
@options[:current_page] == 1
|
42
|
+
end
|
43
|
+
|
44
|
+
def last?
|
45
|
+
@options[:length] < @options[:per_page]
|
46
|
+
end
|
47
|
+
|
48
|
+
def to_i
|
49
|
+
number
|
50
|
+
end
|
51
|
+
|
52
|
+
def to_s
|
53
|
+
number.to_s
|
54
|
+
end
|
55
|
+
|
56
|
+
def +(other)
|
57
|
+
to_i + other.to_i
|
58
|
+
end
|
59
|
+
|
60
|
+
def -(other)
|
61
|
+
to_i - other.to_i
|
62
|
+
end
|
63
|
+
|
64
|
+
def <=>(other)
|
65
|
+
to_i <=> other.to_i
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
module SimplePaginate
|
2
|
+
module Helpers
|
3
|
+
PARAM_KEY_BLACKLIST = :authenticity_token, :commit, :utf8, :_method
|
4
|
+
PARAM_NAME = 'page'
|
5
|
+
|
6
|
+
class Tag
|
7
|
+
def initialize(template, options = {})
|
8
|
+
@template, @options = template, options
|
9
|
+
@views_prefix = @options.delete(:views_prefix)
|
10
|
+
@params = template.params.except(*PARAM_KEY_BLACKLIST).merge(@options.delete(:params) || {})
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_s(locals = {})
|
14
|
+
@template.render partial: partial_path, locals: @options.merge(locals), formats: [:html]
|
15
|
+
end
|
16
|
+
|
17
|
+
def page_url_for(page)
|
18
|
+
@template.url_for params_for(page).merge(only_path: true)
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def params_for(page)
|
24
|
+
page_params = Rack::Utils.parse_nested_query("#{PARAM_NAME}=#{page}")
|
25
|
+
page_params = @params.with_indifferent_access.deep_merge(page_params)
|
26
|
+
|
27
|
+
if page <= 1
|
28
|
+
PARAM_NAME.to_s.scan(/\w+/)[0..-2].inject(page_params){|h, k| h[k] }[$&] = nil
|
29
|
+
end
|
30
|
+
|
31
|
+
page_params
|
32
|
+
end
|
33
|
+
|
34
|
+
def partial_path
|
35
|
+
[@views_prefix,
|
36
|
+
'simple_paginate',
|
37
|
+
self.class.name.demodulize.underscore
|
38
|
+
].compact.join('/')
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
module Link
|
43
|
+
def page
|
44
|
+
raise 'Override page with the actual page value to be a Page.'
|
45
|
+
end
|
46
|
+
|
47
|
+
def url
|
48
|
+
page_url_for(page)
|
49
|
+
end
|
50
|
+
|
51
|
+
def to_s(locals = {})
|
52
|
+
super locals.merge(url: url)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
class Page < Tag
|
57
|
+
include Link
|
58
|
+
|
59
|
+
def page
|
60
|
+
@options[:page]
|
61
|
+
end
|
62
|
+
|
63
|
+
def to_s(locals = {})
|
64
|
+
super locals.merge(page: page)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
class PrevPage < Tag
|
69
|
+
include Link
|
70
|
+
|
71
|
+
def page
|
72
|
+
@options[:current_page] - 1
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
class NextPage < Tag
|
77
|
+
include Link
|
78
|
+
|
79
|
+
def page
|
80
|
+
@options[:current_page] + 1
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module SimplePaginate
|
2
|
+
module ActiveRecordExtension
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
def self.paginate(options = {})
|
7
|
+
options = options.dup
|
8
|
+
page = options.delete(:page) || 1
|
9
|
+
per_page = options.delete(:per_page) || SimplePaginate.config.default_per_page
|
10
|
+
|
11
|
+
offset(per_page * (page - 1)).limit(per_page + 1).extending do
|
12
|
+
def current_page
|
13
|
+
(offset_value / (limit_value - 1)) + 1
|
14
|
+
end
|
15
|
+
|
16
|
+
def first_page?
|
17
|
+
current_page == 1
|
18
|
+
end
|
19
|
+
|
20
|
+
def last_page?
|
21
|
+
length < limit_value
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module SimplePaginate
|
2
|
+
class Railtie < Rails::Railtie
|
3
|
+
initializer 'simple_paginate' do |app|
|
4
|
+
ActiveSupport.on_load :active_record do
|
5
|
+
require 'simple_paginate/models/active_record_extension'
|
6
|
+
::ActiveRecord::Base.send :include, SimplePaginate::ActiveRecordExtension
|
7
|
+
end
|
8
|
+
|
9
|
+
ActiveSupport.on_load :action_view do
|
10
|
+
require 'simple_paginate/helpers/action_view_extension'
|
11
|
+
require 'simple_paginate/helpers/paginator'
|
12
|
+
::ActionView::Base.send :include, SimplePaginate::ActionViewExtension
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'simple_paginate/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "simple_paginate"
|
8
|
+
spec.version = SimplePaginate::VERSION
|
9
|
+
spec.authors = ["Yong Gu"]
|
10
|
+
spec.email = ["zerogy921@gmail.com"]
|
11
|
+
spec.summary = %q{Simple pagination solution for previous and next page navigation.}
|
12
|
+
spec.description = %q{Simple pagination solution for previous and next page navigation.}
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_dependency 'activesupport', ['>= 3.0.0']
|
22
|
+
spec.add_dependency 'actionpack', ['>= 3.0.0']
|
23
|
+
|
24
|
+
spec.add_development_dependency "bundler", "~> 1.6"
|
25
|
+
spec.add_development_dependency "rake"
|
26
|
+
spec.add_development_dependency "rspec", "~> 3.2"
|
27
|
+
spec.add_development_dependency 'database_cleaner', ['~> 1.4.0']
|
28
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# models
|
2
|
+
class User < ActiveRecord::Base
|
3
|
+
end
|
4
|
+
|
5
|
+
#migrations
|
6
|
+
class CreateAllTables < ActiveRecord::Migration
|
7
|
+
def self.up
|
8
|
+
create_table(:users) {|t| t.string :name; t.integer :age}
|
9
|
+
end
|
10
|
+
end
|
11
|
+
ActiveRecord::Migration.verbose = false
|
12
|
+
CreateAllTables.up
|
File without changes
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'action_controller/railtie'
|
2
|
+
require 'action_view/railtie'
|
3
|
+
|
4
|
+
require 'fake_app/active_record/config'
|
5
|
+
# config
|
6
|
+
app = Class.new(Rails::Application)
|
7
|
+
app.config.secret_key_base = '9489b3eee4eccf317ed77407553e8adc97baca7c74dc7ee33cd93e4c8b69477eea66eaedeb18af0be2679887c7c69c0a28c0fded0a71ea472a8c4laalal19cb'
|
8
|
+
app.config.secret_token = '3b7cd727ee24e8444053437c36cc66c4'
|
9
|
+
app.config.session_store :cookie_store, :key => '_myapp_session'
|
10
|
+
app.config.active_support.deprecation = :log
|
11
|
+
app.config.eager_load = false
|
12
|
+
# Rais.root
|
13
|
+
app.config.root = File.dirname(__FILE__)
|
14
|
+
Rails.backtrace_cleaner.remove_silencers!
|
15
|
+
app.initialize!
|
16
|
+
|
17
|
+
# routes
|
18
|
+
app.routes.draw do
|
19
|
+
resources :users
|
20
|
+
end
|
21
|
+
|
22
|
+
#models
|
23
|
+
require 'fake_app/active_record/models'
|
24
|
+
|
25
|
+
# controllers
|
26
|
+
class ApplicationController < ActionController::Base; end
|
27
|
+
class UsersController < ApplicationController
|
28
|
+
def index
|
29
|
+
@users = User.paginate page: params[:page]
|
30
|
+
render :inline => <<-ERB
|
31
|
+
<%= @users.map(&:name).join("\n") %>
|
32
|
+
<%= simple_paginate @users %>
|
33
|
+
ERB
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# helpers
|
38
|
+
Object.const_set(:ApplicationHelper, Module.new)
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SimplePaginate::Configuration do
|
4
|
+
subject { SimplePaginate.config }
|
5
|
+
|
6
|
+
describe 'default_per_page' do
|
7
|
+
context 'by default' do
|
8
|
+
it { expect(subject.default_per_page).to eq 25 }
|
9
|
+
end
|
10
|
+
|
11
|
+
context 'configured via config block' do
|
12
|
+
before do
|
13
|
+
SimplePaginate.configure do |config|
|
14
|
+
config.default_per_page = 20
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
it { expect(subject.default_per_page).to eq 25 }
|
19
|
+
|
20
|
+
before do
|
21
|
+
SimplePaginate.configure do |config|
|
22
|
+
config.default_per_page = 25
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe 'SimplePaginate::ActionViewExtension', type: :helper do
|
4
|
+
before :all do
|
5
|
+
1.upto(100) {|i| User.create name: "user#{'%03d' % i}"}
|
6
|
+
end
|
7
|
+
|
8
|
+
after :all do
|
9
|
+
DatabaseCleaner.clean_with(:truncation)
|
10
|
+
end
|
11
|
+
|
12
|
+
describe '#link_to_previous_page' do
|
13
|
+
subject { helper.link_to_previous_page users, 'Previous Page', params: { controller: 'users', action: 'index' } }
|
14
|
+
|
15
|
+
context 'having previous pages' do
|
16
|
+
let(:users) { User.paginate(page: 3) }
|
17
|
+
|
18
|
+
it { expect(subject).to eq('<a rel="prev" href="/users?page=2">Previous Page</a>') }
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'the first page' do
|
22
|
+
let(:users) { User.paginate(page: 1) }
|
23
|
+
|
24
|
+
it { expect(subject).to eq('Previous Page') }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe '#link_to_next_page' do
|
29
|
+
subject { helper.link_to_next_page users, 'Next Page', params: { controller: 'users', action: 'index' } }
|
30
|
+
|
31
|
+
context 'having next pages' do
|
32
|
+
let(:users) { User.paginate(page: 3) }
|
33
|
+
|
34
|
+
it { expect(subject).to eq('<a rel="next" href="/users?page=4">Next Page</a>') }
|
35
|
+
end
|
36
|
+
|
37
|
+
context 'the last page' do
|
38
|
+
let(:users) { User.paginate(page: 4) }
|
39
|
+
|
40
|
+
it { expect(subject).to eq('Next Page') }
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
include SimplePaginate::Helpers
|
3
|
+
|
4
|
+
describe 'SimplePaginate::Helpers', type: :helper do
|
5
|
+
describe 'Tag' do
|
6
|
+
describe '#page_url_for' do
|
7
|
+
before { helper.request.assign_parameters(_routes, 'users', 'index') }
|
8
|
+
|
9
|
+
context 'for first page' do
|
10
|
+
subject { Tag.new(helper).page_url_for(1) }
|
11
|
+
it { expect(subject).to eq('/users') }
|
12
|
+
end
|
13
|
+
|
14
|
+
context 'with a friendly route setting' do
|
15
|
+
before do
|
16
|
+
helper.request.assign_parameters(_routes, 'users', 'index', page: 3)
|
17
|
+
end
|
18
|
+
|
19
|
+
context 'for first page' do
|
20
|
+
subject { Tag.new(helper).page_url_for(1) }
|
21
|
+
it { expect(subject).to eq('/users') }
|
22
|
+
end
|
23
|
+
|
24
|
+
context 'for other page' do
|
25
|
+
subject { Tag.new(helper).page_url_for(5) }
|
26
|
+
it { expect(subject).to eq('/users?page=5') }
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe 'Paginator' do
|
33
|
+
describe 'Paginator::PageProxy' do
|
34
|
+
describe '#first?' do
|
35
|
+
context 'page == 1' do
|
36
|
+
subject { Paginator::PageProxy.new(current_page: 1, length: 20, per_page: 25) }
|
37
|
+
it { expect(subject.first?).to be_truthy }
|
38
|
+
end
|
39
|
+
context 'page != 1' do
|
40
|
+
subject { Paginator::PageProxy.new(current_page: 5, length: 20, per_page: 25) }
|
41
|
+
it { expect(subject.first?).to be_falsey }
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
describe '#last?' do
|
46
|
+
context 'length == per_page' do
|
47
|
+
subject { Paginator::PageProxy.new(current_page: 5, length: 25, per_page: 25) }
|
48
|
+
it { expect(subject.last?).to be_falsey}
|
49
|
+
end
|
50
|
+
context 'length < per_page' do
|
51
|
+
subject { Paginator::PageProxy.new(current_page: 5, length: 20, per_page: 25) }
|
52
|
+
it { expect(subject.last?).to be_truthy }
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SimplePaginate::ActiveRecordExtension do
|
4
|
+
before :all do
|
5
|
+
1.upto(100) {|i| User.create name: "user#{'%03d' % i}"}
|
6
|
+
end
|
7
|
+
|
8
|
+
after :all do
|
9
|
+
DatabaseCleaner.clean_with(:truncation)
|
10
|
+
end
|
11
|
+
|
12
|
+
describe '#paginate' do
|
13
|
+
subject { User.paginate(page: page) }
|
14
|
+
|
15
|
+
context 'page 1' do
|
16
|
+
let(:page) { 1 }
|
17
|
+
|
18
|
+
it { expect(subject.first.name).to eq('user001') }
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'page 2' do
|
22
|
+
let(:page) { 2 }
|
23
|
+
|
24
|
+
it { expect(subject.first.name).to eq('user026') }
|
25
|
+
end
|
26
|
+
|
27
|
+
context 'page < 1' do
|
28
|
+
let(:page) { 0 }
|
29
|
+
|
30
|
+
it { expect(subject.first.name).to eq('user001') }
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'page > max page' do
|
34
|
+
let(:page) { 5 }
|
35
|
+
|
36
|
+
it { expect(subject).to be_empty }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
describe '#current_page' do
|
41
|
+
context 'page 1' do
|
42
|
+
subject { User.paginate(page: 1) }
|
43
|
+
it { expect(subject.current_page).to eq 1 }
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
describe '#first_page?' do
|
48
|
+
context 'on first page' do
|
49
|
+
subject { User.paginate(page: 1) }
|
50
|
+
it { expect(subject.first_page?).to be_truthy }
|
51
|
+
end
|
52
|
+
|
53
|
+
context 'not on first page' do
|
54
|
+
subject { User.paginate(page: 2) }
|
55
|
+
it { expect(subject.first_page?).to be_falsey }
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe '#last_page?' do
|
60
|
+
context 'on last page' do
|
61
|
+
subject { User.paginate(page: 4) }
|
62
|
+
|
63
|
+
it { expect(subject.last_page?).to be_truthy }
|
64
|
+
end
|
65
|
+
|
66
|
+
context 'not on last page' do
|
67
|
+
subject { User.paginate(page: 3) }
|
68
|
+
it { expect(subject.last_page?).to be_falsey }
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
begin
|
2
|
+
require 'rails'
|
3
|
+
rescue LoadError
|
4
|
+
end
|
5
|
+
|
6
|
+
require 'bundler/setup'
|
7
|
+
Bundler.require
|
8
|
+
|
9
|
+
require 'database_cleaner'
|
10
|
+
require 'fake_app/rails_app'
|
11
|
+
require 'rspec/rails'
|
12
|
+
|
13
|
+
# Requires supporting files with custom matchers and macros, etc,
|
14
|
+
# in ./support/ and its subdirectories.
|
15
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
16
|
+
|
17
|
+
RSpec.configure do |config|
|
18
|
+
config.infer_spec_type_from_file_location!
|
19
|
+
end
|