google_api 1.0.0.beta → 1.0.0
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/.travis.yml +3 -0
- data/README.md +126 -90
- data/Rakefile +2 -2
- data/lib/google_api.rb +5 -4
- data/lib/google_api/date.rb +0 -1
- data/lib/google_api/ga/session.rb +10 -22
- data/lib/google_api/version.rb +1 -1
- data/spec/lib/google_api_cache_spec.rb +83 -0
- data/spec/lib/google_api_ga_data_spec.rb +164 -0
- data/spec/lib/google_api_ga_spec.rb +11 -0
- data/spec/lib/google_api_spec.rb +19 -21
- metadata +12 -5
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
Google Analytics
|
1
|
+
Google Analytics [](http://travis-ci.org/ondra-m/google_api)
|
2
2
|
================
|
3
3
|
|
4
|
+
<a href="#examples">examples</a>
|
5
|
+
|
4
6
|
News
|
5
7
|
----
|
6
8
|
|
@@ -50,36 +52,36 @@ GoogleApi.config.ga.client_id = "5"
|
|
50
52
|
|
51
53
|
<tbody>
|
52
54
|
<tr>
|
53
|
-
<td
|
55
|
+
<td>client_id</td>
|
54
56
|
<td><i>123456.apps.googleusercontent.com</i></td>
|
55
57
|
<td rowspan="3">required for oauth 2</td>
|
56
58
|
</tr>
|
57
59
|
<tr>
|
58
|
-
<td
|
60
|
+
<td>client_secret</td>
|
59
61
|
<td><i>123456123456123456</i></td>
|
60
62
|
</tr>
|
61
63
|
<tr>
|
62
|
-
<td
|
64
|
+
<td>redirect_uri</td>
|
63
65
|
<td><i>http://localhost/oauth2callback</i></td>
|
64
66
|
</tr>
|
65
67
|
<tr>
|
66
|
-
<td
|
68
|
+
<td>client_developer_email</td>
|
67
69
|
<td><i>123456@developer.gserviceaccount.com</i></td>
|
68
70
|
<td rowspan="3">required for login by cert</td>
|
69
71
|
</tr>
|
70
72
|
<tr>
|
71
|
-
<td
|
73
|
+
<td>client_cert_file</td>
|
72
74
|
<td><i>/home/user/app/123456-privatekey.p12</i></td>
|
73
75
|
</tr>
|
74
76
|
<tr>
|
75
|
-
<td
|
77
|
+
<td>key_secret</td>
|
76
78
|
<td><i>notasecret</i></td>
|
77
79
|
</tr>
|
78
80
|
<tr>
|
79
81
|
<td colspan="3">only for ga</td>
|
80
82
|
</tr>
|
81
83
|
<tr>
|
82
|
-
<td
|
84
|
+
<td>cache</td>
|
83
85
|
<td><i>default: </i><b>GoogleApi::Cache.new</b></td>
|
84
86
|
<td>more information <a href="#Cache">Cache</a></td>
|
85
87
|
</tr>
|
@@ -107,12 +109,12 @@ There is a 3 way for starting sesssion.
|
|
107
109
|
`First you must add your developer email to google analytics profile.`
|
108
110
|
|
109
111
|
```ruby
|
112
|
+
# try login once
|
110
113
|
GoogleApi::Ga::Session.login_by_cert
|
111
|
-
```
|
112
114
|
|
113
|
-
|
115
|
+
# ----- OR -----
|
114
116
|
|
115
|
-
|
117
|
+
# trying login in loop
|
116
118
|
GoogleApi::Ga::Session.login_by_cert!
|
117
119
|
```
|
118
120
|
|
@@ -180,7 +182,6 @@ Management
|
|
180
182
|
```ruby
|
181
183
|
# Variables: id, name, created, updated
|
182
184
|
# Methods: webproperties
|
183
|
-
|
184
185
|
GoogleApi::Ga::Account
|
185
186
|
```
|
186
187
|
|
@@ -189,7 +190,6 @@ GoogleApi::Ga::Account
|
|
189
190
|
```ruby
|
190
191
|
# Variables: id, name, created, updated, accountId, websiteUrl
|
191
192
|
# Methods: account, profiles
|
192
|
-
|
193
193
|
GoogleApi::Ga::Webproperty
|
194
194
|
```
|
195
195
|
|
@@ -198,7 +198,6 @@ GoogleApi::Ga::Webproperty
|
|
198
198
|
```ruby
|
199
199
|
# Variables: id, name, created, updated, accountId, websiteUrl, currency, timezone
|
200
200
|
# Methods: webproperty, goals
|
201
|
-
|
202
201
|
GoogleApi::Ga::Profile
|
203
202
|
```
|
204
203
|
|
@@ -207,7 +206,6 @@ GoogleApi::Ga::Profile
|
|
207
206
|
```ruby
|
208
207
|
# Variables: accountId, webPropertyId, profileId, value, active, type, goal
|
209
208
|
# Methods: profile
|
210
|
-
|
211
209
|
GoogleApi::Ga::Goal
|
212
210
|
```
|
213
211
|
|
@@ -215,7 +213,6 @@ GoogleApi::Ga::Goal
|
|
215
213
|
|
216
214
|
```ruby
|
217
215
|
# Variables: segmentId, definition
|
218
|
-
|
219
216
|
GoogleApi::Ga::Segment
|
220
217
|
```
|
221
218
|
|
@@ -234,7 +231,7 @@ First you can play on the playground: http://ga-dev-tools.appspot.com/explorer/.
|
|
234
231
|
```ruby
|
235
232
|
GoogleApi::Ga::Data
|
236
233
|
```
|
237
|
-
<br
|
234
|
+
<br>
|
238
235
|
> ## ids
|
239
236
|
>
|
240
237
|
> <a href="https://developers.google.com/analytics/devguides/reporting/core/v3/reference#ids" target="_blank" style="float:right">doc</a>
|
@@ -279,6 +276,8 @@ GoogleApi::Ga::Data
|
|
279
276
|
>
|
280
277
|
> **alias:** select
|
281
278
|
>
|
279
|
+
> you can also add or sub parameters with `.metrics_add` or `.metrics_sub`
|
280
|
+
>
|
282
281
|
> **parameters:** Array with String or Symbol, String (not compiled, <i>"ga:visitors"</i>) or Symbol (compiled, <i>:visitors</i>)
|
283
282
|
|
284
283
|
<br>
|
@@ -289,6 +288,8 @@ GoogleApi::Ga::Data
|
|
289
288
|
>
|
290
289
|
> **alias:** with
|
291
290
|
>
|
291
|
+
> you can also add or sub parameters with `.dimensions_add` or `.dimensions_sub`
|
292
|
+
>
|
292
293
|
> **parameters:** Array with String or Symbol, String (not compiled, <i>"ga:visitors"</i>) or Symbol (compiled, <i>:visitors</i>)
|
293
294
|
|
294
295
|
<br>
|
@@ -296,6 +297,7 @@ GoogleApi::Ga::Data
|
|
296
297
|
> ## sort
|
297
298
|
>
|
298
299
|
> <a href="https://developers.google.com/analytics/devguides/reporting/core/v3/reference#sort" target="_blank" style="float:right">doc</a>
|
300
|
+
> you can also add or sub parameters with `.sort_add` or `.sort_sub`
|
299
301
|
>
|
300
302
|
> **parameters:** Array with String or Symbol, String (not compiled, <i>"ga:visitors"</i>) or Symbol (compiled, <i>:visitors</i>)
|
301
303
|
|
@@ -309,6 +311,10 @@ GoogleApi::Ga::Data
|
|
309
311
|
>
|
310
312
|
> **parameters:**<br>
|
311
313
|
> {(attribute operator value) & (attribute operator value) | (attribute operator value)} or String (not compiled)
|
314
|
+
>
|
315
|
+
> **operators:** ==, !=, >, <, >=, <=, =~, !~<br>
|
316
|
+
> % _is =@_<br>
|
317
|
+
> ** _is !@_
|
312
318
|
|
313
319
|
<br>
|
314
320
|
|
@@ -319,6 +325,10 @@ GoogleApi::Ga::Data
|
|
319
325
|
> **parameters:**<br>
|
320
326
|
> {(attribute operator value) & (attribute operator value) | (attribute operator value)} or String (not compiled) <br>
|
321
327
|
> with {} automaticly add "dynamic::"
|
328
|
+
>
|
329
|
+
> **operators:** ==, !=, >, <, >=, <=, =~, !~<br>
|
330
|
+
> % _is =@_<br>
|
331
|
+
> ** _is !@_
|
322
332
|
|
323
333
|
<br>
|
324
334
|
|
@@ -356,98 +366,124 @@ GoogleApi::Ga::Data
|
|
356
366
|
|
357
367
|
You can use one of these. Data is stored in the class.
|
358
368
|
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
369
|
+
`.all` - `[header, rows]`<br>
|
370
|
+
`.rows` - rows returned by google analytics<br>
|
371
|
+
`.header` - header of data, (`["ga:day", "ga:month", "ga:visitis"]`)<br>
|
372
|
+
`.count` - number of rows<br>
|
373
|
+
`.each` - each as you expected, (`|data|` or `|index, data|`)
|
364
374
|
|
365
375
|
### Clear stored data and fetch again
|
366
376
|
|
367
|
-
clear
|
368
|
-
<b>`clear`</b><br>
|
377
|
+
If you add some parameters clear is called automaticlly.
|
369
378
|
|
370
|
-
clear
|
371
|
-
<b>`all!`</b>, <b>`rows!`</b>, <b>`header!`</b>, <b>`count!`</b>, <b>`each!`</b><br><br>
|
379
|
+
clear: `.clear`<br>
|
372
380
|
|
373
|
-
|
381
|
+
clear and fetch new:<br>
|
382
|
+
`.all!`, `.rows!`, `.header!`, `.count!`, `.each!`<br>
|
374
383
|
|
375
384
|
Examples
|
376
385
|
--------
|
377
386
|
|
378
|
-
|
387
|
+
|
379
388
|
```ruby
|
380
|
-
#
|
381
|
-
|
382
|
-
GoogleApi.config.ga.client_developer_email = "123456@developer.gserviceaccount.com"
|
389
|
+
# Start session
|
390
|
+
# =============
|
383
391
|
|
384
|
-
#
|
385
|
-
GoogleApi
|
392
|
+
# set configuration
|
393
|
+
GoogleApi.config.ga.client_cert_file = "privatekey.p12"
|
394
|
+
GoogleApi.config.ga.client_developer_email = "123456@developer.gserviceaccount.com"
|
386
395
|
|
387
|
-
#
|
388
|
-
|
396
|
+
# start session
|
397
|
+
GoogleApi::Ga::Session.login_by_cert!
|
389
398
|
|
390
|
-
# set default id
|
391
|
-
GoogleApi::Ga.id(id)
|
392
|
-
```
|
393
|
-
<br>
|
394
|
-
**Starting session by line:**<br>
|
395
399
|
|
396
|
-
First install launchy:<br>
|
397
|
-
`gem install launchy`
|
398
|
-
```ruby
|
399
|
-
# callback_uri and port can be blank - auto start server at localhost
|
400
|
-
GoogleApi::Ga::Session.login_by_line(callback_uri, port)
|
401
400
|
|
402
|
-
#
|
403
|
-
#
|
404
|
-
# 3) confirm and google api redirect to localhost
|
405
|
-
# 4) server get code and start session
|
406
|
-
# 5) close server
|
401
|
+
# Get profile id
|
402
|
+
# ==============
|
407
403
|
|
408
|
-
#
|
409
|
-
GoogleApi::Ga::
|
410
|
-
```
|
411
|
-
<br>
|
412
|
-
**Management of accounts:**
|
413
|
-
```ruby
|
414
|
-
accounts = GoogleApi::Ga::Account.all # all accounts
|
404
|
+
# get profile id
|
405
|
+
id = GoogleApi::Ga::Profile.all.first.id
|
415
406
|
|
416
|
-
|
407
|
+
# set default id
|
408
|
+
GoogleApi::Ga.id(id)
|
417
409
|
|
418
|
-
GoogleApi::Ga::Webproperty.all # all webproperties
|
419
410
|
|
420
|
-
GoogleApi::Ga::Profile.all # all profiles
|
421
411
|
|
422
|
-
|
412
|
+
# Starting session by line
|
413
|
+
# ========================
|
423
414
|
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
#
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
415
|
+
# First install launchy:
|
416
|
+
# gem install launchy
|
417
|
+
|
418
|
+
# callback_uri and port are optional - auto start server at localhost
|
419
|
+
GoogleApi::Ga::Session.login_by_line(callback_uri, port)
|
420
|
+
|
421
|
+
# This will do
|
422
|
+
# 1) create server
|
423
|
+
# 2) launch browser and redirect to google api
|
424
|
+
# 3) confirm and google api redirect to localhost
|
425
|
+
# 4) server get code and start session
|
426
|
+
# 5) close server - you are login
|
427
|
+
|
428
|
+
|
429
|
+
|
430
|
+
# Check session, error if not login
|
431
|
+
# =================================
|
432
|
+
|
433
|
+
GoogleApi::Ga::Session.check_session!
|
434
|
+
|
435
|
+
|
436
|
+
|
437
|
+
# Management of accounts
|
438
|
+
# ======================
|
439
|
+
|
440
|
+
# all accounts
|
441
|
+
accounts = GoogleApi::Ga::Account.all
|
442
|
+
|
443
|
+
# webproperties for account
|
444
|
+
accounts.first.webproperties
|
445
|
+
|
446
|
+
# all webproperties
|
447
|
+
GoogleApi::Ga::Webproperty.all
|
448
|
+
|
449
|
+
# all profiles
|
450
|
+
GoogleApi::Ga::Profile.all
|
451
|
+
|
452
|
+
# all goal
|
453
|
+
GoogleApi::Ga::Goal.all
|
454
|
+
|
455
|
+
# all segment
|
456
|
+
GoogleApi::Ga::Segment.all
|
457
|
+
|
458
|
+
|
459
|
+
|
460
|
+
# Count of visitors between previous month and today
|
461
|
+
# ==================================================
|
462
|
+
|
463
|
+
GoogleApi::Ga::Data.from(-30).select(:visits).rows
|
464
|
+
|
465
|
+
|
466
|
+
|
467
|
+
# Count of visitors between previous month and today - 2, and cache it for 30 minutes
|
468
|
+
# ===================================================================================
|
469
|
+
|
470
|
+
GoogleApi::Ga::Data.from(-30).to(-2).select(:visits).cache(30).rows
|
471
|
+
|
472
|
+
|
473
|
+
|
474
|
+
# Visitors by day, month, year from Czech Republic. Browser is Firefox and Opera or Chrome
|
475
|
+
# ========================================================================================
|
476
|
+
|
477
|
+
GoogleApi::Ga::Data.from(-30).select(:visits).with(:day, :month, :year)
|
478
|
+
.sort(:year, :month, :day)
|
479
|
+
.where{(country == "Czech Republic") &
|
480
|
+
(browser == "Firefox") &
|
481
|
+
(browser == "Opera") |
|
482
|
+
(browser == "Chrome")}
|
483
|
+
.rows
|
484
|
+
# ----- OR -----
|
485
|
+
GoogleApi::Ga::Data.from(-30).select(:visits).with(:day, :month, :year)
|
486
|
+
.sort(:year, :month, :day)
|
487
|
+
.where("ga:country==Czech Republic;ga:browser==Firefox;ga:browser==Opera,ga:browser==Chrome")
|
488
|
+
.rows
|
453
489
|
```
|
data/Rakefile
CHANGED
data/lib/google_api.rb
CHANGED
@@ -10,10 +10,11 @@ module GoogleApi
|
|
10
10
|
|
11
11
|
autoload :Ga, 'google_api/ga'
|
12
12
|
|
13
|
-
class SessionError
|
14
|
-
class GaError
|
15
|
-
class DateError
|
16
|
-
class TypeError
|
13
|
+
class SessionError < StandardError; end
|
14
|
+
class GaError < StandardError; end
|
15
|
+
class DateError < StandardError; end
|
16
|
+
class TypeError < StandardError; end
|
17
|
+
class CanBeNilError < StandardError; end
|
17
18
|
|
18
19
|
CONFIGURATION = {
|
19
20
|
client_id: nil,
|
data/lib/google_api/date.rb
CHANGED
@@ -18,28 +18,16 @@ module GoogleApi
|
|
18
18
|
GoogleApi.config
|
19
19
|
end
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
end
|
32
|
-
|
33
|
-
def self.client_cert_file
|
34
|
-
_config.ga.client_cert_file ? _config.ga.client_cert_file : _config.client_cert_file
|
35
|
-
end
|
36
|
-
|
37
|
-
def self.client_developer_email
|
38
|
-
_config.ga.client_developer_email ? _config.ga.client_developer_email : _config.client_developer_email
|
39
|
-
end
|
40
|
-
|
41
|
-
def self.key_secret
|
42
|
-
_config.ga.key_secret ? _config.ga.key_secret : _config.key_secret
|
21
|
+
[:client_id, :client_secret, :redirect_uri, :client_cert_file, :client_developer_email, :key_secret].each do |key|
|
22
|
+
eval <<-METHOD
|
23
|
+
def self.#{key}
|
24
|
+
to_return = _config.ga.#{key} ? _config.ga.#{key} : _config.#{key}
|
25
|
+
|
26
|
+
if to_return.nil?
|
27
|
+
raise GoogleApi::CanBeNilError, "#{key} can be nil."
|
28
|
+
end
|
29
|
+
end
|
30
|
+
METHOD
|
43
31
|
end
|
44
32
|
|
45
33
|
# ---------------------------------------------------------------------------------------
|
data/lib/google_api/version.rb
CHANGED
@@ -0,0 +1,83 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe "GoogleApi::Cache" do
|
4
|
+
before(:each) do
|
5
|
+
@cache = GoogleApi::Cache.new
|
6
|
+
|
7
|
+
@cache.write("key_1", "key_1_value", 0)
|
8
|
+
@cache.write("key_2", "key_2_value", 60)
|
9
|
+
@cache.write("key_3", "key_3_value", 1000)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "data read" do
|
13
|
+
@cache.read("key_1").should eql("key_1_value")
|
14
|
+
@cache.read("key_2").should eql("key_2_value")
|
15
|
+
@cache.read("key_3").should eql("key_3_value")
|
16
|
+
|
17
|
+
@cache.read("key_4").should eql(nil)
|
18
|
+
@cache.read("key_5").should eql(nil)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "data exists" do
|
22
|
+
@cache.exists?("key_1").should eql(true)
|
23
|
+
@cache.exists?("key_2").should eql(true)
|
24
|
+
@cache.exists?("key_3").should eql(true)
|
25
|
+
|
26
|
+
@cache.exists?("key_4").should eql(false)
|
27
|
+
@cache.exists?("key_5").should eql(false)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "data delete" do
|
31
|
+
@cache.exists?("key_1").should eql(true)
|
32
|
+
@cache.delete("key_1")
|
33
|
+
@cache.exists?("key_1").should eql(false)
|
34
|
+
|
35
|
+
@cache.exists?("key_2").should eql(true)
|
36
|
+
@cache.delete("key_2")
|
37
|
+
@cache.exists?("key_2").should eql(false)
|
38
|
+
|
39
|
+
@cache.exists?("key_3").should eql(true)
|
40
|
+
@cache.delete("key_3")
|
41
|
+
@cache.exists?("key_3").should eql(false)
|
42
|
+
|
43
|
+
@cache.exists?("key_4").should eql(false)
|
44
|
+
@cache.delete("key_4").should eql(nil)
|
45
|
+
@cache.exists?("key_4").should eql(false)
|
46
|
+
|
47
|
+
@cache.exists?("key_5").should eql(false)
|
48
|
+
@cache.delete("key_5").should eql(nil)
|
49
|
+
@cache.exists?("key_5").should eql(false)
|
50
|
+
end
|
51
|
+
|
52
|
+
it "delete and write again" do
|
53
|
+
@cache.exists?("key_1").should eql(true)
|
54
|
+
@cache.delete("key_1")
|
55
|
+
@cache.exists?("key_1").should eql(false)
|
56
|
+
|
57
|
+
@cache.write("key_1", "key_1_value", 0)
|
58
|
+
|
59
|
+
@cache.read("key_1").should eql("key_1_value")
|
60
|
+
|
61
|
+
@cache.exists?("key_1").should eql(true)
|
62
|
+
end
|
63
|
+
|
64
|
+
it "data overwrite" do
|
65
|
+
@cache.write("key_1", "key_1_value2")
|
66
|
+
|
67
|
+
@cache.read("key_1").should eql("key_1_value2")
|
68
|
+
end
|
69
|
+
|
70
|
+
it "expire data" do
|
71
|
+
@cache.write("key_1", "key_1_value", 0.0000001)
|
72
|
+
|
73
|
+
sleep(0.0000001)
|
74
|
+
|
75
|
+
@cache.exists?("key_1").should eql(false)
|
76
|
+
end
|
77
|
+
|
78
|
+
it "negative expires number" do
|
79
|
+
@cache.write("key_1", "key_1_value", -1000)
|
80
|
+
|
81
|
+
@cache.exists?("key_1").should eql(false)
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,164 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe "GoogleApi::Ga::Data" do
|
4
|
+
before(:each) do
|
5
|
+
@data = GoogleApi::Ga::Data
|
6
|
+
end
|
7
|
+
|
8
|
+
|
9
|
+
|
10
|
+
# Rows
|
11
|
+
# -------------------------------------------------------------------------------------------------
|
12
|
+
it "rows" do
|
13
|
+
lambda { @data.new.rows }.should raise_error(GoogleApi::SessionError)
|
14
|
+
end
|
15
|
+
|
16
|
+
|
17
|
+
|
18
|
+
# Default values
|
19
|
+
# -------------------------------------------------------------------------------------------------
|
20
|
+
it "default values" do
|
21
|
+
@data.ids.should eql(nil)
|
22
|
+
@data.cache.should eql(nil)
|
23
|
+
@data.filters.should eql(nil)
|
24
|
+
@data.segment.should eql(nil)
|
25
|
+
@data.start_index.should eql(nil)
|
26
|
+
@data.max_results.should eql(nil)
|
27
|
+
|
28
|
+
@data.metrics.should eql([])
|
29
|
+
@data.dimensions.should eql([])
|
30
|
+
@data.sort.should eql([])
|
31
|
+
|
32
|
+
@data.start_date.should eql(Date.today)
|
33
|
+
@data.end_date.should eql(Date.today)
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
|
38
|
+
# Check date
|
39
|
+
# -------------------------------------------------------------------------------------------------
|
40
|
+
it "date" do
|
41
|
+
@data.to_date("2012-08-20").should be_a_kind_of(Date)
|
42
|
+
@data.to_date(DateTime.now).should be_a_kind_of(Date)
|
43
|
+
lambda { @data.to_date("2012/08/20") }.should raise_error(GoogleApi::DateError)
|
44
|
+
end
|
45
|
+
|
46
|
+
|
47
|
+
|
48
|
+
# Check build_param
|
49
|
+
# -------------------------------------------------------------------------------------------------
|
50
|
+
it "build param" do
|
51
|
+
lambda { @data.build_param("attr") }.should raise_error(GoogleApi::TypeError)
|
52
|
+
|
53
|
+
@data.build_param([:key_1, "ga:key_2", [:key_3, [:key_4]], "ga:key_5", "ga:key_6"]).join(',').should eql("ga:key_1,ga:key_2,ga:key_3,ga:key_4,ga:key_5,ga:key_6")
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
|
58
|
+
# Type error
|
59
|
+
# -------------------------------------------------------------------------------------------------
|
60
|
+
it "type error" do
|
61
|
+
lambda { @data.type?(1, String ) }.should raise_error(GoogleApi::TypeError)
|
62
|
+
lambda { @data.type?(1, Integer ) }.should_not raise_error(GoogleApi::TypeError)
|
63
|
+
lambda { @data.type?("google_api", String ) }.should_not raise_error(GoogleApi::TypeError)
|
64
|
+
end
|
65
|
+
|
66
|
+
|
67
|
+
|
68
|
+
# Save parameters
|
69
|
+
# -------------------------------------------------------------------------------------------------
|
70
|
+
it "save parameters" do
|
71
|
+
@data = @data.ids(1)
|
72
|
+
.cache(1)
|
73
|
+
.start_date(Date.today)
|
74
|
+
.end_date(Date.today)
|
75
|
+
.metrics(:visits)
|
76
|
+
.dimensions(:day, :month, "ga:year")
|
77
|
+
.sort("ga:year", :month, :day)
|
78
|
+
.filters("country==Czech Republic")
|
79
|
+
.segment("gaid::-1")
|
80
|
+
.start_index(1)
|
81
|
+
.max_results(1)
|
82
|
+
|
83
|
+
@data.ids.should eql(1)
|
84
|
+
@data.cache.should eql(1)
|
85
|
+
@data.start_date.should eql(Date.today)
|
86
|
+
@data.end_date.should eql(Date.today)
|
87
|
+
@data.metrics.should eql(["ga:visits"])
|
88
|
+
@data.dimensions.should eql(["ga:day", "ga:month", "ga:year"])
|
89
|
+
@data.sort.should eql(["ga:year", "ga:month", "ga:day"])
|
90
|
+
@data.filters.should eql("country==Czech Republic")
|
91
|
+
@data.segment.should eql("gaid::-1")
|
92
|
+
@data.start_index.should eql(1)
|
93
|
+
@data.max_results.should eql(1)
|
94
|
+
end
|
95
|
+
|
96
|
+
|
97
|
+
|
98
|
+
# Date add and sub
|
99
|
+
# -------------------------------------------------------------------------------------------------
|
100
|
+
it "date add and sub" do
|
101
|
+
@data = @data.start_date(+30).end_date(+30)
|
102
|
+
|
103
|
+
@data.start_date.should eql(Date.today + 30)
|
104
|
+
@data.end_date.should eql(Date.today + 30)
|
105
|
+
|
106
|
+
@data = @data.start_date(Date.today).end_date(Date.today)
|
107
|
+
@data = @data.start_date(-30).end_date(-30)
|
108
|
+
|
109
|
+
@data.start_date.should eql(Date.today - 30)
|
110
|
+
@data.end_date.should eql(Date.today - 30)
|
111
|
+
end
|
112
|
+
|
113
|
+
|
114
|
+
|
115
|
+
# Metrics, dimensions and sort add and sub
|
116
|
+
# -------------------------------------------------------------------------------------------------
|
117
|
+
it "metrics, dimensions and sort add and sub" do
|
118
|
+
@data = @data.metrics(:visits)
|
119
|
+
.dimensions(:browser)
|
120
|
+
.sort(:javascript)
|
121
|
+
|
122
|
+
@data.metrics.should eql(["ga:visits"])
|
123
|
+
@data.dimensions.should eql(["ga:browser"])
|
124
|
+
@data.sort.should eql(["ga:javascript"])
|
125
|
+
|
126
|
+
@data.metrics_add(:newVisits)
|
127
|
+
.dimensions_add(:javaVersion)
|
128
|
+
.sort_add(:resolution)
|
129
|
+
|
130
|
+
@data.metrics.should eql(["ga:visits", "ga:newVisits"])
|
131
|
+
@data.dimensions.should eql(["ga:browser", "ga:javaVersion"])
|
132
|
+
@data.sort.should eql(["ga:javascript", "ga:resolution"])
|
133
|
+
|
134
|
+
@data.metrics_sub(:newVisits)
|
135
|
+
.dimensions_sub(:javaVersion)
|
136
|
+
.sort_sub(:resolution)
|
137
|
+
|
138
|
+
@data.metrics.should eql(["ga:visits"])
|
139
|
+
@data.dimensions.should eql(["ga:browser"])
|
140
|
+
@data.sort.should eql(["ga:javascript"])
|
141
|
+
end
|
142
|
+
|
143
|
+
|
144
|
+
|
145
|
+
# Filters
|
146
|
+
# -------------------------------------------------------------------------------------------------
|
147
|
+
it "filters" do
|
148
|
+
@data = @data.filters{(country == "Czech Republic") & (browser != "Internet Explorer") | (visitors > 1000) | (resolution < 1000) &
|
149
|
+
(day >= 1) & (month <= 1) & (year =~ 1) | (operatingSystem !~ "Linux") | (javaVersion % 1) & (newVisits ** 1)}
|
150
|
+
|
151
|
+
@data.filters.should eql("ga:country==Czech Republic;ga:browser!=Internet Explorer,ga:visitors>1000,ga:resolution<1000;ga:day>=1;ga:month<=1;ga:year=~1,ga:operatingSystem!~Linux,ga:javaVersion=@1;ga:newVisits!@1")
|
152
|
+
end
|
153
|
+
|
154
|
+
|
155
|
+
|
156
|
+
# Segment
|
157
|
+
# -------------------------------------------------------------------------------------------------
|
158
|
+
it "segment" do
|
159
|
+
@data = @data.segment{(country == "Czech Republic") & (browser != "Internet Explorer") | (visitors > 1000) | (resolution < 1000) &
|
160
|
+
(day >= 1) & (month <= 1) & (year =~ 1) | (operatingSystem !~ "Linux") | (javaVersion % 1) & (newVisits ** 1)}
|
161
|
+
|
162
|
+
@data.segment.should eql("dynamic::ga:country==Czech Republic;ga:browser!=Internet Explorer,ga:visitors>1000,ga:resolution<1000;ga:day>=1;ga:month<=1;ga:year=~1,ga:operatingSystem!~Linux,ga:javaVersion=@1;ga:newVisits!@1")
|
163
|
+
end
|
164
|
+
end
|
data/spec/lib/google_api_spec.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
describe "GoogleApi
|
4
|
-
|
3
|
+
describe "GoogleApi::Configuration" do
|
5
4
|
it "Setting is right." do
|
6
5
|
GoogleApi.configure do
|
7
6
|
client_id "1"
|
@@ -15,13 +14,13 @@ describe "GoogleApi config" do
|
|
15
14
|
end
|
16
15
|
end
|
17
16
|
|
18
|
-
GoogleApi.config.client_id.should
|
19
|
-
GoogleApi.config.client_secret.should
|
20
|
-
GoogleApi.config.client_developer_email.should
|
17
|
+
GoogleApi.config.client_id.should eq("1")
|
18
|
+
GoogleApi.config.client_secret.should eq("2")
|
19
|
+
GoogleApi.config.client_developer_email.should eq("3")
|
21
20
|
|
22
|
-
GoogleApi.config.ga.client_id.should
|
23
|
-
GoogleApi.config.ga.client_secret.should
|
24
|
-
GoogleApi.config.ga.client_developer_email.should
|
21
|
+
GoogleApi.config.ga.client_id.should eq("4")
|
22
|
+
GoogleApi.config.ga.client_secret.should eq("5")
|
23
|
+
GoogleApi.config.ga.client_developer_email.should eq("6")
|
25
24
|
|
26
25
|
GoogleApi.configure do |config|
|
27
26
|
config.client_id "7"
|
@@ -35,13 +34,13 @@ describe "GoogleApi config" do
|
|
35
34
|
end
|
36
35
|
end
|
37
36
|
|
38
|
-
GoogleApi.config.client_id.should
|
39
|
-
GoogleApi.config.client_secret.should
|
40
|
-
GoogleApi.config.client_developer_email.should
|
37
|
+
GoogleApi.config.client_id.should eq("7")
|
38
|
+
GoogleApi.config.client_secret.should eq("8")
|
39
|
+
GoogleApi.config.client_developer_email.should eq("9")
|
41
40
|
|
42
|
-
GoogleApi.config.ga.client_id.should
|
43
|
-
GoogleApi.config.ga.client_secret.should
|
44
|
-
GoogleApi.config.ga.client_developer_email.should
|
41
|
+
GoogleApi.config.ga.client_id.should eq("10")
|
42
|
+
GoogleApi.config.ga.client_secret.should eq("11")
|
43
|
+
GoogleApi.config.ga.client_developer_email.should eq("12")
|
45
44
|
|
46
45
|
GoogleApi.config.client_id = "13"
|
47
46
|
GoogleApi.config.client_secret = "14"
|
@@ -51,13 +50,12 @@ describe "GoogleApi config" do
|
|
51
50
|
GoogleApi.config.ga.client_secret = "17"
|
52
51
|
GoogleApi.config.ga.client_developer_email = "18"
|
53
52
|
|
54
|
-
GoogleApi.config.client_id.should
|
55
|
-
GoogleApi.config.client_secret.should
|
56
|
-
GoogleApi.config.client_developer_email.should
|
53
|
+
GoogleApi.config.client_id.should eq("13")
|
54
|
+
GoogleApi.config.client_secret.should eq("14")
|
55
|
+
GoogleApi.config.client_developer_email.should eq("15")
|
57
56
|
|
58
|
-
GoogleApi.config.ga.client_id.should
|
59
|
-
GoogleApi.config.ga.client_secret.should
|
60
|
-
GoogleApi.config.ga.client_developer_email.should
|
57
|
+
GoogleApi.config.ga.client_id.should eq("16")
|
58
|
+
GoogleApi.config.ga.client_secret.should eq("17")
|
59
|
+
GoogleApi.config.ga.client_developer_email.should eq("18")
|
61
60
|
end
|
62
|
-
|
63
61
|
end
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: google_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.0
|
5
|
-
prerelease:
|
4
|
+
version: 1.0.0
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Ondřej Moravčík
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-08-
|
12
|
+
date: 2012-08-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: google-api-client
|
@@ -68,6 +68,7 @@ extra_rdoc_files: []
|
|
68
68
|
files:
|
69
69
|
- .gitignore
|
70
70
|
- .rspec
|
71
|
+
- .travis.yml
|
71
72
|
- Gemfile
|
72
73
|
- LICENSE
|
73
74
|
- README.md
|
@@ -93,6 +94,9 @@ files:
|
|
93
94
|
- lib/google_api/ga/management/webproperty.rb
|
94
95
|
- lib/google_api/ga/session.rb
|
95
96
|
- lib/google_api/version.rb
|
97
|
+
- spec/lib/google_api_cache_spec.rb
|
98
|
+
- spec/lib/google_api_ga_data_spec.rb
|
99
|
+
- spec/lib/google_api_ga_spec.rb
|
96
100
|
- spec/lib/google_api_spec.rb
|
97
101
|
- spec/spec_helper.rb
|
98
102
|
homepage: https://github.com/ondra-m/google_api
|
@@ -110,9 +114,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
110
114
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
111
115
|
none: false
|
112
116
|
requirements:
|
113
|
-
- - ! '
|
117
|
+
- - ! '>='
|
114
118
|
- !ruby/object:Gem::Version
|
115
|
-
version:
|
119
|
+
version: '0'
|
116
120
|
requirements: []
|
117
121
|
rubyforge_project:
|
118
122
|
rubygems_version: 1.8.23
|
@@ -120,6 +124,9 @@ signing_key:
|
|
120
124
|
specification_version: 3
|
121
125
|
summary: Simple Google Api. Include google analytics.
|
122
126
|
test_files:
|
127
|
+
- spec/lib/google_api_cache_spec.rb
|
128
|
+
- spec/lib/google_api_ga_data_spec.rb
|
129
|
+
- spec/lib/google_api_ga_spec.rb
|
123
130
|
- spec/lib/google_api_spec.rb
|
124
131
|
- spec/spec_helper.rb
|
125
132
|
has_rdoc:
|