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 +5 -5
- data/VERSION +1 -1
- data/lib/scoped_from/query.rb +25 -16
- data/spec/scoped_from/query_spec.rb +6 -4
- metadata +4 -4
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
scoped_from (0.
|
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.
|
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.
|
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.
|
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.
|
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.
|
1
|
+
0.4
|
data/lib/scoped_from/query.rb
CHANGED
@@ -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
|
-
|
80
|
-
@params[name] =
|
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 '
|
291
|
-
query(User, { 'order' => ['firstname.Asc', 'lastname.DESC'] }).params.should == { 'order' => 'lastname.desc' }
|
292
|
-
query(User, { 'order' => ['firstname.Asc', '
|
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:
|
4
|
+
hash: 3
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: "0.
|
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-
|
17
|
+
date: 2011-12-26 00:00:00 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
name: activerecord
|