legato 0.6.0 → 0.6.1
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/lib/legato/query.rb +12 -2
- data/lib/legato/version.rb +1 -1
- data/spec/lib/legato/query_spec.rb +170 -165
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b9077eb3bf7200ccae8aaa176ae3199c983501ca
|
4
|
+
data.tar.gz: efd2b61790708f18b5be1bf612ae3267b99de0bd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d90896b83ec99911d48a493cd990c731f5a6e05a11551162510ac2956339c343a0262730e065dddcc0690fbcefcdd024a8228c45e4c146c6055d85ba481ce0c0
|
7
|
+
data.tar.gz: 88fd641061a3b056833dba164ee8c7b22a9318c9b6fd922b687626f82f6f26da61c8cf85237ebb4f941200edba58b1f1eda96221f3028c4934744719dc978c7a
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
## Legato 0.6.1 ##
|
2
|
+
|
3
|
+
* Fix bug in `Query` where calling `results` did not retain previous basic options
|
4
|
+
|
5
|
+
*Tony Pitale*
|
6
|
+
|
1
7
|
## Legato 0.6.0 ##
|
2
8
|
|
3
9
|
* Fix bug in `Query` where calling `results` after loading a collection would not load new data into the collection
|
data/lib/legato/query.rb
CHANGED
@@ -5,6 +5,11 @@ module Legato
|
|
5
5
|
MONTH = 2592000
|
6
6
|
REQUEST_FIELDS = 'columnHeaders/name,rows,totalResults,totalsForAllResults'
|
7
7
|
|
8
|
+
BASIC_OPTION_KEYS = [
|
9
|
+
:sort, :limit, :offset, :start_date, :end_date, :quota_user,
|
10
|
+
:user_ip, :sampling_level, :segment_id
|
11
|
+
]
|
12
|
+
|
8
13
|
VALID_TRACKING_SCOPES = {
|
9
14
|
'ga' => 'ga',
|
10
15
|
'mcf' => 'mcf',
|
@@ -101,11 +106,16 @@ module Legato
|
|
101
106
|
end
|
102
107
|
|
103
108
|
def apply_basic_options(options)
|
104
|
-
|
109
|
+
BASIC_OPTION_KEYS.each do |key| #:segment
|
105
110
|
self.send("#{key}=".to_sym, options[key]) if options.has_key?(key)
|
106
111
|
end
|
107
112
|
end
|
108
113
|
|
114
|
+
# return a hash of basic options to merge
|
115
|
+
def basic_options
|
116
|
+
Hash[BASIC_OPTION_KEYS.map { |k| [k, send(k)] }].reject {|_,v| v.nil?}
|
117
|
+
end
|
118
|
+
|
109
119
|
# def apply_filter_options(filter_options)
|
110
120
|
# join_character = Legato.and_join_character
|
111
121
|
#
|
@@ -173,7 +183,7 @@ module Legato
|
|
173
183
|
options, profile = profile, self.profile if profile.is_a?(Hash)
|
174
184
|
|
175
185
|
query.profile = profile
|
176
|
-
query.apply_options(options)
|
186
|
+
query.apply_options(self.basic_options.merge(options))
|
177
187
|
query
|
178
188
|
end
|
179
189
|
|
data/lib/legato/version.rb
CHANGED
@@ -16,149 +16,154 @@ describe Legato::Query do
|
|
16
16
|
end
|
17
17
|
|
18
18
|
context "a query" do
|
19
|
+
let(:klass) { Class.new.tap { |k| k.extend(Legato::Model)} }
|
20
|
+
let(:query) { Legato::Query.new(klass) }
|
21
|
+
|
22
|
+
let(:default_options) { {:start_date => query.start_date, :end_date => query.end_date} }
|
23
|
+
|
19
24
|
before :each do
|
20
|
-
@klass =
|
21
|
-
@klass.extend(Legato::Model)
|
22
|
-
@block = lambda {eql(:key, 1000)}
|
25
|
+
@klass = klass
|
23
26
|
@klass.stubs(:filters).returns({:high => @block})
|
24
27
|
@klass.stubs(:segments).returns([])
|
25
28
|
|
26
|
-
@
|
29
|
+
@block = lambda {eql(:key, 1000)}
|
30
|
+
|
31
|
+
@query = query
|
27
32
|
end
|
28
33
|
|
29
34
|
it 'knows the parent class' do
|
30
|
-
|
35
|
+
query.parent_klass.should == @klass
|
31
36
|
end
|
32
37
|
|
33
38
|
it 'defaults to an empty filter set' do
|
34
|
-
|
39
|
+
query.filters.to_params.should == Legato::FilterSet.new.to_params
|
35
40
|
end
|
36
41
|
|
37
42
|
it 'has filters defined from the parent class' do
|
38
|
-
|
43
|
+
query.respond_to?(:high).should eq(true)
|
39
44
|
end
|
40
45
|
|
41
46
|
it "has filter methods that call apply with the given block" do
|
42
|
-
|
43
|
-
|
44
|
-
|
47
|
+
query.stubs(:apply_filter)
|
48
|
+
query.high('hi')
|
49
|
+
query.should have_received(:apply_filter).with('hi')
|
45
50
|
end
|
46
51
|
|
47
52
|
it 'does not load results by default' do
|
48
|
-
|
53
|
+
query.loaded?.should == false
|
49
54
|
end
|
50
55
|
|
51
56
|
it 'delegates the instance klass from the parent klass' do
|
52
57
|
klass = Class.new
|
53
|
-
|
54
|
-
|
58
|
+
query.parent_klass.stubs(:instance_klass).returns(klass)
|
59
|
+
query.instance_klass.should == klass
|
55
60
|
end
|
56
61
|
|
57
62
|
it "loads a collection of results" do
|
58
63
|
response = stub(:collection => [], :total_results => 0, :totals_for_all_results => {})
|
59
64
|
user = stub(:request => response)
|
60
|
-
|
65
|
+
query.stubs(:profile => stub(:user => user))
|
61
66
|
|
62
|
-
|
67
|
+
query.load
|
63
68
|
|
64
|
-
|
65
|
-
|
69
|
+
query.loaded?.should eq(true)
|
70
|
+
query.profile.user.should have_received(:request).with(query)
|
66
71
|
response.should have_received(:collection)
|
67
72
|
response.should have_received(:total_results)
|
68
73
|
response.should have_received(:totals_for_all_results)
|
69
74
|
end
|
70
75
|
|
71
76
|
it "returns the collection" do
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
77
|
+
query.stubs(:request_for_query).returns(stub(:collection => [1,2,3], :total_results => 3, :totals_for_all_results => {'foo' => 34.2}))
|
78
|
+
query.load
|
79
|
+
query.collection.should == [1,2,3]
|
80
|
+
query.to_a.should == [1,2,3]
|
76
81
|
end
|
77
82
|
|
78
83
|
it "returns the total number of results" do
|
79
|
-
|
80
|
-
|
81
|
-
|
84
|
+
query.stubs(:request_for_query).returns(stub(:collection => [1,2,3], :total_results => 3, :totals_for_all_results => {'foo' => 34.2}))
|
85
|
+
query.load
|
86
|
+
query.total_results.should == 3
|
82
87
|
end
|
83
88
|
|
84
89
|
it "returns the totals for all results" do
|
85
|
-
|
86
|
-
|
87
|
-
|
90
|
+
query.stubs(:request_for_query).returns(stub(:collection => [1,2,3], :total_results => 3, :totals_for_all_results => {'foo' => 34.2}))
|
91
|
+
query.load
|
92
|
+
query.totals_for_all_results.should == {'foo' => 34.2}
|
88
93
|
end
|
89
94
|
|
90
95
|
it "behaves like an enumerable delegating to the collection" do
|
91
96
|
collection = []
|
92
97
|
collection.stubs(:each)
|
93
|
-
|
94
|
-
|
98
|
+
query.stubs(:collection).returns(collection)
|
99
|
+
query.stubs(:loaded?).returns(true)
|
95
100
|
|
96
|
-
|
101
|
+
query.each {}
|
97
102
|
|
98
103
|
collection.should have_received(:each)
|
99
104
|
end
|
100
105
|
|
101
106
|
it 'has a profile id after being given a profile' do
|
102
107
|
profile = stub(:id => '1234567890')
|
103
|
-
|
108
|
+
query.stubs(:profile).returns(profile)
|
104
109
|
|
105
|
-
|
110
|
+
query.profile_id.should == 'ga:1234567890'
|
106
111
|
|
107
112
|
profile.should have_received(:id)
|
108
113
|
end
|
109
114
|
|
110
115
|
it 'has no profile id by default' do
|
111
|
-
|
112
|
-
|
116
|
+
query.stubs(:profile).returns(nil)
|
117
|
+
query.profile_id.should be_nil
|
113
118
|
end
|
114
119
|
|
115
120
|
it 'sets the profile and applies options, returns itself' do
|
116
|
-
|
117
|
-
|
121
|
+
query.stubs(:profile=)
|
122
|
+
query.stubs(:apply_options)
|
118
123
|
|
119
|
-
|
124
|
+
query.results('profile').should == query
|
120
125
|
|
121
|
-
|
122
|
-
|
126
|
+
query.should have_received(:profile=).with('profile')
|
127
|
+
query.should have_received(:apply_options).with(default_options)
|
123
128
|
end
|
124
129
|
|
125
130
|
it 'sets options and returns self' do
|
126
|
-
profile =
|
127
|
-
|
128
|
-
|
131
|
+
profile = query.profile
|
132
|
+
query.stubs(:profile=)
|
133
|
+
query.stubs(:apply_options)
|
129
134
|
|
130
|
-
|
135
|
+
query.results({:sort => [:city]}).should == query
|
131
136
|
|
132
|
-
|
133
|
-
|
137
|
+
query.should have_received(:profile=).with(profile)
|
138
|
+
query.should have_received(:apply_options).with(default_options.merge({:sort => [:city]}))
|
134
139
|
end
|
135
140
|
|
136
141
|
it 'creates a new query if collection has already been loaded' do
|
137
|
-
|
142
|
+
query.stubs(:loaded?).returns(true)
|
138
143
|
|
139
|
-
new_query =
|
144
|
+
new_query = query.results({offset: 10_000})
|
140
145
|
|
141
|
-
expect(new_query).to_not eql(
|
146
|
+
expect(new_query).to_not eql(query)
|
142
147
|
expect(new_query.offset).to eql(10_000)
|
143
148
|
end
|
144
149
|
|
145
150
|
context "when modifying dimensions" do
|
146
151
|
it 'changes the query dimensions' do
|
147
|
-
|
148
|
-
|
152
|
+
query.dimensions << :city
|
153
|
+
query.dimensions.include?(:city).should eq(true)
|
149
154
|
end
|
150
155
|
|
151
156
|
it 'does not change the parent class dimensions' do
|
152
157
|
empty_dimensions = Legato::ListParameter.new(:dimensions, [])
|
153
158
|
|
154
|
-
|
159
|
+
query.dimensions << :city
|
155
160
|
@klass.dimensions.should eq(empty_dimensions)
|
156
161
|
end
|
157
162
|
|
158
163
|
it 'accepts an array of dimensions' do
|
159
|
-
|
160
|
-
|
161
|
-
|
164
|
+
query.dimensions << [:city, :browser]
|
165
|
+
query.dimensions.include?(:city).should eq(true)
|
166
|
+
query.dimensions.include?(:browser).should eq(true)
|
162
167
|
end
|
163
168
|
|
164
169
|
it 'does not share metrics across queries' do
|
@@ -172,21 +177,21 @@ describe Legato::Query do
|
|
172
177
|
|
173
178
|
context "when modifying metrics" do
|
174
179
|
it 'changes the query metrics' do
|
175
|
-
|
176
|
-
|
180
|
+
query.metrics << :pageviews
|
181
|
+
query.metrics.include?(:pageviews).should eq(true)
|
177
182
|
end
|
178
183
|
|
179
184
|
it 'does not change the parent class metrics' do
|
180
185
|
empty_metrics = Legato::ListParameter.new(:metrics, [])
|
181
186
|
|
182
|
-
|
187
|
+
query.metrics << :pageviews
|
183
188
|
@klass.metrics.should eq(empty_metrics)
|
184
189
|
end
|
185
190
|
|
186
191
|
it 'accepts an array of metrics' do
|
187
|
-
|
188
|
-
|
189
|
-
|
192
|
+
query.metrics << [:pageviews, :sessions]
|
193
|
+
query.metrics.include?(:pageviews).should eq(true)
|
194
|
+
query.metrics.include?(:sessions).should eq(true)
|
190
195
|
end
|
191
196
|
|
192
197
|
it 'does not share metrics across queries' do
|
@@ -201,45 +206,45 @@ describe Legato::Query do
|
|
201
206
|
context 'when applying filters' do
|
202
207
|
before :each do
|
203
208
|
@filter = Legato::Filter.new(:key, :eql, 1000, nil)
|
204
|
-
|
209
|
+
query.stubs(:eql).returns(@filter)
|
205
210
|
|
206
211
|
@filters = stub(:<<)
|
207
|
-
|
212
|
+
query.stubs(:filters).returns(@filters)
|
208
213
|
end
|
209
214
|
|
210
215
|
it 'returns the query' do
|
211
|
-
|
216
|
+
query.apply_filter(&@block).should == query
|
212
217
|
end
|
213
218
|
|
214
219
|
it 'executes the block' do
|
215
|
-
|
216
|
-
|
220
|
+
query.apply_filter(&@block)
|
221
|
+
query.should have_received(:eql).with(:key, 1000)
|
217
222
|
end
|
218
223
|
|
219
224
|
it 'accepts a profile as the first argument' do
|
220
225
|
profile = Legato::Management::Profile.new({}, stub)
|
221
|
-
|
222
|
-
|
223
|
-
|
226
|
+
query.apply_filter(profile, &@block)
|
227
|
+
query.should have_received(:eql)
|
228
|
+
query.profile.should == profile
|
224
229
|
end
|
225
230
|
|
226
231
|
it 'accepts a profile as the last argument' do
|
227
232
|
profile = Legato::Management::Profile.new({}, stub)
|
228
233
|
block_with_arg = lambda {|count| eql(:key, count)}
|
229
|
-
|
230
|
-
|
231
|
-
|
234
|
+
query.apply_filter(100, profile, &block_with_arg)
|
235
|
+
query.should have_received(:eql).with(:key, 100)
|
236
|
+
query.profile.should == profile
|
232
237
|
end
|
233
238
|
|
234
239
|
it 'does not override the existing profile if none is provide' do
|
235
|
-
|
240
|
+
query.profile = Legato::Management::Profile.new({}, stub)
|
236
241
|
block_with_arg = lambda {|count| eql(:key, count)}
|
237
|
-
|
238
|
-
|
242
|
+
query.apply_filter(100, &block_with_arg)
|
243
|
+
query.profile.should_not == nil
|
239
244
|
end
|
240
245
|
|
241
246
|
it 'adds to the filter set' do
|
242
|
-
|
247
|
+
query.apply_filter(&@block)
|
243
248
|
|
244
249
|
@filters.should have_received(:<<).with(@filter)
|
245
250
|
end
|
@@ -248,7 +253,7 @@ describe Legato::Query do
|
|
248
253
|
block = lambda {|*browsers| browsers.map {|browser| eql(:browser, browser)}}
|
249
254
|
@filter.stubs(:join_character=)
|
250
255
|
|
251
|
-
|
256
|
+
query.apply_filter('chrome', 'safari', &block)
|
252
257
|
|
253
258
|
@filter.should have_received(:join_character=).with(Legato.and_join_character)
|
254
259
|
@filter.should have_received(:join_character=).with(Legato.or_join_character)
|
@@ -257,86 +262,86 @@ describe Legato::Query do
|
|
257
262
|
|
258
263
|
context "when applying options" do
|
259
264
|
it "returns the query" do
|
260
|
-
|
265
|
+
query.apply_options({}).should == query
|
261
266
|
end
|
262
267
|
|
263
268
|
it "stores the sort" do
|
264
|
-
|
265
|
-
|
269
|
+
query.apply_options({:sort => [:page_path]})
|
270
|
+
query.sort.should == Legato::ListParameter.new(:sort, [:page_path])
|
266
271
|
end
|
267
272
|
|
268
273
|
it 'replaces the sort' do
|
269
|
-
|
270
|
-
|
271
|
-
|
274
|
+
query.sort = [:pageviews]
|
275
|
+
query.apply_options({:sort => [:page_path]})
|
276
|
+
query.sort.should == Legato::ListParameter.new(:sort, [:page_path])
|
272
277
|
end
|
273
278
|
|
274
279
|
it "does not replace sort if option is omitted" do
|
275
|
-
|
276
|
-
|
277
|
-
|
280
|
+
query.sort = [:pageviews]
|
281
|
+
query.apply_options({})
|
282
|
+
query.sort.should == Legato::ListParameter.new(:sort, [:pageviews])
|
278
283
|
end
|
279
284
|
|
280
285
|
it "moves :sort option into sort" do
|
281
|
-
|
282
|
-
|
286
|
+
query.apply_options({:sort => [:page_path]})
|
287
|
+
query.sort.should == Legato::ListParameter.new(:sort, [:page_path])
|
283
288
|
end
|
284
289
|
|
285
290
|
it "sets the limit" do
|
286
|
-
|
287
|
-
|
291
|
+
query.apply_options({:limit => 100})
|
292
|
+
query.limit.should == 100
|
288
293
|
end
|
289
294
|
|
290
295
|
it "replaces the limit" do
|
291
|
-
|
292
|
-
|
293
|
-
|
296
|
+
query.limit = 200
|
297
|
+
query.apply_options({:limit => 100})
|
298
|
+
query.limit.should == 100
|
294
299
|
end
|
295
300
|
|
296
301
|
it "does not replace the limit if option is omitted" do
|
297
|
-
|
298
|
-
|
299
|
-
|
302
|
+
query.limit = 200
|
303
|
+
query.apply_options({})
|
304
|
+
query.limit.should == 200
|
300
305
|
end
|
301
306
|
|
302
307
|
it "sets the offset" do
|
303
|
-
|
304
|
-
|
308
|
+
query.apply_options({:offset => 100})
|
309
|
+
query.offset.should == 100
|
305
310
|
end
|
306
311
|
|
307
312
|
it "replaces the offset" do
|
308
|
-
|
309
|
-
|
310
|
-
|
313
|
+
query.offset = 200
|
314
|
+
query.apply_options({:offset => 100})
|
315
|
+
query.offset.should == 100
|
311
316
|
end
|
312
317
|
|
313
318
|
it "does not replace offset if option is omitted" do
|
314
|
-
|
315
|
-
|
316
|
-
|
319
|
+
query.offset = 200
|
320
|
+
query.apply_options({})
|
321
|
+
query.offset.should == 200
|
317
322
|
end
|
318
323
|
|
319
324
|
it "sets the quota_user" do
|
320
|
-
|
321
|
-
|
325
|
+
query.apply_options({:quota_user => 'an id'})
|
326
|
+
query.quota_user.should == 'an id'
|
322
327
|
end
|
323
328
|
|
324
329
|
it "replaces the quota_user" do
|
325
|
-
|
326
|
-
|
327
|
-
|
330
|
+
query.quota_user = 'an id'
|
331
|
+
query.apply_options({:quota_user => 'a different id'})
|
332
|
+
query.quota_user.should == 'a different id'
|
328
333
|
end
|
329
334
|
|
330
335
|
it "does not replace quota_user if option is omitted" do
|
331
|
-
|
332
|
-
|
333
|
-
|
336
|
+
query.quota_user = 'an id'
|
337
|
+
query.apply_options({})
|
338
|
+
query.quota_user.should == 'an id'
|
334
339
|
end
|
335
340
|
|
336
341
|
it "sets the segment_id" do
|
337
342
|
segment_id = '123122534'
|
338
|
-
|
339
|
-
|
343
|
+
query.apply_options({:segment_id => segment_id})
|
344
|
+
query.segment_id.should == "gaid::#{segment_id}"
|
340
345
|
end
|
341
346
|
|
342
347
|
context "with Time" do
|
@@ -349,46 +354,46 @@ describe Legato::Query do
|
|
349
354
|
end
|
350
355
|
|
351
356
|
it "replaces the start date" do
|
352
|
-
|
353
|
-
|
357
|
+
query.apply_options({:start_date => (@now-2000)})
|
358
|
+
query.start_date.should == (@now-2000)
|
354
359
|
end
|
355
360
|
|
356
361
|
it "does not replace the start date if option is omitted" do
|
357
|
-
|
358
|
-
Legato.format_time(
|
362
|
+
query.apply_options({})
|
363
|
+
Legato.format_time(query.start_date).should == Legato.format_time(@now-Legato::Query::MONTH)
|
359
364
|
end
|
360
365
|
|
361
366
|
it "replaces the end date" do
|
362
|
-
|
363
|
-
|
367
|
+
query.apply_options({:end_date => (@now+2000)})
|
368
|
+
query.end_date.should == (@now+2000)
|
364
369
|
end
|
365
370
|
|
366
371
|
it "does not replace the end date if option is omitted" do
|
367
|
-
|
368
|
-
Legato.format_time(
|
372
|
+
query.apply_options({})
|
373
|
+
Legato.format_time(query.end_date).should == Legato.format_time(@now)
|
369
374
|
end
|
370
375
|
end
|
371
376
|
end
|
372
377
|
|
373
378
|
context "with the scope set" do
|
374
379
|
it 'raises when an invalid scope is passed in' do
|
375
|
-
|
376
|
-
expect {
|
380
|
+
query.tracking_scope = "what"
|
381
|
+
expect { query.base_url }.to raise_error
|
377
382
|
end
|
378
383
|
|
379
384
|
it 'sets the correct endpoint url' do
|
380
|
-
|
381
|
-
expect(
|
385
|
+
query.tracking_scope = "mcf"
|
386
|
+
expect(query.base_url).to eql("https://www.googleapis.com/analytics/v3/data/mcf")
|
382
387
|
end
|
383
388
|
|
384
389
|
it 'has the correct api endpoint' do
|
385
|
-
|
386
|
-
expect(
|
390
|
+
query.tracking_scope = "ga"
|
391
|
+
expect(query.base_url).to eql("https://www.googleapis.com/analytics/v3/data/ga")
|
387
392
|
end
|
388
393
|
|
389
394
|
it 'has the realtime api endpoint' do
|
390
|
-
|
391
|
-
expect(
|
395
|
+
query.tracking_scope = "rt"
|
396
|
+
expect(query.base_url).to eql("https://www.googleapis.com/analytics/v3/data/realtime")
|
392
397
|
end
|
393
398
|
end
|
394
399
|
|
@@ -397,15 +402,15 @@ describe Legato::Query do
|
|
397
402
|
|
398
403
|
context "as a hash of parameters" do
|
399
404
|
before :each do
|
400
|
-
|
401
|
-
|
402
|
-
|
405
|
+
query.stubs(:metrics).returns(nil)
|
406
|
+
query.stubs(:dimensions).returns(nil)
|
407
|
+
query.stubs(:filters).returns(stub(:to_params => nil))
|
403
408
|
end
|
404
409
|
|
405
410
|
it 'includes the profile id' do
|
406
|
-
|
411
|
+
query.stubs(:profile_id).returns('ga:1234567890')
|
407
412
|
|
408
|
-
|
413
|
+
query.to_params.should == {
|
409
414
|
'ids' => 'ga:1234567890',
|
410
415
|
'start-date' => Legato.format_time(Time.now-Legato::Query::MONTH),
|
411
416
|
'fields' => Legato::Query::REQUEST_FIELDS,
|
@@ -415,9 +420,9 @@ describe Legato::Query do
|
|
415
420
|
|
416
421
|
it 'includes the start and end dates' do
|
417
422
|
now = Time.now
|
418
|
-
|
419
|
-
|
420
|
-
|
423
|
+
query.start_date = now
|
424
|
+
query.end_date = now
|
425
|
+
query.to_params.should == {
|
421
426
|
'start-date' => Legato.format_time(now),
|
422
427
|
'fields' => Legato::Query::REQUEST_FIELDS,
|
423
428
|
'end-date' => Legato.format_time(now)
|
@@ -425,10 +430,10 @@ describe Legato::Query do
|
|
425
430
|
end
|
426
431
|
|
427
432
|
it "supports string formatted dates" do
|
428
|
-
|
429
|
-
|
433
|
+
query.start_date = "2014-01-01"
|
434
|
+
query.end_date = "yesterday"
|
430
435
|
|
431
|
-
|
436
|
+
query.to_params.should == {
|
432
437
|
'start-date' => "2014-01-01",
|
433
438
|
'end-date' => "yesterday",
|
434
439
|
'fields' => Legato::Query::REQUEST_FIELDS,
|
@@ -436,86 +441,86 @@ describe Legato::Query do
|
|
436
441
|
end
|
437
442
|
|
438
443
|
it 'includes the limit' do
|
439
|
-
|
440
|
-
|
444
|
+
query.limit = 1000
|
445
|
+
query.to_params['max-results'].should == 1000
|
441
446
|
end
|
442
447
|
|
443
448
|
it 'includes the offset' do
|
444
|
-
|
445
|
-
|
449
|
+
query.offset = 50
|
450
|
+
query.to_params['start-index'].should == 50
|
446
451
|
end
|
447
452
|
|
448
453
|
it 'includes the quotaUser if quota_user is set' do
|
449
|
-
|
450
|
-
|
454
|
+
query.quota_user = 'an id'
|
455
|
+
query.to_params['quotaUser'].should == 'an id'
|
451
456
|
end
|
452
457
|
|
453
458
|
it 'excludes the quotaUser if quota_user is not set' do
|
454
|
-
|
459
|
+
query.to_params.keys.should_not include('quotaUser')
|
455
460
|
end
|
456
461
|
|
457
462
|
it 'includes the samplingLevel if sampling_level is set' do
|
458
|
-
|
459
|
-
|
463
|
+
query.sampling_level = 'FASTER'
|
464
|
+
query.to_params['samplingLevel'].should == 'FASTER'
|
460
465
|
end
|
461
466
|
|
462
467
|
it 'excludes the samplingLevel if sampling_level is not set' do
|
463
|
-
|
468
|
+
query.to_params.keys.should_not include('samplingLevel')
|
464
469
|
end
|
465
470
|
|
466
471
|
it 'includes filters' do
|
467
472
|
filters = stub(:to_params => 'filter set parameters')
|
468
|
-
|
473
|
+
query.stubs(:filters).returns(filters)
|
469
474
|
|
470
|
-
|
475
|
+
query.to_params['filters'].should == 'filter set parameters'
|
471
476
|
end
|
472
477
|
|
473
478
|
it 'includes the session level conditional segment' do
|
474
479
|
segment_filters = stub(:to_params => 'ga::parameter', :any? => true)
|
475
|
-
|
480
|
+
query.stubs(:segment_filters).returns(segment_filters)
|
476
481
|
|
477
|
-
|
482
|
+
query.to_params['segment'].should == 'sessions::condition::ga::parameter'
|
478
483
|
end
|
479
484
|
|
480
485
|
it 'includes segment_id' do
|
481
|
-
|
486
|
+
query.stubs(:segment_id).returns('gaid::12453453')
|
482
487
|
|
483
|
-
|
488
|
+
query.to_params['segment'].should == 'gaid::12453453'
|
484
489
|
end
|
485
490
|
|
486
491
|
it 'includes segment_id and segment_filters' do
|
487
492
|
segment_filters = stub(:to_params => 'ga::parameter', :any? => true)
|
488
|
-
|
489
|
-
|
493
|
+
query.stubs(:segment_filters).returns(segment_filters)
|
494
|
+
query.stubs(:segment_id).returns('gaid::12453453')
|
490
495
|
|
491
|
-
|
496
|
+
query.to_params['segment'].should == 'gaid::12453453'
|
492
497
|
end
|
493
498
|
|
494
499
|
it 'includes metrics' do
|
495
500
|
metrics = Legato::ListParameter.new(:metrics)
|
496
501
|
metrics.stubs(:to_params).returns({'metrics' => 'pageviews,exits'})
|
497
502
|
metrics.stubs(:empty?).returns(false)
|
498
|
-
|
503
|
+
query.stubs(:metrics).returns(metrics)
|
499
504
|
|
500
|
-
|
505
|
+
query.to_params['metrics'].should == 'pageviews,exits'
|
501
506
|
end
|
502
507
|
|
503
508
|
it 'includes dimensions' do
|
504
509
|
dimensions = Legato::ListParameter.new(:dimensions)
|
505
510
|
dimensions.stubs(:to_params).returns({'dimensions' => 'browser,country'})
|
506
511
|
dimensions.stubs(:empty?).returns(false)
|
507
|
-
|
512
|
+
query.stubs(:dimensions).returns(dimensions)
|
508
513
|
|
509
|
-
|
514
|
+
query.to_params['dimensions'].should == 'browser,country'
|
510
515
|
end
|
511
516
|
|
512
517
|
it 'includes sort' do
|
513
518
|
sort = Legato::ListParameter.new(:sort)
|
514
519
|
sort.stubs(:to_params).returns({'sort' => 'pageviews'})
|
515
520
|
sort.stubs(:empty?).returns(false)
|
516
|
-
|
521
|
+
query.stubs(:sort).returns(sort)
|
517
522
|
|
518
|
-
|
523
|
+
query.to_params['sort'].should == 'pageviews'
|
519
524
|
end
|
520
525
|
end
|
521
526
|
end
|