peiji-san 1.0.0 → 1.1.0
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.
- data/README.rdoc +22 -0
- data/Rakefile +7 -21
- data/init.rb +2 -1
- data/lib/peiji_san.rb +2 -1
- data/lib/peiji_san/view_helper.rb +36 -4
- data/test/peiji_san_test.rb +35 -34
- data/test/sinatra_test.rb +43 -0
- data/test/test_helper.rb +13 -9
- data/test/view_helper_test.rb +26 -25
- metadata +159 -34
- data/TODO +0 -1
- data/VERSION.yml +0 -5
- data/peiji-san.gemspec +0 -30
- data/rdoc/classes/PeijiSan.html +0 -306
- data/rdoc/classes/PeijiSan/PaginationMethods.html +0 -344
- data/rdoc/classes/PeijiSan/ViewHelper.html +0 -303
- data/rdoc/created.rid +0 -1
- data/rdoc/files/LICENSE.html +0 -129
- data/rdoc/files/README_rdoc.html +0 -157
- data/rdoc/files/lib/peiji_san/view_helper_rb.html +0 -101
- data/rdoc/files/lib/peiji_san_rb.html +0 -133
- data/rdoc/fr_class_index.html +0 -29
- data/rdoc/fr_file_index.html +0 -30
- data/rdoc/fr_method_index.html +0 -39
- data/rdoc/index.html +0 -24
- data/rdoc/rdoc-style.css +0 -208
data/README.rdoc
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
= Peiji-San
|
2
2
|
|
3
|
+
{<img src="https://secure.travis-ci.org/Fingertips/peiji-san.png" />}[http://travis-ci.org/Fingertips/peiji-san]
|
4
|
+
|
3
5
|
Peiji-San uses scopes to create a thin pagination layer.
|
4
6
|
|
5
7
|
We try to stay out of the way of your application as much as possible. That's
|
@@ -32,6 +34,26 @@ After that the helpers will be usable in your view.
|
|
32
34
|
<% end %>
|
33
35
|
<% end %>
|
34
36
|
|
37
|
+
== Sinatra
|
38
|
+
|
39
|
+
Peiji-san is adept at working together with Sinatra. The only caveat is that
|
40
|
+
it uses the *url_for* method, which Sinatra does not provide by default. So you will
|
41
|
+
need a recent version of https://github.com/emk/sinatra-url-for. Unfortunately there
|
42
|
+
has been no gem releases for it in a while, so we recommend you use
|
43
|
+
tobias-sinatra-url-for until the situation improves. Afterwards, in your Sinatra application
|
44
|
+
|
45
|
+
class MyApp < Sinatra::Base
|
46
|
+
helpers Sinatra::UrlForHelper, PeijiSan::ViewHelper
|
47
|
+
|
48
|
+
get '/' do
|
49
|
+
# ...do the job
|
50
|
+
@collection = Item.page(params[:page])
|
51
|
+
erb :items
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
and in your view you can do exactly the same thing you see in the Rails example.
|
56
|
+
|
35
57
|
== Rails 2.3 and earlier
|
36
58
|
|
37
59
|
The latest version of Peiji only works in Rails 3 because of extensive
|
data/Rakefile
CHANGED
@@ -1,28 +1,14 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
begin
|
5
|
-
require 'jeweler'
|
6
|
-
Jeweler::Tasks.new do |s|
|
7
|
-
s.name = "peiji-san"
|
8
|
-
s.homepage = "http://github.com/Fingertips/peiji-san"
|
9
|
-
s.email = "eloy.de.enige@gmail.com"
|
10
|
-
s.authors = ["Eloy Duran"]
|
11
|
-
s.summary = s.description = "PeijiSan is a Rails plugin which uses named scopes to create a thin pagination layer."
|
12
|
-
s.files = FileList['**/**'] # tmp until we've patched Jeweler to be able to easily add files to defaults
|
1
|
+
# Fix for those annoying issues when using an older system rake
|
2
|
+
module Rake
|
3
|
+
module DSL
|
13
4
|
end
|
14
|
-
rescue LoadError
|
15
5
|
end
|
16
6
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
p.account = 'Fingertips'
|
21
|
-
end
|
22
|
-
rescue LoadError
|
23
|
-
end
|
7
|
+
require 'rubygems'
|
8
|
+
require 'bundler'
|
9
|
+
Bundler.require
|
24
10
|
|
25
|
-
require '
|
11
|
+
require 'rdoc/task'
|
26
12
|
Rake::RDocTask.new do |rdoc|
|
27
13
|
rdoc.rdoc_dir = 'rdoc'
|
28
14
|
rdoc.title = 'PeijiSan'
|
data/init.rb
CHANGED
data/lib/peiji_san.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
# Peiji-San uses named scopes to create a thin pagination layer.
|
2
3
|
#
|
3
4
|
# class Member < ActiveRecord::Base
|
@@ -117,4 +118,4 @@ module PeijiSan
|
|
117
118
|
|
118
119
|
entries.limit(entries_per_page).offset((page - 1) * entries_per_page)
|
119
120
|
end
|
120
|
-
end
|
121
|
+
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
module PeijiSan
|
2
3
|
# Optionally defines the peiji_san_options method in your helper to override
|
3
4
|
# the default options.
|
@@ -46,10 +47,41 @@ module PeijiSan
|
|
46
47
|
# collection. Defaults to <tt>:current</tt>.
|
47
48
|
def link_to_page(page, paginated_set, options = {}, html_options = {})
|
48
49
|
page_parameter = peiji_san_option(:page_parameter, options)
|
49
|
-
|
50
|
-
|
50
|
+
|
51
|
+
# Sinatra/Rails differentiator
|
52
|
+
pageable_params = respond_to?(:controller) ? controller.params : self.params
|
53
|
+
|
54
|
+
url_options = (page == 1 ? pageable_params.except(page_parameter) : pageable_params.merge(page_parameter => page))
|
55
|
+
anchor = peiji_san_option(:anchor, options)
|
56
|
+
url_options[:anchor] = anchor if anchor
|
51
57
|
html_options[:class] = peiji_san_option(:current_class, options) if paginated_set.current_page?(page)
|
52
|
-
|
58
|
+
|
59
|
+
# Again a little fork here
|
60
|
+
normalized_url_options = if respond_to?(:controller) # Rails
|
61
|
+
url_for(url_options)
|
62
|
+
else # Sinatra
|
63
|
+
root_path = env['SCRIPT_NAME'].blank? ? "/" : env["SCRIPT_NAME"]
|
64
|
+
url_for(root_path, url_options)
|
65
|
+
end
|
66
|
+
|
67
|
+
link_to page, normalized_url_options, html_options
|
68
|
+
end
|
69
|
+
|
70
|
+
# This Rails method is overridden to provide compatibility with other frameworks. By default it will just call super
|
71
|
+
# if super is provided. However, you will need your application to provide a standard url_for method
|
72
|
+
# in the context where this helper is used. For that you could use https://github.com/emk/sinatra-url-for/
|
73
|
+
def link_to(*arguments)
|
74
|
+
return super if defined?(super)
|
75
|
+
|
76
|
+
# What follows is a very simplistic implementation of link_to
|
77
|
+
link_text, url, html_options = arguments[0..2]
|
78
|
+
html_options[:href] = url
|
79
|
+
attr_string = html_options.map do | attribute, value |
|
80
|
+
'%s="%s"' % [Rack::Utils.escape_html(attribute), Rack::Utils.escape_html(value)]
|
81
|
+
end.join(' ')
|
82
|
+
|
83
|
+
# Compose the tag
|
84
|
+
return "<a %s>%s</a>" % [attr_string, Rack::Utils::escape_html(link_text)]
|
53
85
|
end
|
54
86
|
|
55
87
|
# Returns an array of pages to link to. This array includes the separator, so
|
@@ -100,4 +132,4 @@ module PeijiSan
|
|
100
132
|
end
|
101
133
|
end
|
102
134
|
end
|
103
|
-
end
|
135
|
+
end
|
data/test/peiji_san_test.rb
CHANGED
@@ -1,17 +1,18 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
require File.expand_path('../test_helper', __FILE__)
|
2
3
|
|
3
4
|
describe "A model extended by PeijiSan" do
|
4
5
|
it "should define an #entries_per_page= class method with which the max amount of entries per page is specified" do
|
5
|
-
Member.
|
6
|
-
Member.instance_variable_get(:@entries_per_page).
|
6
|
+
Member.must_respond_to :entries_per_page=
|
7
|
+
Member.instance_variable_get(:@entries_per_page).must_equal 10
|
7
8
|
end
|
8
9
|
|
9
10
|
it "should define an #entries_per_page reader method" do
|
10
|
-
Member.entries_per_page.
|
11
|
+
Member.entries_per_page.must_equal 10
|
11
12
|
end
|
12
13
|
|
13
14
|
it "should have defined a #page class method and added it to the class's scopes" do
|
14
|
-
Member.
|
15
|
+
Member.must_respond_to :page
|
15
16
|
end
|
16
17
|
end
|
17
18
|
|
@@ -27,38 +28,38 @@ describe "The PeijiSan extended scope" do
|
|
27
28
|
|
28
29
|
it "returns entries for the specified page" do
|
29
30
|
page_1 = Member.page(1)
|
30
|
-
page_1.length.
|
31
|
-
page_1.
|
31
|
+
page_1.length.must_equal 10
|
32
|
+
page_1.must_equal Member.find(:all, :offset => 0, :limit => 10)
|
32
33
|
end
|
33
34
|
|
34
35
|
it "returns the correct count of pages" do
|
35
|
-
Member.all_like_krs_1.page(1).page_count.
|
36
|
+
Member.all_like_krs_1.page(1).page_count.must_equal 11
|
36
37
|
end
|
37
38
|
|
38
39
|
it "knows the current page number" do
|
39
|
-
Member.page(2).current_page.
|
40
|
-
Member.page(4).current_page.
|
40
|
+
Member.page(2).current_page.must_equal 2
|
41
|
+
Member.page(4).current_page.must_equal 4
|
41
42
|
end
|
42
43
|
|
43
44
|
it "knows if there's a next page" do
|
44
|
-
Member.page(1).
|
45
|
-
Member.page(20).
|
46
|
-
Member.all_like_krs_1.but_ending_with_9.page(1).
|
45
|
+
Member.page(1).next_page.wont_be_nil
|
46
|
+
Member.page(20).next_page.must_be_nil
|
47
|
+
Member.all_like_krs_1.but_ending_with_9.page(1).next_page.must_be_nil
|
47
48
|
end
|
48
49
|
|
49
50
|
it "returns the next page number" do
|
50
|
-
Member.page(1).next_page.
|
51
|
-
Member.page(20).next_page.
|
51
|
+
Member.page(1).next_page.must_equal 2
|
52
|
+
Member.page(20).next_page.must_be_nil
|
52
53
|
end
|
53
54
|
|
54
55
|
it "knows if there's a previous page" do
|
55
|
-
Member.page(1).
|
56
|
-
Member.page(20).
|
56
|
+
Member.page(1).previous_page.must_be_nil
|
57
|
+
Member.page(20).previous_page.wont_be_nil
|
57
58
|
end
|
58
59
|
|
59
60
|
it "returns the previous page" do
|
60
|
-
Member.page(1).previous_page.
|
61
|
-
Member.page(20).previous_page.
|
61
|
+
Member.page(1).previous_page.must_equal nil
|
62
|
+
Member.page(20).previous_page.must_equal 19
|
62
63
|
end
|
63
64
|
|
64
65
|
it "knows if a given page number is the current page" do
|
@@ -67,30 +68,30 @@ describe "The PeijiSan extended scope" do
|
|
67
68
|
end
|
68
69
|
|
69
70
|
it "defaults to page 1 if no valid page argument was given" do
|
70
|
-
Member.page(nil).current_page.
|
71
|
-
Member.page('').current_page.
|
71
|
+
Member.page(nil).current_page.must_equal 1
|
72
|
+
Member.page('').current_page.must_equal 1
|
72
73
|
end
|
73
74
|
|
74
75
|
it "casts the page argument to an integer" do
|
75
|
-
Member.page('2').current_page.
|
76
|
+
Member.page('2').current_page.must_equal 2
|
76
77
|
end
|
77
78
|
|
78
79
|
it "takes an optional second argument which overrides the entries_per_page setting" do
|
79
|
-
Member.all_like_krs_1.page(1, 20).page_count.
|
80
|
+
Member.all_like_krs_1.page(1, 20).page_count.must_equal 6
|
80
81
|
end
|
81
82
|
|
82
83
|
it "returns the count of all the entries across all pages for the current scope" do
|
83
|
-
Member.all_like_krs_1.page(1).unpaged_count.
|
84
|
-
Member.all_like_krs_1.page(2).unpaged_count.
|
85
|
-
Member.all_like_krs_1.but_ending_with_9.page(1).unpaged_count.
|
84
|
+
Member.all_like_krs_1.page(1).unpaged_count.must_equal 110
|
85
|
+
Member.all_like_krs_1.page(2).unpaged_count.must_equal 110
|
86
|
+
Member.all_like_krs_1.but_ending_with_9.page(1).unpaged_count.must_equal 10
|
86
87
|
end
|
87
88
|
|
88
89
|
it "works when chained with other regular named scopes" do
|
89
|
-
Member.all_like_krs_1.page(1).page_count.
|
90
|
-
Member.all_like_krs_1.but_ending_with_9.page(2).page_count.
|
90
|
+
Member.all_like_krs_1.page(1).page_count.must_equal 11
|
91
|
+
Member.all_like_krs_1.but_ending_with_9.page(2).page_count.must_equal 1
|
91
92
|
|
92
|
-
Member.all_like_krs_1.page(2).
|
93
|
-
Member.all_like_krs_1.but_ending_with_9.page(1).
|
93
|
+
Member.all_like_krs_1.page(2).must_equal Member.find(:all, :conditions => "name LIKE 'KRS 1%'", :offset => 10, :limit => 10)
|
94
|
+
Member.all_like_krs_1.but_ending_with_9.page(1).must_equal Member.find(:all, :conditions => "name LIKE 'KRS 1%' AND name LIKE '%9'", :offset => 0, :limit => 10)
|
94
95
|
end
|
95
96
|
|
96
97
|
it "should still work when chained through an association proxy" do
|
@@ -99,10 +100,10 @@ describe "The PeijiSan extended scope" do
|
|
99
100
|
5.times { member.works.create(:status => 'new') }
|
100
101
|
|
101
102
|
page = member.reload.works.uploaded.page(1)
|
102
|
-
page.length.
|
103
|
-
page.page_count.
|
104
|
-
member.works.uploaded.page(4).length.
|
103
|
+
page.length.must_equal 5
|
104
|
+
page.page_count.must_equal 4
|
105
|
+
member.works.uploaded.page(4).length.must_equal 1
|
105
106
|
|
106
|
-
member.works.page(1).page_count.
|
107
|
+
member.works.page(1).page_count.must_equal 5
|
107
108
|
end
|
108
|
-
end
|
109
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require File.expand_path('../test_helper', __FILE__)
|
3
|
+
require 'rack/test'
|
4
|
+
require 'sinatra/base'
|
5
|
+
require 'sinatra/url_for'
|
6
|
+
require 'rexml/document'
|
7
|
+
|
8
|
+
class SimplisticApp < Sinatra::Base
|
9
|
+
helpers Sinatra::UrlForHelper, PeijiSan::ViewHelper
|
10
|
+
include Mocha::API
|
11
|
+
|
12
|
+
enable :raise_errors
|
13
|
+
|
14
|
+
get '/' do
|
15
|
+
collection = stub('Artists paginated collection')
|
16
|
+
collection.stubs(:current_page?).with(1).returns(false)
|
17
|
+
collection.stubs(:current_page?).with(2).returns(false)
|
18
|
+
collection.stubs(:page_count).returns(125)
|
19
|
+
link_to_page(2, collection)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
ENV['RACK_ENV'] = 'test'
|
24
|
+
|
25
|
+
describe "A Sinatra app that uses Peiji-San" do
|
26
|
+
include Rack::Test::Methods
|
27
|
+
|
28
|
+
def app
|
29
|
+
SimplisticApp
|
30
|
+
end
|
31
|
+
|
32
|
+
def query_hash(link)
|
33
|
+
query = REXML::Document.new(link).root.attributes['href'].match(/\?(.+)$/)[1]
|
34
|
+
Rack::Utils.parse_query(query)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "has it's link_to_page method put in place and operational" do
|
38
|
+
get '/'
|
39
|
+
last_response.status.must_equal 200
|
40
|
+
query_hash(last_response.body).must_equal 'page' => '2'
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
data/test/test_helper.rb
CHANGED
@@ -1,17 +1,21 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
|
1
3
|
module PeijiSanTest
|
2
4
|
module Initializer
|
3
5
|
def self.load_dependencies
|
4
|
-
|
5
|
-
|
6
|
-
require
|
7
|
-
|
6
|
+
require 'rubygems'
|
7
|
+
require 'bundler'
|
8
|
+
Bundler.require
|
9
|
+
|
10
|
+
require 'minitest/autorun'
|
11
|
+
require 'minitest/spec'
|
12
|
+
require 'mocha'
|
13
|
+
|
8
14
|
require 'active_support'
|
9
15
|
require 'active_record'
|
10
16
|
require 'action_view'
|
11
|
-
|
12
|
-
|
13
|
-
require 'mocha'
|
14
|
-
|
17
|
+
|
18
|
+
$:.unshift File.expand_path('../../lib', __FILE__)
|
15
19
|
require File.expand_path('../../init', __FILE__)
|
16
20
|
end
|
17
21
|
|
@@ -65,4 +69,4 @@ class Work < ActiveRecord::Base
|
|
65
69
|
self.entries_per_page = 5
|
66
70
|
|
67
71
|
scope :uploaded, where(:status => 'uploaded')
|
68
|
-
end
|
72
|
+
end
|
data/test/view_helper_test.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
1
2
|
require File.expand_path('../test_helper', __FILE__)
|
2
3
|
|
3
4
|
class TestController
|
@@ -44,35 +45,35 @@ describe "PeijiSan::ViewHelper::link_to_page" do
|
|
44
45
|
include PeijiSan::ViewHelper
|
45
46
|
|
46
47
|
it "should return a link for a given page number" do
|
47
|
-
link_to_page(2, collection).
|
48
|
+
link_to_page(2, collection).must_equal '<a href="/collections?page=2">2</a>'
|
48
49
|
end
|
49
50
|
|
50
51
|
it "should return a link for a given page number with the specified page parameter" do
|
51
|
-
link_to_page(2, collection, :page_parameter => 'pagina').
|
52
|
+
link_to_page(2, collection, :page_parameter => 'pagina').must_equal '<a href="/collections?pagina=2">2</a>'
|
52
53
|
end
|
53
54
|
|
54
55
|
it "should return a link for a given page number with the specified anchor" do
|
55
|
-
link_to_page(2, collection, :anchor => 'dude_so_many_pages').
|
56
|
+
link_to_page(2, collection, :anchor => 'dude_so_many_pages').must_equal '<a href="/collections?page=2#dude_so_many_pages">2</a>'
|
56
57
|
end
|
57
58
|
|
58
59
|
it "should return a link for a given page number and include the original params" do
|
59
60
|
controller.params[:starts_with] = 'h'
|
60
|
-
link_to_page(2, collection).
|
61
|
+
link_to_page(2, collection).must_equal '<a href="/collections?page=2&starts_with=h">2</a>'
|
61
62
|
end
|
62
63
|
|
63
64
|
it "should return a link which does not include the page GET variable if it's page number 1" do
|
64
65
|
controller.params[:page] = 34
|
65
|
-
link_to_page(1, collection).
|
66
|
+
link_to_page(1, collection).wont_match /page=\d+/
|
66
67
|
end
|
67
68
|
|
68
69
|
it "should return a link with the class current if it's for the currently selected page" do
|
69
70
|
collection.stubs(:current_page?).with(2).returns(true)
|
70
|
-
link_to_page(2, collection).
|
71
|
+
link_to_page(2, collection).must_equal '<a href="/collections?page=2" class="current">2</a>'
|
71
72
|
end
|
72
73
|
|
73
74
|
it "should return a link with the class current if it's for the currently selected page" do
|
74
75
|
collection.stubs(:current_page?).with(2).returns(true)
|
75
|
-
link_to_page(2, collection, :current_class => 'looking_at').
|
76
|
+
link_to_page(2, collection, :current_class => 'looking_at').must_equal '<a href="/collections?page=2" class="looking_at">2</a>'
|
76
77
|
end
|
77
78
|
end
|
78
79
|
|
@@ -82,56 +83,56 @@ describe "PeijiSan::ViewHelper::pages_to_link_to" do
|
|
82
83
|
|
83
84
|
it "should return a list of page numbers that should be included in the pagination list" do
|
84
85
|
collection.stubs(:current_page).returns(83)
|
85
|
-
pages_to_link_to(collection).
|
86
|
+
pages_to_link_to(collection).must_equal [1, '…', 80, 81, 82, 83, 84, 85, 86, '…', 125]
|
86
87
|
end
|
87
88
|
|
88
89
|
it "should return a list of page links with an ellips between page 1 and the next if the current page is at the end of the list" do
|
89
90
|
collection.stubs(:current_page).returns(119)
|
90
|
-
pages_to_link_to(collection).
|
91
|
+
pages_to_link_to(collection).must_equal [1, '…', 116, 117, 118, 119, 120, 121, 122, '…', 125]
|
91
92
|
|
92
93
|
120.upto(124) do |page|
|
93
94
|
collection.stubs(:current_page).returns(page)
|
94
|
-
pages_to_link_to(collection).
|
95
|
+
pages_to_link_to(collection).must_equal [1, '…', 117, 118, 119, 120, 121, 122, 123, 124, 125]
|
95
96
|
end
|
96
97
|
end
|
97
98
|
|
98
99
|
it "should return a list of page links with an ellips between the last page and the previous one if the current page is at the beginning of the list" do
|
99
100
|
1.upto(6) do |page|
|
100
101
|
collection.stubs(:current_page).returns(page)
|
101
|
-
pages_to_link_to(collection).
|
102
|
+
pages_to_link_to(collection).must_equal [1, 2, 3, 4, 5, 6, 7, 8, 9, '…', 125]
|
102
103
|
end
|
103
104
|
|
104
105
|
collection.stubs(:current_page).returns(7)
|
105
|
-
pages_to_link_to(collection).
|
106
|
+
pages_to_link_to(collection).must_equal [1, '…', 4, 5, 6, 7, 8, 9, 10, '…', 125]
|
106
107
|
end
|
107
108
|
|
108
109
|
it "should not show an ellips but all pages if there are only 10 pages, this is the threshold for when an ellips starts to be necessary" do
|
109
110
|
collection.stubs(:page_count).returns(10)
|
110
111
|
collection.stubs(:current_page).returns(5)
|
111
|
-
pages_to_link_to(collection).
|
112
|
+
pages_to_link_to(collection).must_equal((1..10).to_a)
|
112
113
|
end
|
113
114
|
|
114
115
|
it "should not return more page links if there aren't that many pages" do
|
115
116
|
1.upto(9) do |page|
|
116
117
|
collection.stubs(:page_count).returns(page)
|
117
118
|
collection.stubs(:current_page).returns(page)
|
118
|
-
pages_to_link_to(collection).
|
119
|
+
pages_to_link_to(collection).must_equal((1..page).to_a)
|
119
120
|
end
|
120
121
|
end
|
121
122
|
|
122
123
|
it "should return a list of page numbers that should be included in the pagination list with the specified number of :max_visible" do
|
123
124
|
collection.stubs(:current_page).returns(83)
|
124
|
-
pages_to_link_to(collection, :max_visible => 5).
|
125
|
-
pages_to_link_to(collection, :max_visible => 15).
|
125
|
+
pages_to_link_to(collection, :max_visible => 5).must_equal [1, '…', 83, '…', 125]
|
126
|
+
pages_to_link_to(collection, :max_visible => 15).must_equal [1, '…', 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, '…', 125]
|
126
127
|
|
127
128
|
collection.stubs(:current_page).returns(3)
|
128
|
-
pages_to_link_to(collection, :max_visible => 5).
|
129
|
-
pages_to_link_to(collection, :max_visible => 15).
|
129
|
+
pages_to_link_to(collection, :max_visible => 5).must_equal [1, 2, 3, '…', 125]
|
130
|
+
pages_to_link_to(collection, :max_visible => 15).must_equal( (1..13).to_a + ['…', 125] )
|
130
131
|
end
|
131
132
|
|
132
133
|
it "should return a list of page numbers with the specified separator instead of the default ellips" do
|
133
134
|
collection.stubs(:current_page).returns(83)
|
134
|
-
pages_to_link_to(collection, :separator => '...').
|
135
|
+
pages_to_link_to(collection, :separator => '...').must_equal [1, '...', 80, 81, 82, 83, 84, 85, 86, '...', 125]
|
135
136
|
end
|
136
137
|
end
|
137
138
|
|
@@ -148,25 +149,25 @@ describe "ApplicationHelper, when overriding defaults" do
|
|
148
149
|
include ApplicationHelperWithDefaults
|
149
150
|
|
150
151
|
it "should return a link for a given page number with the specified page parameter" do
|
151
|
-
link_to_page(2, collection).
|
152
|
+
link_to_page(2, collection).must_equal '<a href="/collections?pagina=2#dude_so_many_pages">2</a>'
|
152
153
|
end
|
153
154
|
|
154
155
|
it "should return a link for a given page number with the specified anchor" do
|
155
|
-
link_to_page(2, collection).
|
156
|
+
link_to_page(2, collection).must_equal '<a href="/collections?pagina=2#dude_so_many_pages">2</a>'
|
156
157
|
end
|
157
158
|
|
158
159
|
it "should return a link with the class current if it's for the currently selected page" do
|
159
160
|
collection.stubs(:current_page?).with(2).returns(true)
|
160
|
-
link_to_page(2, collection, :current_class => 'looking_at').
|
161
|
+
link_to_page(2, collection, :current_class => 'looking_at').must_equal '<a href="/collections?pagina=2#dude_so_many_pages" class="looking_at">2</a>'
|
161
162
|
end
|
162
163
|
|
163
164
|
it "should return a list of page numbers that should be included in the pagination list with the specified number of :max_visible" do
|
164
165
|
collection.stubs(:current_page).returns(3)
|
165
|
-
pages_to_link_to(collection).
|
166
|
+
pages_to_link_to(collection).must_equal [1, 2, 3, '...', 125]
|
166
167
|
end
|
167
168
|
|
168
169
|
it "should return a list of page numbers with the specified separator instead of the default ellips" do
|
169
170
|
collection.stubs(:current_page).returns(83)
|
170
|
-
pages_to_link_to(collection).
|
171
|
+
pages_to_link_to(collection).must_equal [1, '...', 83, '...', 125]
|
171
172
|
end
|
172
|
-
end
|
173
|
+
end
|