paginate_alphabetically 0.1.2 → 0.2.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.textile +1 -3
- data/VERSION +1 -1
- data/init.rb +2 -0
- data/lib/paginate_alphabetically.rb +1 -1
- data/lib/view_helpers.rb +24 -0
- data/test/helper.rb +9 -0
- data/test/test_paginate_alphabetically.rb +14 -13
- data/test/test_view_helpers.rb +34 -0
- metadata +7 -4
data/README.textile
CHANGED
@@ -21,9 +21,7 @@ end
|
|
21
21
|
|
22
22
|
h3. View (haml example)
|
23
23
|
|
24
|
-
bc.
|
25
|
-
- User.pagination_letters.each do |letter|
|
26
|
-
%li= link_to letter, users_path(:letter => letter)
|
24
|
+
bc. = alphabetically_paginate(@users)
|
27
25
|
%ul.users
|
28
26
|
- @users.each do |user|
|
29
27
|
%li= user.surname
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.0
|
data/init.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
1
|
require File.expand_path(File.join(File.dirname(__FILE__), 'lib/paginate_alphabetically'))
|
2
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'lib/view_helpers'))
|
2
3
|
|
3
4
|
ActiveRecord::Base.extend(PaginateAlphabetically)
|
5
|
+
ActionView::Base.class_eval { include PaginateAlphabetically::ViewHelpers }
|
@@ -10,7 +10,7 @@ module PaginateAlphabetically
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def first_letter
|
13
|
-
first_instance = find(:first, :order => @attribute)
|
13
|
+
first_instance = find(:first, :order => @attribute, :conditions => ["#{@attribute.to_s} >= ?", 'a'])
|
14
14
|
return 'A' if first_instance.nil?
|
15
15
|
first_instance.send(@attribute)[0].chr.upcase
|
16
16
|
end
|
data/lib/view_helpers.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
module PaginateAlphabetically
|
2
|
+
module ViewHelpers
|
3
|
+
def alphabetically_paginate(collection)
|
4
|
+
return "" if collection.empty?
|
5
|
+
available_letters = collection.first.class.pagination_letters
|
6
|
+
content_tag(:ul, alphabetical_links_to(available_letters),
|
7
|
+
:class => "pagination")
|
8
|
+
end
|
9
|
+
|
10
|
+
def alphabetical_links_to(available_letters)
|
11
|
+
('A'..'Z').map do |letter|
|
12
|
+
content_tag(:li, paginated_letter(available_letters, letter))
|
13
|
+
end.join(" ")
|
14
|
+
end
|
15
|
+
|
16
|
+
def paginated_letter(available_letters, letter)
|
17
|
+
if available_letters.include?(letter)
|
18
|
+
link_to(letter, "?letter=#{letter}")
|
19
|
+
else
|
20
|
+
letter
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/test/helper.rb
CHANGED
@@ -4,6 +4,8 @@ require 'active_support/test_case'
|
|
4
4
|
require 'test/unit'
|
5
5
|
require 'sqlite3'
|
6
6
|
require 'active_record'
|
7
|
+
require 'action_view'
|
8
|
+
include ActionView::Helpers
|
7
9
|
require File.expand_path(File.join(File.dirname(__FILE__), '../init.rb'))
|
8
10
|
|
9
11
|
ActiveRecord::Base.establish_connection(
|
@@ -12,3 +14,10 @@ ActiveRecord::Base.establish_connection(
|
|
12
14
|
)
|
13
15
|
|
14
16
|
load File.expand_path(File.join(File.dirname(__FILE__), 'db/schema.rb'))
|
17
|
+
|
18
|
+
class Thing < ActiveRecord::Base
|
19
|
+
paginate_alphabetically :by => :name
|
20
|
+
end
|
21
|
+
|
22
|
+
class Numpty < ActiveRecord::Base
|
23
|
+
end
|
@@ -1,39 +1,40 @@
|
|
1
1
|
require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
|
2
2
|
|
3
|
-
class Thing < ActiveRecord::Base
|
4
|
-
paginate_alphabetically :by => :name
|
5
|
-
end
|
6
|
-
|
7
|
-
class Numpty < ActiveRecord::Base
|
8
|
-
end
|
9
|
-
|
10
3
|
class PaginateAlphabeticallyTest < ActiveSupport::TestCase
|
11
4
|
def setup
|
12
5
|
%w(one two Three four Five Six).map {|name| Thing.create!(:name => name)}
|
13
6
|
end
|
14
7
|
|
15
|
-
|
8
|
+
test "pagination letters" do
|
16
9
|
assert_equal ['F', 'O', 'S', 'T'], Thing.pagination_letters
|
17
10
|
end
|
18
11
|
|
19
|
-
|
12
|
+
test "first letter" do
|
13
|
+
assert_equal 'F', Thing.first_letter
|
14
|
+
end
|
15
|
+
|
16
|
+
test "first letter is alphabetical" do
|
17
|
+
Thing.create!(:name => ' o noes a space :(')
|
18
|
+
Thing.create!(:name => '1')
|
19
|
+
Thing.create!(:name => '®')
|
20
|
+
Thing.create!(:name => '$')
|
20
21
|
assert_equal 'F', Thing.first_letter
|
21
22
|
end
|
22
23
|
|
23
|
-
|
24
|
+
test "first letter when there are no things" do
|
24
25
|
Thing.destroy_all
|
25
26
|
assert_equal 'A', Thing.first_letter
|
26
27
|
end
|
27
28
|
|
28
|
-
|
29
|
+
test "alphabetical group without specifying letter" do
|
29
30
|
assert_equal ['Five', 'four'], Thing.alphabetical_group.map(&:name)
|
30
31
|
end
|
31
32
|
|
32
|
-
|
33
|
+
test "alphabetical group specifying letter" do
|
33
34
|
assert_equal ['Three', 'two'], Thing.alphabetical_group('t').map(&:name)
|
34
35
|
end
|
35
36
|
|
36
|
-
|
37
|
+
test "class without pagination has no pagination methods" do
|
37
38
|
assert_raise NoMethodError do
|
38
39
|
Numpty.alphabetical_group
|
39
40
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require File.expand_path(File.join(File.dirname(__FILE__), 'helper'))
|
2
|
+
include PaginateAlphabetically::ViewHelpers
|
3
|
+
|
4
|
+
class ViewHelperTest < ActiveSupport::TestCase
|
5
|
+
def setup
|
6
|
+
@result = alphabetically_paginate([Thing.create!(:name => 'a')])
|
7
|
+
end
|
8
|
+
|
9
|
+
test "it includes all the letters" do
|
10
|
+
('A'..'Z').each do |letter|
|
11
|
+
assert @result.include?(letter)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
test "it links to the available letters" do
|
16
|
+
assert @result.include?('<a href="?letter=A">')
|
17
|
+
end
|
18
|
+
|
19
|
+
test "it returns nothing when the collection is empty" do
|
20
|
+
assert_equal "", alphabetically_paginate([])
|
21
|
+
end
|
22
|
+
|
23
|
+
test "it does not link to letters that have no content" do
|
24
|
+
assert_equal false, @result.include?('href="?letter=B"')
|
25
|
+
end
|
26
|
+
|
27
|
+
test "it wraps the letters as list items" do
|
28
|
+
assert @result.include?('<li>B</li>')
|
29
|
+
end
|
30
|
+
|
31
|
+
test "it wraps the result in a ul" do
|
32
|
+
assert @result.include?('<ul class="pagination">')
|
33
|
+
end
|
34
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: paginate_alphabetically
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
- 1
|
9
8
|
- 2
|
10
|
-
|
9
|
+
- 0
|
10
|
+
version: 0.2.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Eden Development
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-09-
|
18
|
+
date: 2010-09-10 00:00:00 +01:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -69,9 +69,11 @@ files:
|
|
69
69
|
- init.rb
|
70
70
|
- install.rb
|
71
71
|
- lib/paginate_alphabetically.rb
|
72
|
+
- lib/view_helpers.rb
|
72
73
|
- test/db/schema.rb
|
73
74
|
- test/helper.rb
|
74
75
|
- test/test_paginate_alphabetically.rb
|
76
|
+
- test/test_view_helpers.rb
|
75
77
|
- uninstall.rb
|
76
78
|
has_rdoc: true
|
77
79
|
homepage: http://github.com/edendevelopment/paginate_alphabetically
|
@@ -111,3 +113,4 @@ test_files:
|
|
111
113
|
- test/db/schema.rb
|
112
114
|
- test/helper.rb
|
113
115
|
- test/test_paginate_alphabetically.rb
|
116
|
+
- test/test_view_helpers.rb
|