scoped_from 0.3 → 0.4

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- scoped_from (0.2)
4
+ scoped_from (0.4)
5
5
  activerecord (~> 3.1.0)
6
6
  activesupport (~> 3.1.0)
7
7
 
@@ -32,12 +32,12 @@ GEM
32
32
  multi_json (~> 1.0)
33
33
  arel (2.2.1)
34
34
  builder (3.0.0)
35
- columnize (0.3.5)
35
+ columnize (0.3.6)
36
36
  diff-lcs (1.1.3)
37
37
  erubis (2.7.0)
38
38
  hike (1.2.1)
39
39
  i18n (0.6.0)
40
- json (1.6.2)
40
+ json (1.6.4)
41
41
  linecache (0.46)
42
42
  rbx-require-relative (> 0.0.4)
43
43
  multi_json (1.0.4)
@@ -59,7 +59,7 @@ GEM
59
59
  thor (~> 0.14.6)
60
60
  rake (0.9.2.2)
61
61
  rbx-require-relative (0.0.5)
62
- rdoc (3.11)
62
+ rdoc (3.12)
63
63
  json (~> 1.4)
64
64
  rspec (2.7.0)
65
65
  rspec-core (~> 2.7.0)
@@ -83,7 +83,7 @@ GEM
83
83
  hike (~> 1.2)
84
84
  rack (~> 1.0)
85
85
  tilt (~> 1.1, != 1.3.0)
86
- sqlite3 (1.3.4)
86
+ sqlite3 (1.3.5)
87
87
  sqlite3-ruby (1.3.3)
88
88
  sqlite3 (>= 1.3.3)
89
89
  thor (0.14.6)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3
1
+ 0.4
@@ -54,20 +54,6 @@ module ScopedFrom
54
54
  "#{order[:column]} #{order[:direction].upcase}" if order.present?
55
55
  end
56
56
 
57
- def scoped(scope, name, value)
58
- if name.to_s == 'order'
59
- scope.order(order_to_sql(value))
60
- elsif scope.scope_with_one_argument?(name)
61
- scope.send(name, value)
62
- elsif scope.scope_without_argument?(name)
63
- scope.send(name)
64
- elsif scope.column_names.include?(name.to_s)
65
- scope.scoped(:conditions => { name => value })
66
- else
67
- scope
68
- end
69
- end
70
-
71
57
  def params=(params)
72
58
  params = params.params if params.is_a?(self.class)
73
59
  params = CGI.parse(params.to_s) unless params.is_a?(Hash)
@@ -76,8 +62,8 @@ module ScopedFrom
76
62
  values = [value].flatten
77
63
  next if values.empty?
78
64
  if name.to_s == 'order'
79
- order = parse_order(values.last)
80
- @params[name] = "#{order[:column]}.#{order[:direction]}" if order.present?
65
+ orders = parse_orders(values).map { |order| "#{order[:column]}.#{order[:direction]}" }
66
+ @params[name] = (orders.many? ? orders : orders.first) if orders.any?
81
67
  elsif @scope.scope_without_argument?(name)
82
68
  @params[name] = true if values.all? { |value| true?(value) }
83
69
  elsif @scope.scope_with_one_argument?(name)
@@ -104,6 +90,29 @@ module ScopedFrom
104
90
  @scope.column_names.include?(column) ? { :column => column, :direction => direction } : {}
105
91
  end
106
92
 
93
+ def parse_orders(values)
94
+ [].tap do |orders|
95
+ values.each do |value|
96
+ order = parse_order(value)
97
+ orders << order if order.present? && !orders.any? { |o| o[:column] == order[:column] }
98
+ end
99
+ end
100
+ end
101
+
102
+ def scoped(scope, name, value)
103
+ if name.to_s == 'order'
104
+ scope.order(order_to_sql(value))
105
+ elsif scope.scope_with_one_argument?(name)
106
+ scope.send(name, value)
107
+ elsif scope.scope_without_argument?(name)
108
+ scope.send(name)
109
+ elsif scope.column_names.include?(name.to_s)
110
+ scope.scoped(:conditions => { name => value })
111
+ else
112
+ scope
113
+ end
114
+ end
115
+
107
116
  def true?(value)
108
117
  TRUE_VALUES.include?(value.to_s.strip.downcase)
109
118
  end
@@ -287,9 +287,11 @@ describe ScopedFrom::Query do
287
287
  query(User, { 'Order' => 'firstname.desc' }).params.should == {}
288
288
  end
289
289
 
290
- it 'use last "order" if many are specified' do
291
- query(User, { 'order' => ['firstname.Asc', 'lastname.DESC'] }).params.should == { 'order' => 'lastname.desc' }
292
- query(User, { 'order' => ['firstname.Asc', 'lastname.DESC', 'firstname.desc'] }).params.should == { 'order' => 'firstname.desc' }
290
+ it 'many order can be specified' do
291
+ query(User, { 'order' => ['firstname.Asc', 'lastname.DESC'] }).params.should == { 'order' => ['firstname.asc', 'lastname.desc'] }
292
+ query(User, { 'order' => ['firstname.Asc', 'firstname.desc'] }).params.should == { 'order' => 'firstname.asc' }
293
+ query(User, { 'order' => ['firstname.Asc', 'lastname.DESC', 'firstname.desc'] }).params.should == { 'order' => ['firstname.asc', 'lastname.desc'] }
294
+ query(User, { 'order' => ['firstname.Asc', 'foo', 'lastname.DESC', 'firstname.desc'] }).params.should == { 'order' => ['firstname.asc', 'lastname.desc'] }
293
295
  end
294
296
 
295
297
  it 'order can be delimited by a space' do
@@ -357,7 +359,7 @@ describe ScopedFrom::Query do
357
359
  it 'invokes last order if an array is given' do
358
360
  query(User, :order => ['lastname', 'firstname']).scope.should == [users(:jane), users(:john)]
359
361
  query(User, :order => ['lastname', 'firstname.desc']).scope.should == [users(:john), users(:jane)]
360
- query(User, :order => ['firstname.desc', 'lastname']).scope.order_values.should == ['lastname ASC']
362
+ query(User, :order => ['firstname.desc', 'lastname']).scope.order_values.should == ['firstname DESC', 'lastname ASC']
361
363
  end
362
364
 
363
365
  it 'defines #query method on returned scoped' do
metadata CHANGED
@@ -1,12 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scoped_from
3
3
  version: !ruby/object:Gem::Version
4
- hash: 13
4
+ hash: 3
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 3
9
- version: "0.3"
8
+ - 4
9
+ version: "0.4"
10
10
  platform: ruby
11
11
  authors:
12
12
  - Alexis Toulotte
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-11-30 00:00:00 Z
17
+ date: 2011-12-26 00:00:00 Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: activerecord