sorted 0.3.3 → 0.3.4
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 +1 -1
- data/VERSION +1 -1
- data/lib/sorted.rb +29 -16
- data/sorted.gemspec +2 -2
- data/spec/sorted_spec.rb +18 -4
- metadata +3 -3
data/README.rdoc
CHANGED
@@ -45,7 +45,7 @@ You might want to roll your own link_to_sorted method to use jQuery ui css class
|
|
45
45
|
|
46
46
|
This gem works with rails 2.3.x but you will have to roll your own scope and view helper.
|
47
47
|
|
48
|
-
Here is the named scope for
|
48
|
+
Here is the named scope for your model(s):
|
49
49
|
|
50
50
|
named_scope :sorted, lambda { |params|
|
51
51
|
params.merge(:order => Sorted::Sorter.new(params[:order], {:sort => params.delete(:sort)}).to_sql)
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.3.
|
1
|
+
0.3.4
|
data/lib/sorted.rb
CHANGED
@@ -34,31 +34,44 @@ module Sorted
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def parse_sql(sql)
|
37
|
-
if m = sql.match(/(([a-zA-Z._]+)\s([asc|ASC|desc|DESC]+)|[a-zA-Z._]+)/)
|
37
|
+
if m = sql.match(/(([a-zA-Z._:]+)\s([asc|ASC|desc|DESC]+)|[a-zA-Z._:]+)/)
|
38
38
|
[(m[2].nil? ? m[1] : m[2]),(m[3].nil? ? "asc" : m[3].downcase)]
|
39
39
|
end
|
40
40
|
end
|
41
|
-
|
41
|
+
|
42
42
|
def toggle
|
43
43
|
@_array = []
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
if
|
48
|
-
|
44
|
+
sorts = sort_queue.transpose.first
|
45
|
+
orders = order_queue.transpose.first
|
46
|
+
unless sorts.nil?
|
47
|
+
if orders == sorts.take(orders.size)
|
48
|
+
orders.select do |order|
|
49
|
+
sorts.include?(order)
|
50
|
+
end.each do |order|
|
51
|
+
@_array << [order, (case sort_queue.assoc(order).last; when "asc"; "desc"; when "desc"; "asc" end)]
|
52
|
+
end
|
49
53
|
else
|
50
|
-
|
54
|
+
orders.select do |order|
|
55
|
+
sorts.include?(order)
|
56
|
+
end.each do |order|
|
57
|
+
@_array << [order, sort_queue.assoc(order).last]
|
58
|
+
end
|
59
|
+
end
|
60
|
+
sorts.select do |sort|
|
61
|
+
orders.include?(sort) && !@_array.flatten.include?(sort)
|
62
|
+
end.each do |sort|
|
63
|
+
@_array << [sort, sort_queue.assoc(sort).last]
|
51
64
|
end
|
52
65
|
end
|
53
|
-
order_queue.select do |
|
54
|
-
!@_array.flatten.include?(
|
55
|
-
end.each do |
|
56
|
-
@_array <<
|
66
|
+
order_queue.select do |order|
|
67
|
+
!@_array.flatten.include?(order[0])
|
68
|
+
end.each do |order|
|
69
|
+
@_array << order
|
57
70
|
end
|
58
|
-
sort_queue.select do |
|
59
|
-
!@_array.flatten.include?(
|
60
|
-
end.each do |
|
61
|
-
@_array <<
|
71
|
+
sort_queue.select do |sort|
|
72
|
+
!@_array.flatten.include?(sort[0])
|
73
|
+
end.each do |sort|
|
74
|
+
@_array << sort
|
62
75
|
end
|
63
76
|
self
|
64
77
|
end
|
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.4"
|
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-
|
12
|
+
s.date = %q{2010-08-09}
|
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
@@ -13,9 +13,9 @@ describe Sorted::Sorter, "parse methods" do
|
|
13
13
|
sorter.sort_queue.should == [["email", "desc"], ["name", "desc"]]
|
14
14
|
end
|
15
15
|
|
16
|
-
it "should allow underscores
|
17
|
-
sorter = Sorted::Sorter.new('users.email ASC, users.phone_number DESC, assessments.name ASC', {:sort => "users.email_desc!users.first_name_desc"})
|
18
|
-
sorter.to_sql.should == "users.email DESC, users.first_name DESC, users.phone_number DESC, assessments.name ASC"
|
16
|
+
it "should allow underscores, full stops and colons in" do
|
17
|
+
sorter = Sorted::Sorter.new('users.email ASC, users.phone_number DESC, assessments.name ASC, assessments.number_as_string::BigInt', {:sort => "users.email_desc!users.first_name_desc"})
|
18
|
+
sorter.to_sql.should == "users.email DESC, users.first_name DESC, users.phone_number DESC, assessments.name ASC, assessments.number_as_string::BigInt ASC"
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
@@ -27,7 +27,12 @@ describe Sorted::Sorter, "logic:" do
|
|
27
27
|
|
28
28
|
it "should toggle the sort order and include any sql orders not in sort params" do
|
29
29
|
sorter = Sorted::Sorter.new("email DESC, phone ASC, name DESC", {:sort => "email_desc!name_desc"})
|
30
|
-
sorter.toggle.to_a.should == [["email", "
|
30
|
+
sorter.toggle.to_a.should == [["email", "desc"], ["name", "desc"], ["phone", "asc"]]
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should toggle the sort order and include any sql orders not in sort params" do
|
34
|
+
sorter = Sorted::Sorter.new("email DESC, phone ASC, name DESC", {:sort => "mobile_asc!email_desc!phone_asc!name_desc"})
|
35
|
+
sorter.toggle.to_a.should == [["email", "desc"], ["phone", "asc"], ["name", "desc"], ["mobile", "asc"]]
|
31
36
|
end
|
32
37
|
|
33
38
|
it "should return an sql sort string" do
|
@@ -62,6 +67,15 @@ describe Sorted::Sorter, "logic:" do
|
|
62
67
|
sorter.toggle
|
63
68
|
sorter.to_css.should == "sorted desc"
|
64
69
|
end
|
70
|
+
|
71
|
+
it "should toggle two order params at once" do
|
72
|
+
first = Sorted::Sorter.new("email ASC, phone ASC")
|
73
|
+
first.toggle.to_a.should == [["email", "asc"],["phone", "asc"]]
|
74
|
+
second = Sorted::Sorter.new(:name, {:sort => first.to_s})
|
75
|
+
second.toggle.to_a.should == [["name", "asc"], ["email", "asc"],["phone", "asc"]]
|
76
|
+
third = Sorted::Sorter.new("email ASC, phone ASC", {:sort => second.to_s})
|
77
|
+
third.toggle.to_a.should == [["email", "asc"],["phone", "asc"], ["name", "asc"]]
|
78
|
+
end
|
65
79
|
end
|
66
80
|
|
67
81
|
describe Sorted::ActiveRecord 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
|
+
- 4
|
9
|
+
version: 0.3.4
|
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-
|
17
|
+
date: 2010-08-09 00:00:00 +10:00
|
18
18
|
default_executable:
|
19
19
|
dependencies: []
|
20
20
|
|