scoped_from 0.3 → 0.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/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