muster 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- data/Authors +2 -2
- data/Changes +5 -1
- data/lib/muster/strategies/active_record.rb +18 -1
- data/lib/muster/version.rb +1 -1
- data/spec/muster/strategies/active_record_spec.rb +25 -3
- metadata +2 -2
data/Authors
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
- Chris Laco <claco@chrislaco.com
|
2
|
-
- Nikica Jokić
|
1
|
+
- Chris Laco <claco@chrislaco.com>
|
2
|
+
- Nikica Jokić <neektza@gmail.com>
|
data/Changes
CHANGED
@@ -42,7 +42,8 @@ module Muster
|
|
42
42
|
:limit => pagination[:limit],
|
43
43
|
:offset => pagination[:offset],
|
44
44
|
:where => self.parse_where(query_string),
|
45
|
-
:joins => self.parse_joins(query_string)
|
45
|
+
:joins => self.parse_joins(query_string),
|
46
|
+
:includes => self.parse_includes(query_string)
|
46
47
|
)
|
47
48
|
|
48
49
|
parameters.regular_writer('pagination', pagination[:pagination].symbolize_keys)
|
@@ -131,6 +132,22 @@ module Muster
|
|
131
132
|
|
132
133
|
return results[:joins] || {}
|
133
134
|
end
|
135
|
+
|
136
|
+
# Returns includes clauses for AR queries
|
137
|
+
#
|
138
|
+
# @param query_string [String] the original query string to parse join statements from
|
139
|
+
#
|
140
|
+
# @return [Hash]
|
141
|
+
#
|
142
|
+
# @example
|
143
|
+
#
|
144
|
+
# value = self.parse_joins('includes=authors') #=> {'includes' => 'authors'}
|
145
|
+
def parse_includes( query_string )
|
146
|
+
strategy = Muster::Strategies::JoinsExpression.new(:field => :includes)
|
147
|
+
results = strategy.parse(query_string)
|
148
|
+
|
149
|
+
return results[:includes] || {}
|
150
|
+
end
|
134
151
|
|
135
152
|
end
|
136
153
|
end
|
data/lib/muster/version.rb
CHANGED
@@ -6,7 +6,7 @@ describe Muster::Strategies::ActiveRecord do
|
|
6
6
|
|
7
7
|
describe '#parse' do
|
8
8
|
it 'returns a Muster::Results instance' do
|
9
|
-
subject.parse('').should == {"select"=>[], "order"=>[], "limit"=>30, "offset"=>nil, "where"=>{}, "joins"=>{}, "pagination"=>{:page=>1, :per_page=>30}}
|
9
|
+
subject.parse('').should == {"select"=>[], "order"=>[], "limit"=>30, "offset"=>nil, "where"=>{}, "joins"=>{}, "includes"=>{}, "pagination"=>{:page=>1, :per_page=>30}}
|
10
10
|
subject.parse('').should be_an_instance_of(Muster::Results)
|
11
11
|
end
|
12
12
|
|
@@ -67,6 +67,24 @@ describe Muster::Strategies::ActiveRecord do
|
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
70
|
+
context 'includes' do
|
71
|
+
it 'returns single value in Array' do
|
72
|
+
subject.parse('includes=author')[:includes].should eq ['author']
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'returns multiple values in Array' do
|
76
|
+
subject.parse('includes=author,voter')[:includes].should eq ['author', 'voter']
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'returns a nested hash of separated values' do
|
80
|
+
subject.parse('includes=author.country.name')[:includes].should eq [{'author' => { 'country' => 'name'}}]
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'returns an array of nested hashes' do
|
84
|
+
subject.parse('includes=author.country.name,activity.rule')[:includes].should eq [{'author' => { 'country' => 'name'}}, {'activity' => 'rule'}]
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
70
88
|
context 'pagination' do
|
71
89
|
it 'returns default will paginate compatible pagination' do
|
72
90
|
subject.parse('')[:pagination].should == {:page => 1, :per_page => 30}
|
@@ -132,24 +150,28 @@ describe Muster::Strategies::ActiveRecord do
|
|
132
150
|
|
133
151
|
context 'the full monty' do
|
134
152
|
it 'returns a hash of all options' do
|
135
|
-
query_string = 'select=id,guid,name&where=name:foop&order=id:desc&order=name&page=3&page_size=5'
|
153
|
+
query_string = 'select=id,guid,name&where=name:foop&order=id:desc&order=name&page=3&page_size=5&includes=author.country,comments&joins=activity'
|
136
154
|
results = subject.parse(query_string)
|
137
155
|
|
138
156
|
results[:select].should == ['id', 'guid', 'name']
|
139
157
|
results[:where].should == {'name' => 'foop'}
|
140
158
|
results[:order].should == ['id desc', 'name asc']
|
159
|
+
results[:includes].should == [{'author' => 'country'}, 'comments']
|
160
|
+
results[:joins].should == ['activity']
|
141
161
|
results[:pagination].should == {:page => 3, :per_page => 5}
|
142
162
|
results[:offset].should == 10
|
143
163
|
results[:limit].should == 5
|
144
164
|
end
|
145
165
|
|
146
166
|
it 'supports indifferent access' do
|
147
|
-
query_string = 'select=id,guid,name&where=name:foop&order=id:desc&order=name&page=3&page_size=5'
|
167
|
+
query_string = 'select=id,guid,name&where=name:foop&order=id:desc&order=name&page=3&page_size=5&includes=author.country,comments&joins=activity'
|
148
168
|
results = subject.parse(query_string)
|
149
169
|
|
150
170
|
results['select'].should == ['id', 'guid', 'name']
|
151
171
|
results['where'].should == {'name' => 'foop'}
|
152
172
|
results['order'].should == ['id desc', 'name asc']
|
173
|
+
results['includes'].should == [{'author' => 'country'}, 'comments']
|
174
|
+
results['joins'].should == ['activity']
|
153
175
|
results['pagination'].should == {:page => 3, :per_page => 5}
|
154
176
|
results['offset'].should == 10
|
155
177
|
results['limit'].should == 5
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: muster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-03-
|
12
|
+
date: 2013-03-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|