sorted 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +22 -5
- data/VERSION +1 -1
- data/lib/sorted/action_view.rb +1 -1
- data/lib/sorted.rb +13 -11
- data/sorted.gemspec +2 -2
- data/spec/sorted_spec.rb +2 -2
- metadata +3 -3
data/README.rdoc
CHANGED
@@ -14,7 +14,7 @@ This will make a url like this:
|
|
14
14
|
|
15
15
|
http://myapp/users?sort=email_asc
|
16
16
|
|
17
|
-
|
17
|
+
or on the next page load when you then sort by something else....
|
18
18
|
|
19
19
|
http://myapp/users?sort=name_asc!email_asc
|
20
20
|
|
@@ -24,17 +24,34 @@ This will initially sort by email ascending:
|
|
24
24
|
|
25
25
|
@users = User.sorted(:order => "email ASC", :sort => params[:sort]).paginate(:page => params[:page])
|
26
26
|
|
27
|
+
== Advanced
|
28
|
+
|
29
|
+
You might want to roll your own link_to_sorted method to use jQuery ui css classes for example, all you need is the sorted object.
|
30
|
+
|
31
|
+
def link_to_sorted(name, order)
|
32
|
+
sorter = sorted(order)
|
33
|
+
css_class = case sorter.order_first
|
34
|
+
when "asc"
|
35
|
+
"css_right ui-icon ui-icon-triangle-1-n"
|
36
|
+
when "desc"
|
37
|
+
"css_right ui-icon ui-icon-triangle-1-s"
|
38
|
+
else
|
39
|
+
"css_right ui-icon ui-icon-carat-2-n-s"
|
40
|
+
end
|
41
|
+
link_to(name, sorter.params) + content_tag(:span, nil, {:class => css_class})
|
42
|
+
end
|
43
|
+
|
27
44
|
== Rails 2.3.x
|
28
45
|
|
29
|
-
This gem works with rails 2.3.x but you will have to roll your own scope and view helper
|
46
|
+
This gem works with rails 2.3.x but you will have to roll your own scope and view helper.
|
30
47
|
|
31
|
-
Here is the named scope:
|
48
|
+
Here is the named scope for you model(s):
|
32
49
|
|
33
50
|
named_scope :sorted, lambda { |params|
|
34
51
|
{ :order => Sorted::Sorter.new(params[:order], {:sort => params[:sort]}).to_sql }
|
35
52
|
}
|
36
53
|
|
37
|
-
|
54
|
+
and the the application helper methods:
|
38
55
|
|
39
56
|
def sorted(order)
|
40
57
|
Sorted::Sorter.new(order, (request.get? && !params.nil?) ? params.dup : nil).toggle
|
@@ -42,5 +59,5 @@ And this in your application helper:
|
|
42
59
|
|
43
60
|
def link_to_sorted(name, order)
|
44
61
|
sorter = sorted(order)
|
45
|
-
link_to(name, sorter.params, {:class => sorter.
|
62
|
+
link_to(name, sorter.params, {:class => "sorted-#{sorter.order_first}"})
|
46
63
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.2
|
data/lib/sorted/action_view.rb
CHANGED
@@ -9,7 +9,7 @@ module Sorted
|
|
9
9
|
|
10
10
|
def link_to_sorted(name, order, options = {})
|
11
11
|
sorter = sorted(order)
|
12
|
-
options[:class] = options[:class].nil? ? sorter.
|
12
|
+
options[:class] = options[:class].nil? ? "sorted-#{sorter.order_first}" : "#{options[:class]} sorted-#{sorter.order_first}"
|
13
13
|
link_to(name, sorter.params, options)
|
14
14
|
end
|
15
15
|
end
|
data/lib/sorted.rb
CHANGED
@@ -28,7 +28,7 @@ module Sorted
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def parse_query(sort)
|
31
|
-
if m = sort.match(/([a-zA-Z0-9._]+)_(asc|desc)
|
31
|
+
if m = sort.match(/([a-zA-Z0-9._]+)_(asc|desc)$/)
|
32
32
|
[m[1],m[2]]
|
33
33
|
end
|
34
34
|
end
|
@@ -49,17 +49,17 @@ module Sorted
|
|
49
49
|
order_queue.select do |o|
|
50
50
|
!@_array.flatten.include?(o[0])
|
51
51
|
end.each do |o|
|
52
|
-
@_array <<
|
52
|
+
@_array << o
|
53
53
|
end
|
54
54
|
sort_queue.select do |s|
|
55
55
|
!@_array.flatten.include?(s[0])
|
56
56
|
end.each do |s|
|
57
|
-
@_array <<
|
57
|
+
@_array << s
|
58
58
|
end
|
59
59
|
self
|
60
60
|
end
|
61
61
|
|
62
|
-
def
|
62
|
+
def reset
|
63
63
|
@_array = default
|
64
64
|
self
|
65
65
|
end
|
@@ -76,8 +76,12 @@ module Sorted
|
|
76
76
|
_array.map{|a| a.join('_')}.join('!')
|
77
77
|
end
|
78
78
|
|
79
|
-
def
|
80
|
-
|
79
|
+
def to_a
|
80
|
+
_array
|
81
|
+
end
|
82
|
+
|
83
|
+
def order_first
|
84
|
+
_array.empty? ? nil : _array[0][1]
|
81
85
|
end
|
82
86
|
|
83
87
|
def params
|
@@ -96,13 +100,11 @@ module Sorted
|
|
96
100
|
|
97
101
|
private
|
98
102
|
def default
|
99
|
-
|
103
|
+
sq = sort_queue.dup
|
100
104
|
order_queue.each do |o|
|
101
|
-
|
102
|
-
_default << [o[0], o[1]]
|
103
|
-
end
|
105
|
+
sq << o unless sq.flatten.include?(o[0])
|
104
106
|
end
|
105
|
-
|
107
|
+
sq
|
106
108
|
end
|
107
109
|
|
108
110
|
def _array
|
data/sorted.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{sorted}
|
8
|
-
s.version = "0.3.
|
8
|
+
s.version = "0.3.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Rufus Post"]
|
12
|
-
s.date = %q{2010-07-
|
12
|
+
s.date = %q{2010-07-26}
|
13
13
|
s.description = %q{lets you sort large data sets using view helpers and a scope}
|
14
14
|
s.email = %q{rufuspost@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
data/spec/sorted_spec.rb
CHANGED
@@ -120,9 +120,9 @@ describe Sorted::ActionView do
|
|
120
120
|
sorter.to_s.should == "email_asc"
|
121
121
|
end
|
122
122
|
|
123
|
-
it "should return
|
123
|
+
it "should return the order of the first attribute" do
|
124
124
|
sorter = ActionView::Base.new([], {}, @controller).sorted(:email)
|
125
|
-
sorter.
|
125
|
+
sorter.order_first.should == "asc"
|
126
126
|
end
|
127
127
|
|
128
128
|
it "should allow underscores and and full stops in" do
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 3
|
8
|
-
-
|
9
|
-
version: 0.3.
|
8
|
+
- 2
|
9
|
+
version: 0.3.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Rufus Post
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-07-
|
17
|
+
date: 2010-07-26 00:00:00 +10:00
|
18
18
|
default_executable:
|
19
19
|
dependencies: []
|
20
20
|
|