google_api 1.1.0.beta → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +7 -0
- data/README.md +2 -488
- data/lib/google_api.rb +0 -1
- data/lib/google_api/ga/data.rb +18 -12
- data/lib/google_api/ga/management/goal.rb +13 -13
- data/lib/google_api/ga/management/management.rb +4 -4
- data/lib/google_api/ga/management/profile.rb +9 -17
- data/lib/google_api/ga/management/segment.rb +3 -3
- data/lib/google_api/ga/management/webproperty.rb +7 -7
- data/lib/google_api/shorten/shorten.rb +5 -3
- data/lib/google_api/shorten/url/get.rb +22 -5
- data/lib/google_api/shorten/url/insert.rb +21 -4
- data/lib/google_api/shorten/url/list.rb +5 -3
- data/lib/google_api/version.rb +1 -1
- data/spec/lib/{google_api_cache_spec.rb → cache_spec.rb} +0 -0
- data/spec/lib/configuration_spec.rb +93 -0
- data/spec/lib/{google_api_ga_data_spec.rb → ga_data_spec.rb} +31 -1
- data/spec/lib/{google_api_ga_spec.rb → ga_spec.rb} +0 -0
- data/spec/lib/shorten_spec.rb +20 -0
- metadata +15 -14
- data/lib/google_api/core_ext/hash.rb +0 -11
- data/spec/lib/google_api_spec.rb +0 -61
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -2,18 +2,10 @@ Google Api [![Build Status](https://secure.travis-ci.org/ondra-m/google_api.png)
|
|
2
2
|
==========
|
3
3
|
|
4
4
|
Analytics<br>
|
5
|
-
Url shortener
|
5
|
+
Url shortener<br>
|
6
6
|
Calendar - will be soon
|
7
7
|
|
8
|
-
|
9
|
-
================
|
10
|
-
|
11
|
-
<a href="#examples">examples</a>
|
12
|
-
|
13
|
-
News
|
14
|
-
----
|
15
|
-
|
16
|
-
For now is released beta version. Pleas use issues for problems.
|
8
|
+
More informations in [wiki](https://github.com/ondra-m/google_api/wiki).
|
17
9
|
|
18
10
|
Installation
|
19
11
|
------------
|
@@ -29,481 +21,3 @@ And then execute:
|
|
29
21
|
Or install it yourself as:
|
30
22
|
|
31
23
|
`$ gem install google_api`
|
32
|
-
|
33
|
-
Configuration
|
34
|
-
-------------
|
35
|
-
|
36
|
-
First you must create project at <a href="https://code.google.com/apis/console" target="_blank">google console</a>.
|
37
|
-
|
38
|
-
```ruby
|
39
|
-
GoogleApi.configure do
|
40
|
-
client_id "1"
|
41
|
-
|
42
|
-
ga do
|
43
|
-
client_id "2"
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
# ----- OR -----
|
48
|
-
|
49
|
-
GoogleApi.config.client_id = "4"
|
50
|
-
GoogleApi.config.ga.client_id = "5"
|
51
|
-
```
|
52
|
-
|
53
|
-
<table>
|
54
|
-
<thead>
|
55
|
-
<tr>
|
56
|
-
<th>name</th>
|
57
|
-
<th>example</th>
|
58
|
-
<th>note</th>
|
59
|
-
</tr>
|
60
|
-
</thead>
|
61
|
-
|
62
|
-
<tbody>
|
63
|
-
<tr>
|
64
|
-
<td>client_id</td>
|
65
|
-
<td><i>123456.apps.googleusercontent.com</i></td>
|
66
|
-
<td rowspan="3">required for oauth 2</td>
|
67
|
-
</tr>
|
68
|
-
<tr>
|
69
|
-
<td>client_secret</td>
|
70
|
-
<td><i>123456123456123456</i></td>
|
71
|
-
</tr>
|
72
|
-
<tr>
|
73
|
-
<td>redirect_uri</td>
|
74
|
-
<td><i>http://localhost/oauth2callback</i></td>
|
75
|
-
</tr>
|
76
|
-
<tr>
|
77
|
-
<td>client_developer_email</td>
|
78
|
-
<td><i>123456@developer.gserviceaccount.com</i></td>
|
79
|
-
<td rowspan="3">required for login by cert</td>
|
80
|
-
</tr>
|
81
|
-
<tr>
|
82
|
-
<td>client_cert_file</td>
|
83
|
-
<td><i>/home/user/app/123456-privatekey.p12</i></td>
|
84
|
-
</tr>
|
85
|
-
<tr>
|
86
|
-
<td>key_secret</td>
|
87
|
-
<td><i>notasecret</i></td>
|
88
|
-
</tr>
|
89
|
-
<tr>
|
90
|
-
<td colspan="3">only for ga</td>
|
91
|
-
</tr>
|
92
|
-
<tr>
|
93
|
-
<td>cache</td>
|
94
|
-
<td><i>default: </i><b>GoogleApi::Cache.new</b></td>
|
95
|
-
<td>more information <a href="#Cache">Cache</a></td>
|
96
|
-
</tr>
|
97
|
-
</tbody>
|
98
|
-
</table>
|
99
|
-
|
100
|
-
<a name="Cache"></a>
|
101
|
-
Cache
|
102
|
-
-----
|
103
|
-
|
104
|
-
Cache must have these methods:
|
105
|
-
|
106
|
-
`write(key, value, expire)` - expire=0 for never expire<br>
|
107
|
-
`read(key)`<br>
|
108
|
-
`exists?(key)`<br>
|
109
|
-
`delete(key)`
|
110
|
-
|
111
|
-
Session
|
112
|
-
-------
|
113
|
-
|
114
|
-
There is a 3 way for starting sesssion. Client login with username and password is deprecated.
|
115
|
-
|
116
|
-
### By cert file
|
117
|
-
|
118
|
-
`First you must add your developer email to google analytics profile.`
|
119
|
-
|
120
|
-
```ruby
|
121
|
-
# try login once
|
122
|
-
GoogleApi::Ga::Session.login_by_cert
|
123
|
-
|
124
|
-
# ----- OR -----
|
125
|
-
|
126
|
-
# trying login in loop
|
127
|
-
GoogleApi::Ga::Session.login_by_cert!
|
128
|
-
```
|
129
|
-
|
130
|
-
### By oauth 2
|
131
|
-
|
132
|
-
```ruby
|
133
|
-
# return uri for oauth 2 login
|
134
|
-
GoogleApi::Ga::Session.login
|
135
|
-
|
136
|
-
# after callback
|
137
|
-
# code = code key in query (params[:code])
|
138
|
-
GoogleApi::Ga::Session.login(code)
|
139
|
-
```
|
140
|
-
|
141
|
-
**In rails:**
|
142
|
-
|
143
|
-
```ruby
|
144
|
-
redirect_to(GoogleApi::Ga::Session.login)
|
145
|
-
|
146
|
-
# in page specified in redirect_uri
|
147
|
-
GoogleApi::Ga::Session.login(params[:code])
|
148
|
-
```
|
149
|
-
|
150
|
-
### By oauth 2 via line (browser needed)
|
151
|
-
|
152
|
-
This will create TCPServer. After login will be closed.
|
153
|
-
|
154
|
-
**server:** optional is localhost, must be full path!<br>
|
155
|
-
**port:** on which port the server will listen
|
156
|
-
|
157
|
-
```ruby
|
158
|
-
# default:
|
159
|
-
# server = http://localhost/oauth2callback
|
160
|
-
# port = 0 - get first free port
|
161
|
-
GoogleApi::Ga::Session.login_by_line(server, port)
|
162
|
-
```
|
163
|
-
|
164
|
-
Management
|
165
|
-
----------
|
166
|
-
|
167
|
-
<table>
|
168
|
-
<thead>
|
169
|
-
<tr>
|
170
|
-
<th colspan="2">Account ~~~ Webproperty ~~~ Profile ~~~ Goal ~~~ Segment</th>
|
171
|
-
</tr>
|
172
|
-
</thead>
|
173
|
-
<tbody>
|
174
|
-
<tr>
|
175
|
-
<td><b>all</b></td>
|
176
|
-
<td>find all</td>
|
177
|
-
</tr>
|
178
|
-
<tr>
|
179
|
-
<td><b>find(id)</b></td>
|
180
|
-
<td>find one by id</td>
|
181
|
-
</tr>
|
182
|
-
<tr>
|
183
|
-
<td><b>refresh</b></td>
|
184
|
-
<td>refresh data</td>
|
185
|
-
</tr>
|
186
|
-
</tbody>
|
187
|
-
</table>
|
188
|
-
|
189
|
-
#### Account
|
190
|
-
|
191
|
-
```ruby
|
192
|
-
# Variables: id, name, created, updated
|
193
|
-
# Methods: webproperties
|
194
|
-
GoogleApi::Ga::Account
|
195
|
-
```
|
196
|
-
|
197
|
-
#### Webproperty
|
198
|
-
|
199
|
-
```ruby
|
200
|
-
# Variables: id, name, created, updated, accountId, websiteUrl
|
201
|
-
# Methods: account, profiles
|
202
|
-
GoogleApi::Ga::Webproperty
|
203
|
-
```
|
204
|
-
|
205
|
-
#### Profile
|
206
|
-
|
207
|
-
```ruby
|
208
|
-
# Variables: id, name, created, updated, accountId, websiteUrl, currency, timezone
|
209
|
-
# Methods: webproperty, goals
|
210
|
-
GoogleApi::Ga::Profile
|
211
|
-
```
|
212
|
-
|
213
|
-
#### Goal
|
214
|
-
|
215
|
-
```ruby
|
216
|
-
# Variables: accountId, webPropertyId, profileId, value, active, type, goal
|
217
|
-
# Methods: profile
|
218
|
-
GoogleApi::Ga::Goal
|
219
|
-
```
|
220
|
-
|
221
|
-
#### Segment
|
222
|
-
|
223
|
-
```ruby
|
224
|
-
# Variables: id, name, created, updated, segmentId, definition
|
225
|
-
GoogleApi::Ga::Segment
|
226
|
-
```
|
227
|
-
|
228
|
-
Set default id
|
229
|
-
--------------
|
230
|
-
|
231
|
-
```ruby
|
232
|
-
GoogleApi::Ga.id(123456) # profile id
|
233
|
-
```
|
234
|
-
|
235
|
-
Data
|
236
|
-
----
|
237
|
-
|
238
|
-
First you can play on the playground: http://ga-dev-tools.appspot.com/explorer/.
|
239
|
-
|
240
|
-
```ruby
|
241
|
-
GoogleApi::Ga::Data
|
242
|
-
```
|
243
|
-
|
244
|
-
<br>
|
245
|
-
|
246
|
-
<table>
|
247
|
-
<thead>
|
248
|
-
<tr>
|
249
|
-
<th>method name</th>
|
250
|
-
<th>alias</th>
|
251
|
-
</tr>
|
252
|
-
</thead>
|
253
|
-
|
254
|
-
<tbody>
|
255
|
-
<tr>
|
256
|
-
<td>ids</td>
|
257
|
-
<td>id</td>
|
258
|
-
</tr>
|
259
|
-
<tr>
|
260
|
-
<td>start_date</td>
|
261
|
-
<td>from</td>
|
262
|
-
</tr>
|
263
|
-
<tr>
|
264
|
-
<td>end_date</td>
|
265
|
-
<td>to</td>
|
266
|
-
</tr>
|
267
|
-
<tr>
|
268
|
-
<td>metrics</td>
|
269
|
-
<td>select</td>
|
270
|
-
</tr>
|
271
|
-
<tr>
|
272
|
-
<td>dimensions</td>
|
273
|
-
<td>with</td>
|
274
|
-
</tr>
|
275
|
-
<tr>
|
276
|
-
<td>sort</td>
|
277
|
-
<td></td>
|
278
|
-
</tr>
|
279
|
-
<tr>
|
280
|
-
<td>filters</td>
|
281
|
-
<td>where</td>
|
282
|
-
</tr>
|
283
|
-
<tr>
|
284
|
-
<td>segment</td>
|
285
|
-
<td></td>
|
286
|
-
</tr>
|
287
|
-
<tr>
|
288
|
-
<td>start_index</td>
|
289
|
-
<td>offset</td>
|
290
|
-
</tr>
|
291
|
-
<tr>
|
292
|
-
<td>max_results</td>
|
293
|
-
<td>limit</td>
|
294
|
-
</tr>
|
295
|
-
</tbody>
|
296
|
-
</table>
|
297
|
-
|
298
|
-
|
299
|
-
> ## ids
|
300
|
-
>
|
301
|
-
> **doc:** <a href="https://developers.google.com/analytics/devguides/reporting/core/v3/reference#ids" target="_blank">doc</a>
|
302
|
-
>
|
303
|
-
> Id of profile, by default is use id from GoogleApi::Ga.id.
|
304
|
-
|
305
|
-
<br>
|
306
|
-
|
307
|
-
> ## start_date, end_date
|
308
|
-
>
|
309
|
-
> **doc:** <a href="https://developers.google.com/analytics/devguides/reporting/core/v3/reference#startDate" target="_blank">start-date</a>, <a href="https://developers.google.com/analytics/devguides/reporting/core/v3/reference#startDate" target="_blank">end-date</a>
|
310
|
-
>
|
311
|
-
> **default:** _Date.today_<br>
|
312
|
-
> **parameters:**<br>
|
313
|
-
> _String_ in YYYY-MM-DD or _Date_ or _DateTime_ or _Time_<br>
|
314
|
-
> _Integer_ for add or sub days from _Date.today_
|
315
|
-
|
316
|
-
<br>
|
317
|
-
|
318
|
-
> ## metrics, dimensions, sort
|
319
|
-
>
|
320
|
-
> **doc:** <a href="https://developers.google.com/analytics/devguides/reporting/core/v3/reference#metrics" target="_blank">metrics</a>, <a href="https://developers.google.com/analytics/devguides/reporting/core/v3/reference#dimensions" target="_blank">dimensions</a>, <a href="https://developers.google.com/analytics/devguides/reporting/core/v3/reference#sort" target="_blank">sort</a>
|
321
|
-
>
|
322
|
-
> you can also add or sub parameters with `.method_add` or `.method_sub`
|
323
|
-
>
|
324
|
-
> **parameters:** Array with String or Symbol, String (not compiled, <i>"ga:visitors"</i>) or Symbol (compiled, <i>:visitors</i>)
|
325
|
-
|
326
|
-
<br>
|
327
|
-
|
328
|
-
> ## filters, segment
|
329
|
-
>
|
330
|
-
> **doc:** <a href="https://developers.google.com/analytics/devguides/reporting/core/v3/reference#filters" target="_blank">filters</a>, <a href="https://developers.google.com/analytics/devguides/reporting/core/v3/reference#segment" target="_blank">segment</a>
|
331
|
-
>
|
332
|
-
> **parameters:**<br>
|
333
|
-
> {(attribute operator value) & (attribute operator value) | (attribute operator value)} or String (not compiled)
|
334
|
-
>
|
335
|
-
> **operators:** ==, !=, >, <, >=, <=, =~, !~<br>
|
336
|
-
> % _is =@_<br>
|
337
|
-
> ** _is !@_
|
338
|
-
|
339
|
-
<br>
|
340
|
-
|
341
|
-
> ## start_index
|
342
|
-
>
|
343
|
-
> **doc:** <a href="https://developers.google.com/analytics/devguides/reporting/core/v3/reference#startIndex" target="_blank">start-index</a>
|
344
|
-
>
|
345
|
-
> **parameters:** Integer from 1.
|
346
|
-
|
347
|
-
<br>
|
348
|
-
|
349
|
-
> ## max_results
|
350
|
-
>
|
351
|
-
> **doc:** <a href="https://developers.google.com/analytics/devguides/reporting/core/v3/reference#maxResults" target="_blank">max-results</a>
|
352
|
-
>
|
353
|
-
> **parameters:** Integer from 1 to 10 000.
|
354
|
-
|
355
|
-
|
356
|
-
### Cache
|
357
|
-
|
358
|
-
For how long in minutes will be data cached. Use 0 for never expire.
|
359
|
-
```ruby
|
360
|
-
GoogleApi::Ga::Data.cache(minutes)
|
361
|
-
|
362
|
-
# you can also clear cache
|
363
|
-
# it will clear cache only for entered parameters
|
364
|
-
GoogleApi::Ga::Data.clear_cache
|
365
|
-
|
366
|
-
# if you want clear cache and cache new
|
367
|
-
GoogleApi::Ga::Data.select(:visits).clear_cache.cache(60)
|
368
|
-
|
369
|
-
# or if you don't want use cache at all, default: true
|
370
|
-
GoogleApi::Ga::Data.use_cache(false)
|
371
|
-
```
|
372
|
-
|
373
|
-
### Error
|
374
|
-
|
375
|
-
What happen if parameters are wrong.
|
376
|
-
```ruby
|
377
|
-
# raise error with message
|
378
|
-
GoogleApi::Ga::Data.error(true)
|
379
|
-
|
380
|
-
# default, not raise error, just empty result
|
381
|
-
GoogleApi::Ga::Data.error(false)
|
382
|
-
```
|
383
|
-
|
384
|
-
### Fetch data
|
385
|
-
|
386
|
-
You can use one of these. Data is stored in the class.
|
387
|
-
|
388
|
-
```
|
389
|
-
.all # [header, rows]
|
390
|
-
.rows # rows returned by google analytics
|
391
|
-
.header # header of data, (["ga:day", "ga:month", "ga:visitis"])
|
392
|
-
.count # number of rows
|
393
|
-
.each # each as you expected, (|data| or |index, data|)
|
394
|
-
```
|
395
|
-
|
396
|
-
### Clear stored data and fetch again
|
397
|
-
|
398
|
-
If you add some parameters clear is called automatically.
|
399
|
-
|
400
|
-
clear: `.clear`<br>
|
401
|
-
|
402
|
-
clear and fetch new:<br>
|
403
|
-
`.all!`, `.rows!`, `.header!`, `.count!`, `.each!`<br>
|
404
|
-
|
405
|
-
Examples
|
406
|
-
--------
|
407
|
-
|
408
|
-
```ruby
|
409
|
-
# Start session
|
410
|
-
# =============
|
411
|
-
|
412
|
-
# set configuration
|
413
|
-
GoogleApi.config.ga.client_cert_file = "privatekey.p12"
|
414
|
-
GoogleApi.config.ga.client_developer_email = "123456@developer.gserviceaccount.com"
|
415
|
-
|
416
|
-
# start session
|
417
|
-
GoogleApi::Ga::Session.login_by_cert!
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
# Get profile id
|
422
|
-
# ==============
|
423
|
-
|
424
|
-
# get profile id
|
425
|
-
id = GoogleApi::Ga::Profile.all.first.id
|
426
|
-
|
427
|
-
# set default id
|
428
|
-
GoogleApi::Ga.id(id)
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
# Starting session by line
|
433
|
-
# ========================
|
434
|
-
|
435
|
-
# First install launchy:
|
436
|
-
# gem install launchy
|
437
|
-
|
438
|
-
# callback_uri and port are optional - auto start server at localhost
|
439
|
-
GoogleApi::Ga::Session.login_by_line(callback_uri, port)
|
440
|
-
|
441
|
-
# This will do
|
442
|
-
# 1) create server
|
443
|
-
# 2) launch browser and redirect to google api
|
444
|
-
# 3) confirm and google api redirect to localhost
|
445
|
-
# 4) server get code and start session
|
446
|
-
# 5) close server - you are login
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
# Check session, error if not login
|
451
|
-
# =================================
|
452
|
-
|
453
|
-
GoogleApi::Ga::Session.check_session
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
# Management of accounts
|
458
|
-
# ======================
|
459
|
-
|
460
|
-
# all accounts
|
461
|
-
accounts = GoogleApi::Ga::Account.all
|
462
|
-
|
463
|
-
# webproperties for account
|
464
|
-
accounts.first.webproperties
|
465
|
-
|
466
|
-
# all webproperties
|
467
|
-
GoogleApi::Ga::Webproperty.all
|
468
|
-
|
469
|
-
# all profiles
|
470
|
-
GoogleApi::Ga::Profile.all
|
471
|
-
|
472
|
-
# all goal
|
473
|
-
GoogleApi::Ga::Goal.all
|
474
|
-
|
475
|
-
# all segment
|
476
|
-
GoogleApi::Ga::Segment.all
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
# Count of visitors between previous month and today
|
481
|
-
# ==================================================
|
482
|
-
|
483
|
-
GoogleApi::Ga::Data.from(-30).select(:visits).rows
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
# Count of visitors between previous month and today - 2, and cache it for 30 minutes
|
488
|
-
# ===================================================================================
|
489
|
-
|
490
|
-
GoogleApi::Ga::Data.from(-30).to(-2).select(:visits).cache(30).rows
|
491
|
-
|
492
|
-
|
493
|
-
|
494
|
-
# Visitors by day, month, year from Czech Republic. Browser is Firefox and Opera or Chrome
|
495
|
-
# ========================================================================================
|
496
|
-
|
497
|
-
GoogleApi::Ga::Data.from(-30).select(:visits).with(:day, :month, :year)
|
498
|
-
.sort(:year, :month, :day)
|
499
|
-
.where{(country == "Czech Republic") &
|
500
|
-
(browser == "Firefox") &
|
501
|
-
(browser == "Opera") |
|
502
|
-
(browser == "Chrome")}
|
503
|
-
.rows
|
504
|
-
# ----- OR -----
|
505
|
-
GoogleApi::Ga::Data.from(-30).select(:visits).with(:day, :month, :year)
|
506
|
-
.sort(:year, :month, :day)
|
507
|
-
.where("ga:country==Czech Republic;ga:browser==Firefox;ga:browser==Opera,ga:browser==Chrome")
|
508
|
-
.rows
|
509
|
-
```
|
data/lib/google_api.rb
CHANGED
data/lib/google_api/ga/data.rb
CHANGED
@@ -214,6 +214,8 @@ module GoogleApi
|
|
214
214
|
@parameters = nil
|
215
215
|
@data = nil
|
216
216
|
@all = nil
|
217
|
+
|
218
|
+
self
|
217
219
|
end
|
218
220
|
|
219
221
|
# Clear cache
|
@@ -223,9 +225,9 @@ module GoogleApi
|
|
223
225
|
end
|
224
226
|
|
225
227
|
# Add row!, header!, all!, count!. First clear and run normal method.
|
226
|
-
[:rows, :header, :all, :count].each do |
|
228
|
+
[:rows, :header, :all, :count].each do |name|
|
227
229
|
eval <<-METHOD
|
228
|
-
def #{
|
230
|
+
def #{name}!; clear; #{name}; end
|
229
231
|
METHOD
|
230
232
|
end
|
231
233
|
|
@@ -246,16 +248,20 @@ module GoogleApi
|
|
246
248
|
end
|
247
249
|
|
248
250
|
def each(&block)
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
251
|
+
case block.arity
|
252
|
+
# each
|
253
|
+
when 1
|
254
|
+
rows.each do |row|
|
255
|
+
yield(row)
|
256
|
+
end
|
257
|
+
|
258
|
+
# each with index
|
259
|
+
when 2
|
260
|
+
i = -1
|
261
|
+
rows.each do |row|
|
262
|
+
i += 1
|
263
|
+
yield(i, row)
|
264
|
+
end
|
259
265
|
end
|
260
266
|
end
|
261
267
|
|
@@ -2,9 +2,9 @@ module GoogleApi
|
|
2
2
|
module Ga
|
3
3
|
class Goal < Management
|
4
4
|
|
5
|
-
attr_reader :
|
6
|
-
attr_reader :
|
7
|
-
attr_reader :
|
5
|
+
attr_reader :account_id
|
6
|
+
attr_reader :webproperty_id
|
7
|
+
attr_reader :profile_id
|
8
8
|
attr_reader :value
|
9
9
|
attr_reader :active
|
10
10
|
attr_reader :type
|
@@ -25,13 +25,13 @@ module GoogleApi
|
|
25
25
|
def refresh
|
26
26
|
@profile = nil
|
27
27
|
|
28
|
-
set( Goal.get({ accountId: @
|
28
|
+
set( Goal.get({ accountId: @account_id, webPropertyId: @webproperty_id, profileId: @profile_id, goalId: @id }).first )
|
29
29
|
|
30
30
|
return true
|
31
31
|
end
|
32
32
|
|
33
33
|
def profile
|
34
|
-
@profile ||= Profile.find(@
|
34
|
+
@profile ||= Profile.find(@profile_id)
|
35
35
|
end
|
36
36
|
|
37
37
|
private
|
@@ -41,14 +41,14 @@ module GoogleApi
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def set(goal)
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
44
|
+
self.account_id = goal['accountId']
|
45
|
+
self.webproperty_id = goal['webPropertyId']
|
46
|
+
self.profile_id = goal['profileId']
|
47
|
+
self.value = goal['value']
|
48
|
+
self.active = goal['active']
|
49
|
+
self.type = goal['type']
|
50
|
+
|
51
|
+
self.goal = goal[camelize(@type) + 'Details']
|
52
52
|
|
53
53
|
super(goal)
|
54
54
|
end
|
@@ -25,10 +25,10 @@ module GoogleApi
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def set(values)
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
28
|
+
self.id = values['id']
|
29
|
+
self.name = values['name']
|
30
|
+
self.created = values['created']
|
31
|
+
self.updated = values['updated']
|
32
32
|
end
|
33
33
|
|
34
34
|
end
|
@@ -2,8 +2,8 @@ module GoogleApi
|
|
2
2
|
module Ga
|
3
3
|
class Profile < Management
|
4
4
|
|
5
|
-
attr_reader :
|
6
|
-
attr_reader :
|
5
|
+
attr_reader :account_id
|
6
|
+
attr_reader :webproperty_id
|
7
7
|
attr_reader :currency
|
8
8
|
attr_reader :timezone
|
9
9
|
|
@@ -23,27 +23,19 @@ module GoogleApi
|
|
23
23
|
@webproperty = nil
|
24
24
|
@goals = nil
|
25
25
|
|
26
|
-
set( Profile.get({ accountId: @
|
26
|
+
set( Profile.get({ accountId: @account_id, webPropertyId: @webproperty_id, profileId: @id }).first )
|
27
27
|
|
28
28
|
return true
|
29
29
|
end
|
30
30
|
|
31
31
|
def webproperty
|
32
|
-
@webproperty ||= Webproperty.find(@
|
32
|
+
@webproperty ||= Webproperty.find(@webproperty_id)
|
33
33
|
end
|
34
34
|
|
35
35
|
def goals
|
36
|
-
@goals ||= Goal.all(@
|
36
|
+
@goals ||= Goal.all(@account_id, @webproperty_id, @id)
|
37
37
|
end
|
38
38
|
|
39
|
-
# def get(parameters, start_date = prev_month, end_date = now, expire = nil)
|
40
|
-
# Data.get(@id, parameters, start_date, end_date, expire)
|
41
|
-
# end
|
42
|
-
|
43
|
-
# def get!(parameters, start_date = prev_month, end_date = now)
|
44
|
-
# Data.get!(@id, parameters, start_date, end_date)
|
45
|
-
# end
|
46
|
-
|
47
39
|
private
|
48
40
|
|
49
41
|
def self.get(parameters = nil)
|
@@ -51,10 +43,10 @@ module GoogleApi
|
|
51
43
|
end
|
52
44
|
|
53
45
|
def set(profile)
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
46
|
+
self.account_id = profile['accountId']
|
47
|
+
self.webproperty_id = profile['webPropertyId']
|
48
|
+
self.currency = profile['currency']
|
49
|
+
self.timezone = profile['timezone']
|
58
50
|
|
59
51
|
super(profile)
|
60
52
|
end
|
@@ -2,7 +2,7 @@ module GoogleApi
|
|
2
2
|
module Ga
|
3
3
|
class Segment < Management
|
4
4
|
|
5
|
-
attr_accessor :
|
5
|
+
attr_accessor :segment_id
|
6
6
|
attr_accessor :definition
|
7
7
|
|
8
8
|
def initialize(segment)
|
@@ -30,8 +30,8 @@ module GoogleApi
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def set(segment)
|
33
|
-
|
34
|
-
|
33
|
+
self.segment_id = segment['segmentId']
|
34
|
+
self.definition = segment['definition']
|
35
35
|
|
36
36
|
super(segment)
|
37
37
|
end
|
@@ -2,8 +2,8 @@ module GoogleApi
|
|
2
2
|
module Ga
|
3
3
|
class Webproperty < Management
|
4
4
|
|
5
|
-
attr_reader :
|
6
|
-
attr_reader :
|
5
|
+
attr_reader :account_id
|
6
|
+
attr_reader :website_url
|
7
7
|
|
8
8
|
def initialize(webproperty)
|
9
9
|
set(webproperty)
|
@@ -21,17 +21,17 @@ module GoogleApi
|
|
21
21
|
@account = nil
|
22
22
|
@profiles = nil
|
23
23
|
|
24
|
-
set( Webproperty.get({ accountId: @
|
24
|
+
set( Webproperty.get({ accountId: @account_id, webPropertyId: @id }).first )
|
25
25
|
|
26
26
|
return true
|
27
27
|
end
|
28
28
|
|
29
29
|
def account
|
30
|
-
@account ||= Account.find(@
|
30
|
+
@account ||= Account.find(@account_id)
|
31
31
|
end
|
32
32
|
|
33
33
|
def profiles
|
34
|
-
@profiles ||= Profile.all(@
|
34
|
+
@profiles ||= Profile.all(@account_id, @id)
|
35
35
|
end
|
36
36
|
|
37
37
|
private
|
@@ -41,8 +41,8 @@ module GoogleApi
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def set(webproperty)
|
44
|
-
|
45
|
-
|
44
|
+
self.account_id = webproperty['accountId']
|
45
|
+
self.website_url = webproperty['websiteUrl']
|
46
46
|
|
47
47
|
super(webproperty)
|
48
48
|
end
|
@@ -3,14 +3,16 @@ module GoogleApi
|
|
3
3
|
|
4
4
|
CONFIGURATION = {}
|
5
5
|
|
6
|
+
URLSHORTENER_URI = 'https://www.googleapis.com/urlshortener/v1/url'
|
7
|
+
|
6
8
|
# Session
|
7
9
|
autoload :Session, 'google_api/shorten/session'
|
8
10
|
|
9
11
|
# Url
|
10
|
-
autoload :Url,
|
12
|
+
autoload :Url, 'google_api/shorten/url/url'
|
11
13
|
autoload :Insert, 'google_api/shorten/url/insert'
|
12
|
-
autoload :List,
|
13
|
-
autoload :Get,
|
14
|
+
autoload :List, 'google_api/shorten/url/list'
|
15
|
+
autoload :Get, 'google_api/shorten/url/get'
|
14
16
|
|
15
17
|
def self.insert(url)
|
16
18
|
Insert.new(url)
|
@@ -16,17 +16,34 @@ module GoogleApi
|
|
16
16
|
raise GoogleApi::ShortenError, "Invalid projection. Must be #{PROJECTION_LIST.join(',')}."
|
17
17
|
end
|
18
18
|
|
19
|
-
get
|
19
|
+
@data = _session.check_session ? get : get_without_login
|
20
20
|
end
|
21
21
|
|
22
22
|
private
|
23
23
|
|
24
24
|
def get
|
25
|
-
|
26
|
-
|
27
|
-
|
25
|
+
JSON.parse(_session.client.execute( api_method: _session.api.url.get,
|
26
|
+
parameters: { shortUrl: @short_url,
|
27
|
+
projection: @projection } ).body)
|
28
28
|
end
|
29
|
-
|
29
|
+
|
30
|
+
def get_without_login
|
31
|
+
require 'net/http'
|
32
|
+
require 'json'
|
33
|
+
|
34
|
+
uri = URI(Shorten::URLSHORTENER_URI)
|
35
|
+
uri.query = URI.encode_www_form({ shortUrl: @short_url,
|
36
|
+
projection: @projection })
|
37
|
+
|
38
|
+
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
|
39
|
+
req = Net::HTTP::Get.new(uri.request_uri)
|
40
|
+
|
41
|
+
http.request(req)
|
42
|
+
end
|
43
|
+
|
44
|
+
JSON.parse(res.body)
|
45
|
+
end
|
46
|
+
|
30
47
|
end
|
31
48
|
end
|
32
49
|
end
|
@@ -8,7 +8,7 @@ module GoogleApi
|
|
8
8
|
def initialize(long_url)
|
9
9
|
@long_url = long_url
|
10
10
|
|
11
|
-
get
|
11
|
+
@short_url = _session.check_session ? get : get_without_login
|
12
12
|
end
|
13
13
|
|
14
14
|
def details(projection = 'FULL')
|
@@ -18,9 +18,26 @@ module GoogleApi
|
|
18
18
|
private
|
19
19
|
|
20
20
|
def get
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
_session.client.execute( api_method: _session.api.url.insert,
|
22
|
+
body: { longUrl: @long_url }.to_json,
|
23
|
+
headers: {'Content-Type' => 'application/json'} ).data.id
|
24
|
+
end
|
25
|
+
|
26
|
+
def get_without_login
|
27
|
+
require 'net/http'
|
28
|
+
require 'json'
|
29
|
+
|
30
|
+
uri = URI(Shorten::URLSHORTENER_URI)
|
31
|
+
|
32
|
+
req = Net::HTTP::Post.new(uri.path)
|
33
|
+
req.body = {longUrl: @long_url}.to_json
|
34
|
+
req.content_type = 'application/json'
|
35
|
+
|
36
|
+
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
|
37
|
+
http.request(req)
|
38
|
+
end
|
39
|
+
|
40
|
+
JSON.parse(res.body)['id']
|
24
41
|
end
|
25
42
|
|
26
43
|
end
|
@@ -3,7 +3,7 @@ module GoogleApi
|
|
3
3
|
class List < Url
|
4
4
|
|
5
5
|
def initialize
|
6
|
-
get
|
6
|
+
@data = get
|
7
7
|
end
|
8
8
|
|
9
9
|
def count
|
@@ -17,8 +17,10 @@ module GoogleApi
|
|
17
17
|
private
|
18
18
|
|
19
19
|
def get
|
20
|
-
|
21
|
-
|
20
|
+
JSON.parse(
|
21
|
+
_session.client.execute( api_method: _session.api.url.list,
|
22
|
+
parameters: { projection: 'FULL' } ).body
|
23
|
+
)
|
22
24
|
end
|
23
25
|
|
24
26
|
end
|
data/lib/google_api/version.rb
CHANGED
File without changes
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe "GoogleApi::Configuration" do
|
4
|
+
it "Dsl" do
|
5
|
+
GoogleApi.configure do
|
6
|
+
client_id "1"
|
7
|
+
client_secret "2"
|
8
|
+
client_developer_email "3"
|
9
|
+
|
10
|
+
ga do
|
11
|
+
client_id "4"
|
12
|
+
client_secret "5"
|
13
|
+
client_developer_email "6"
|
14
|
+
end
|
15
|
+
|
16
|
+
shorten do
|
17
|
+
client_id "7"
|
18
|
+
client_secret "8"
|
19
|
+
client_developer_email "9"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
GoogleApi.config.client_id.should eq("1")
|
24
|
+
GoogleApi.config.client_secret.should eq("2")
|
25
|
+
GoogleApi.config.client_developer_email.should eq("3")
|
26
|
+
|
27
|
+
GoogleApi.config.ga.client_id.should eq("4")
|
28
|
+
GoogleApi.config.ga.client_secret.should eq("5")
|
29
|
+
GoogleApi.config.ga.client_developer_email.should eq("6")
|
30
|
+
|
31
|
+
GoogleApi.config.shorten.client_id.should eq("7")
|
32
|
+
GoogleApi.config.shorten.client_secret.should eq("8")
|
33
|
+
GoogleApi.config.shorten.client_developer_email.should eq("9")
|
34
|
+
end
|
35
|
+
|
36
|
+
it "Classic" do
|
37
|
+
GoogleApi.configure do |config|
|
38
|
+
config.client_id "1"
|
39
|
+
config.client_secret "2"
|
40
|
+
config.client_developer_email "3"
|
41
|
+
|
42
|
+
config.ga do |ga_config|
|
43
|
+
ga_config.client_id "4"
|
44
|
+
ga_config.client_secret "5"
|
45
|
+
ga_config.client_developer_email "6"
|
46
|
+
end
|
47
|
+
|
48
|
+
config.shorten do |shorten_config|
|
49
|
+
shorten_config.client_id "7"
|
50
|
+
shorten_config.client_secret "8"
|
51
|
+
shorten_config.client_developer_email "9"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
GoogleApi.config.client_id.should eq("1")
|
56
|
+
GoogleApi.config.client_secret.should eq("2")
|
57
|
+
GoogleApi.config.client_developer_email.should eq("3")
|
58
|
+
|
59
|
+
GoogleApi.config.ga.client_id.should eq("4")
|
60
|
+
GoogleApi.config.ga.client_secret.should eq("5")
|
61
|
+
GoogleApi.config.ga.client_developer_email.should eq("6")
|
62
|
+
|
63
|
+
GoogleApi.config.shorten.client_id.should eq("7")
|
64
|
+
GoogleApi.config.shorten.client_secret.should eq("8")
|
65
|
+
GoogleApi.config.shorten.client_developer_email.should eq("9")
|
66
|
+
end
|
67
|
+
|
68
|
+
it "Minimal" do
|
69
|
+
GoogleApi.config.client_id = "1"
|
70
|
+
GoogleApi.config.client_secret = "2"
|
71
|
+
GoogleApi.config.client_developer_email = "3"
|
72
|
+
|
73
|
+
GoogleApi.config.ga.client_id = "4"
|
74
|
+
GoogleApi.config.ga.client_secret = "5"
|
75
|
+
GoogleApi.config.ga.client_developer_email = "6"
|
76
|
+
|
77
|
+
GoogleApi.config.shorten.client_id = "7"
|
78
|
+
GoogleApi.config.shorten.client_secret = "8"
|
79
|
+
GoogleApi.config.shorten.client_developer_email = "9"
|
80
|
+
|
81
|
+
GoogleApi.config.client_id.should eq("1")
|
82
|
+
GoogleApi.config.client_secret.should eq("2")
|
83
|
+
GoogleApi.config.client_developer_email.should eq("3")
|
84
|
+
|
85
|
+
GoogleApi.config.ga.client_id.should eq("4")
|
86
|
+
GoogleApi.config.ga.client_secret.should eq("5")
|
87
|
+
GoogleApi.config.ga.client_developer_email.should eq("6")
|
88
|
+
|
89
|
+
GoogleApi.config.shorten.client_id.should eq("7")
|
90
|
+
GoogleApi.config.shorten.client_secret.should eq("8")
|
91
|
+
GoogleApi.config.shorten.client_developer_email.should eq("9")
|
92
|
+
end
|
93
|
+
end
|
@@ -87,14 +87,44 @@ describe "GoogleApi::Ga::Data" do
|
|
87
87
|
|
88
88
|
|
89
89
|
|
90
|
-
#
|
90
|
+
# Save parameters
|
91
|
+
# -------------------------------------------------------------------------------------------------
|
92
|
+
it "save parameters" do
|
93
|
+
@data = @data.id(1)
|
94
|
+
.from(Date.today)
|
95
|
+
.to(Date.today)
|
96
|
+
.select(:visits)
|
97
|
+
.with(:day, :month, "ga:year")
|
98
|
+
.where("country==Czech Republic")
|
99
|
+
.offset(1)
|
100
|
+
.limit(1)
|
101
|
+
|
102
|
+
@data.id.should eql(1)
|
103
|
+
@data.from.should eql(Date.today)
|
104
|
+
@data.to.should eql(Date.today)
|
105
|
+
@data.select.should eql(["ga:visits"])
|
106
|
+
@data.with.should eql(["ga:day", "ga:month", "ga:year"])
|
107
|
+
@data.where.should eql("country==Czech Republic")
|
108
|
+
@data.offset.should eql(1)
|
109
|
+
@data.limit.should eql(1)
|
110
|
+
end
|
111
|
+
|
112
|
+
|
113
|
+
|
114
|
+
# Date add
|
91
115
|
# -------------------------------------------------------------------------------------------------
|
92
116
|
it "date add and sub" do
|
93
117
|
@data = @data.start_date(+30).end_date(+30)
|
94
118
|
|
95
119
|
@data.start_date.should eql(Date.today + 30)
|
96
120
|
@data.end_date.should eql(Date.today + 30)
|
121
|
+
end
|
122
|
+
|
97
123
|
|
124
|
+
|
125
|
+
# Date sub
|
126
|
+
# -------------------------------------------------------------------------------------------------
|
127
|
+
it "date add and sub" do
|
98
128
|
@data = @data.start_date(Date.today).end_date(Date.today)
|
99
129
|
@data = @data.start_date(-30).end_date(-30)
|
100
130
|
|
File without changes
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe "GoogleApi::Shorten" do
|
4
|
+
it "Get." do
|
5
|
+
get = GoogleApi::Shorten.get('http://goo.gl/dOpuw')
|
6
|
+
|
7
|
+
get.data['id'].should eql('http://goo.gl/dOpuw')
|
8
|
+
get.data['longUrl'].should eql('https://github.com/ondra-m/google_api')
|
9
|
+
end
|
10
|
+
|
11
|
+
it "Insert short_url is nil if long_url isn't right url." do
|
12
|
+
insert = GoogleApi::Shorten.insert('google_api')
|
13
|
+
|
14
|
+
insert.short_url.should eql(nil)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "List shour raise error." do
|
18
|
+
lambda { GoogleApi::Shorten.list }.should raise_error(GoogleApi::SessionError)
|
19
|
+
end
|
20
|
+
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.1.0
|
5
|
-
prerelease:
|
4
|
+
version: 1.1.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-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: google-api-client
|
@@ -78,7 +78,6 @@ files:
|
|
78
78
|
- lib/google_api.rb
|
79
79
|
- lib/google_api/cache.rb
|
80
80
|
- lib/google_api/configuration.rb
|
81
|
-
- lib/google_api/core_ext/hash.rb
|
82
81
|
- lib/google_api/core_ext/string.rb
|
83
82
|
- lib/google_api/ga/data.rb
|
84
83
|
- lib/google_api/ga/data/data_dsl.rb
|
@@ -101,10 +100,11 @@ files:
|
|
101
100
|
- lib/google_api/shorten/url/list.rb
|
102
101
|
- lib/google_api/shorten/url/url.rb
|
103
102
|
- lib/google_api/version.rb
|
104
|
-
- spec/lib/
|
105
|
-
- spec/lib/
|
106
|
-
- spec/lib/
|
107
|
-
- spec/lib/
|
103
|
+
- spec/lib/cache_spec.rb
|
104
|
+
- spec/lib/configuration_spec.rb
|
105
|
+
- spec/lib/ga_data_spec.rb
|
106
|
+
- spec/lib/ga_spec.rb
|
107
|
+
- spec/lib/shorten_spec.rb
|
108
108
|
- spec/spec_helper.rb
|
109
109
|
homepage: https://github.com/ondra-m/google_api
|
110
110
|
licenses: []
|
@@ -121,9 +121,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
121
121
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
122
122
|
none: false
|
123
123
|
requirements:
|
124
|
-
- - ! '
|
124
|
+
- - ! '>='
|
125
125
|
- !ruby/object:Gem::Version
|
126
|
-
version:
|
126
|
+
version: '0'
|
127
127
|
requirements: []
|
128
128
|
rubyforge_project:
|
129
129
|
rubygems_version: 1.8.23
|
@@ -131,9 +131,10 @@ signing_key:
|
|
131
131
|
specification_version: 3
|
132
132
|
summary: Simple Google Api. Include google analytics, url shortener.
|
133
133
|
test_files:
|
134
|
-
- spec/lib/
|
135
|
-
- spec/lib/
|
136
|
-
- spec/lib/
|
137
|
-
- spec/lib/
|
134
|
+
- spec/lib/cache_spec.rb
|
135
|
+
- spec/lib/configuration_spec.rb
|
136
|
+
- spec/lib/ga_data_spec.rb
|
137
|
+
- spec/lib/ga_spec.rb
|
138
|
+
- spec/lib/shorten_spec.rb
|
138
139
|
- spec/spec_helper.rb
|
139
140
|
has_rdoc:
|
data/spec/lib/google_api_spec.rb
DELETED
@@ -1,61 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe "GoogleApi::Configuration" do
|
4
|
-
it "Setting is right." do
|
5
|
-
GoogleApi.configure do
|
6
|
-
client_id "1"
|
7
|
-
client_secret "2"
|
8
|
-
client_developer_email "3"
|
9
|
-
|
10
|
-
ga do
|
11
|
-
client_id "4"
|
12
|
-
client_secret "5"
|
13
|
-
client_developer_email "6"
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
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")
|
20
|
-
|
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")
|
24
|
-
|
25
|
-
GoogleApi.configure do |config|
|
26
|
-
config.client_id "7"
|
27
|
-
config.client_secret "8"
|
28
|
-
config.client_developer_email "9"
|
29
|
-
|
30
|
-
config.ga do |ga_config|
|
31
|
-
ga_config.client_id "10"
|
32
|
-
ga_config.client_secret "11"
|
33
|
-
ga_config.client_developer_email "12"
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
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")
|
40
|
-
|
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")
|
44
|
-
|
45
|
-
GoogleApi.config.client_id = "13"
|
46
|
-
GoogleApi.config.client_secret = "14"
|
47
|
-
GoogleApi.config.client_developer_email = "15"
|
48
|
-
|
49
|
-
GoogleApi.config.ga.client_id = "16"
|
50
|
-
GoogleApi.config.ga.client_secret = "17"
|
51
|
-
GoogleApi.config.ga.client_developer_email = "18"
|
52
|
-
|
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")
|
56
|
-
|
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")
|
60
|
-
end
|
61
|
-
end
|