sorted 0.3.3 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
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 you model(s):
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.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
- order_queue.select do |os|
45
- sort_queue.flatten.include?(os[0])
46
- end.each do |os|
47
- if sort_queue[0, order_queue.size].flatten.include?(os[0])
48
- @_array << [os[0], (case sort_queue.assoc(os[0])[1]; when "asc"; "desc"; when "desc"; "asc" end)]
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
- @_array << [os[0], sort_queue.assoc(os[0])[1]]
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 |o|
54
- !@_array.flatten.include?(o[0])
55
- end.each do |o|
56
- @_array << o
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 |s|
59
- !@_array.flatten.include?(s[0])
60
- end.each do |s|
61
- @_array << s
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.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-07-31}
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 and and full stops in" do
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", "asc"], ["name", "asc"], ["phone", "asc"]]
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
- - 3
9
- version: 0.3.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-07-31 00:00:00 +10:00
17
+ date: 2010-08-09 00:00:00 +10:00
18
18
  default_executable:
19
19
  dependencies: []
20
20