google-ads-common 0.12.0 → 0.12.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.
- data/ChangeLog +5 -2
- data/lib/ads_common/auth/oauth2_handler.rb +4 -4
- data/lib/ads_common/auth/oauth2_service_account_handler.rb +40 -21
- data/lib/ads_common/env_check.rb +3 -3
- data/lib/ads_common/errors.rb +1 -1
- data/lib/ads_common/version.rb +1 -1
- data/test/test_oauth2_service_account_handler.rb +61 -0
- metadata +57 -43
- checksums.yaml +0 -7
data/ChangeLog
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
0.12.1:
|
|
2
|
+
- Adding support for JSON keyfiles for service accounts.
|
|
3
|
+
|
|
1
4
|
0.12.0:
|
|
2
5
|
- Require Ruby version 2.0 or higher from now on. It is recommended to use
|
|
3
6
|
Ruby version 2.1 or higher.
|
|
@@ -62,7 +65,7 @@
|
|
|
62
65
|
|
|
63
66
|
0.9.0:
|
|
64
67
|
- Switched to Signet OAuth implementation.
|
|
65
|
-
- Removed deprecated OAuth1.0a scheme, please use OAuth2
|
|
68
|
+
- Removed deprecated OAuth1.0a scheme, please use OAuth2 instead.
|
|
66
69
|
- Support for JWT authorization (OAuth2 service accounts).
|
|
67
70
|
|
|
68
71
|
0.8.2:
|
|
@@ -78,7 +81,7 @@
|
|
|
78
81
|
- Compatibility with Savon -> 1.0.0 (not backward-compatible).
|
|
79
82
|
- Now require HTTPI ~> 1.0.0.
|
|
80
83
|
- HttpClient is no longer explicitely required.
|
|
81
|
-
- Support for OAuth2
|
|
84
|
+
- Support for OAuth2 authorization method.
|
|
82
85
|
|
|
83
86
|
0.7.2:
|
|
84
87
|
- Compatibility with savon-0.9.10 (not backward-compatible).
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
# See the License for the specific language governing permissions and
|
|
16
16
|
# limitations under the License.
|
|
17
17
|
#
|
|
18
|
-
# This module manages OAuth2
|
|
18
|
+
# This module manages OAuth2 authentication.
|
|
19
19
|
|
|
20
20
|
require 'time'
|
|
21
21
|
|
|
@@ -28,7 +28,7 @@ require 'ads_common/errors'
|
|
|
28
28
|
module AdsCommon
|
|
29
29
|
module Auth
|
|
30
30
|
|
|
31
|
-
# Credentials class to handle OAuth2
|
|
31
|
+
# Credentials class to handle OAuth2 authentication.
|
|
32
32
|
class OAuth2Handler < AdsCommon::Auth::BaseHandler
|
|
33
33
|
OAUTH2_CONFIG = {
|
|
34
34
|
:authorization_uri =>
|
|
@@ -67,7 +67,7 @@ module AdsCommon
|
|
|
67
67
|
raise error
|
|
68
68
|
end
|
|
69
69
|
|
|
70
|
-
# Generates auth string for OAuth2
|
|
70
|
+
# Generates auth string for OAuth2 method of authentication.
|
|
71
71
|
#
|
|
72
72
|
# Args:
|
|
73
73
|
# - credentials: credentials set for authorization
|
|
@@ -142,7 +142,7 @@ module AdsCommon
|
|
|
142
142
|
end
|
|
143
143
|
|
|
144
144
|
# Auxiliary method to generate an authentication token for logging via
|
|
145
|
-
# the OAuth2
|
|
145
|
+
# the OAuth2 API.
|
|
146
146
|
#
|
|
147
147
|
# Args:
|
|
148
148
|
# - credentials: a hash with the credentials for the account being
|
|
@@ -15,10 +15,11 @@
|
|
|
15
15
|
# See the License for the specific language governing permissions and
|
|
16
16
|
# limitations under the License.
|
|
17
17
|
#
|
|
18
|
-
# This module manages OAuth2
|
|
18
|
+
# This module manages OAuth2 service account authentication.
|
|
19
19
|
|
|
20
20
|
require 'faraday'
|
|
21
21
|
require 'signet/oauth_2/client'
|
|
22
|
+
require 'json'
|
|
22
23
|
|
|
23
24
|
require 'ads_common/auth/base_handler'
|
|
24
25
|
require 'ads_common/errors'
|
|
@@ -26,7 +27,7 @@ require 'ads_common/errors'
|
|
|
26
27
|
module AdsCommon
|
|
27
28
|
module Auth
|
|
28
29
|
|
|
29
|
-
# Credentials class to handle OAuth2
|
|
30
|
+
# Credentials class to handle OAuth2 authentication.
|
|
30
31
|
class OAuth2ServiceAccountHandler < AdsCommon::Auth::BaseHandler
|
|
31
32
|
|
|
32
33
|
OAUTH2_CONFIG = {
|
|
@@ -62,7 +63,7 @@ module AdsCommon
|
|
|
62
63
|
raise error
|
|
63
64
|
end
|
|
64
65
|
|
|
65
|
-
# Generates auth string for OAuth2
|
|
66
|
+
# Generates auth string for OAuth2 service account method of
|
|
66
67
|
# authentication.
|
|
67
68
|
#
|
|
68
69
|
# Args:
|
|
@@ -113,24 +114,40 @@ module AdsCommon
|
|
|
113
114
|
raise AdsCommon::Errors::AuthError, 'No credentials supplied.'
|
|
114
115
|
end
|
|
115
116
|
|
|
116
|
-
if credentials[:
|
|
117
|
+
if credentials[:oauth2_key].nil? && credentials[:oauth2_keyfile].nil?
|
|
117
118
|
raise AdsCommon::Errors::AuthError,
|
|
118
|
-
'
|
|
119
|
+
'Either key or key file must be provided for OAuth2 service account.'
|
|
119
120
|
end
|
|
120
121
|
|
|
121
|
-
if credentials[:
|
|
122
|
+
if credentials[:oauth2_key] && credentials[:oauth2_keyfile]
|
|
122
123
|
raise AdsCommon::Errors::AuthError,
|
|
123
|
-
'
|
|
124
|
+
'Both service account key and key file provided, only one can be used.'
|
|
124
125
|
end
|
|
125
126
|
|
|
126
|
-
|
|
127
|
+
p12 = true
|
|
128
|
+
if credentials[:oauth2_keyfile]
|
|
129
|
+
file_name = credentials[:oauth2_keyfile]
|
|
130
|
+
if File.file?(file_name)
|
|
131
|
+
unless file_name.end_with?('.p12') || file_name.end_with?('.json')
|
|
132
|
+
raise AdsCommon::Errors::AuthError,
|
|
133
|
+
"Key file '%s' must be either a .p12 or .json file." %
|
|
134
|
+
file_name
|
|
135
|
+
end
|
|
136
|
+
p12 = false if file_name.end_with?('.json')
|
|
137
|
+
else
|
|
138
|
+
raise AdsCommon::Errors::AuthError,
|
|
139
|
+
"Key file '%s' does not exist or not a file." % file_name
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
if credentials[:oauth2_issuer].nil? && p12
|
|
127
144
|
raise AdsCommon::Errors::AuthError,
|
|
128
|
-
'
|
|
145
|
+
'Issuer is not included in the credentials.'
|
|
129
146
|
end
|
|
130
147
|
|
|
131
|
-
if credentials[:
|
|
148
|
+
if credentials[:oauth2_secret].nil? && p12
|
|
132
149
|
raise AdsCommon::Errors::AuthError,
|
|
133
|
-
'
|
|
150
|
+
'Key secret is not included in the credentials.'
|
|
134
151
|
end
|
|
135
152
|
|
|
136
153
|
if credentials[:oauth2_key] &&
|
|
@@ -138,17 +155,10 @@ module AdsCommon
|
|
|
138
155
|
raise AdsCommon::Errors::AuthError,
|
|
139
156
|
'OAuth2 service account key provided must be of type OpenSSL::PKey::RSA.'
|
|
140
157
|
end
|
|
141
|
-
|
|
142
|
-
if credentials[:oauth2_keyfile] &&
|
|
143
|
-
!File.file?(credentials[:oauth2_keyfile])
|
|
144
|
-
raise AdsCommon::Errors::AuthError,
|
|
145
|
-
"Key file '%s' does not exist or not a file." %
|
|
146
|
-
credentials[:oauth2_keyfile]
|
|
147
|
-
end
|
|
148
158
|
end
|
|
149
159
|
|
|
150
160
|
# Auxiliary method to generate an authentication token for logging via
|
|
151
|
-
# the OAuth2
|
|
161
|
+
# the OAuth2 API.
|
|
152
162
|
#
|
|
153
163
|
# Args:
|
|
154
164
|
# - credentials: a hash with the credentials for the account being
|
|
@@ -185,9 +195,18 @@ module AdsCommon
|
|
|
185
195
|
def load_oauth2_service_account_credentials(credentials)
|
|
186
196
|
return credentials unless credentials.include?(:oauth2_keyfile)
|
|
187
197
|
key_file = File.read(credentials[:oauth2_keyfile])
|
|
188
|
-
|
|
189
|
-
|
|
198
|
+
key = nil
|
|
199
|
+
issuer = nil
|
|
200
|
+
if credentials[:oauth2_keyfile].end_with?('.p12')
|
|
201
|
+
key_secret = credentials[:oauth2_secret]
|
|
202
|
+
key = OpenSSL::PKCS12.new(key_file, key_secret).key
|
|
203
|
+
else
|
|
204
|
+
key_file_hash = JSON.parse(key_file, :symbolize_names => true)
|
|
205
|
+
key = OpenSSL::PKey::RSA.new(key_file_hash[:private_key])
|
|
206
|
+
issuer = key_file_hash[:client_email]
|
|
207
|
+
end
|
|
190
208
|
result = credentials.merge({:oauth2_key => key})
|
|
209
|
+
result[:oauth2_issuer] = issuer unless issuer.nil?
|
|
191
210
|
result.delete(:oauth2_keyfile)
|
|
192
211
|
return result
|
|
193
212
|
end
|
data/lib/ads_common/env_check.rb
CHANGED
|
@@ -19,10 +19,10 @@
|
|
|
19
19
|
|
|
20
20
|
require 'ads_common/errors'
|
|
21
21
|
|
|
22
|
-
MIN_RUBY_VERSION = Gem::Version.new(2.0)
|
|
23
|
-
MIN_RUBY_RECOMMENDED_VERSION = Gem::Version.new(2.1)
|
|
22
|
+
MIN_RUBY_VERSION = Gem::Version.new('2.0')
|
|
23
|
+
MIN_RUBY_RECOMMENDED_VERSION = Gem::Version.new('2.1')
|
|
24
24
|
|
|
25
|
-
if Gem::Version.new(RUBY_VERSION) < MIN_RUBY_VERSION
|
|
25
|
+
if Gem::Version.new(RUBY_VERSION.dup()) < MIN_RUBY_VERSION
|
|
26
26
|
raise AdsCommon::Errors::VersionError,
|
|
27
27
|
'Unsupported Ruby version %s. Upgrade to version %s or later' %
|
|
28
28
|
[RUBY_VERSION, MIN_RUBY_RECOMMENDED_VERSION]
|
data/lib/ads_common/errors.rb
CHANGED
data/lib/ads_common/version.rb
CHANGED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# Encoding: utf-8
|
|
3
|
+
#
|
|
4
|
+
# Copyright:: Copyright 2016, Google Inc. All Rights Reserved.
|
|
5
|
+
#
|
|
6
|
+
# License:: Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
# you may not use this file except in compliance with the License.
|
|
8
|
+
# You may obtain a copy of the License at
|
|
9
|
+
#
|
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
#
|
|
12
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
15
|
+
# implied.
|
|
16
|
+
# See the License for the specific language governing permissions and
|
|
17
|
+
# limitations under the License.
|
|
18
|
+
#
|
|
19
|
+
# Test OAuth2 service account authentication.
|
|
20
|
+
|
|
21
|
+
require 'tempfile'
|
|
22
|
+
|
|
23
|
+
require 'ads_common/auth/oauth2_service_account_handler'
|
|
24
|
+
require 'ads_common/config'
|
|
25
|
+
|
|
26
|
+
module AdsCommon
|
|
27
|
+
module Auth
|
|
28
|
+
class OAuth2ServiceAccountHandler
|
|
29
|
+
public :validate_credentials
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
class TestOAuthServiceAccount < Test::Unit::TestCase
|
|
35
|
+
def test_file_extension_check()
|
|
36
|
+
assert_nothing_raised do
|
|
37
|
+
validate_credentials(["test", ".json"])
|
|
38
|
+
end
|
|
39
|
+
assert_nothing_raised do
|
|
40
|
+
validate_credentials(["test", ".p12"])
|
|
41
|
+
end
|
|
42
|
+
assert_raise do
|
|
43
|
+
validate_credentials(["test", ".other"])
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def validate_credentials(filename)
|
|
48
|
+
file = Tempfile.new(filename)
|
|
49
|
+
credentials = {
|
|
50
|
+
:method => 'OAUTH2_SERVICE_ACCOUNT',
|
|
51
|
+
:oauth2_keyfile => file.path,
|
|
52
|
+
:oauth2_issuer => 'issuer',
|
|
53
|
+
:oauth2_secret => 'secret'
|
|
54
|
+
}
|
|
55
|
+
handler = AdsCommon::Auth::OAuth2ServiceAccountHandler.new(
|
|
56
|
+
AdsCommon::Config.new(), 'https://www.googleapis.com/auth/adwords')
|
|
57
|
+
handler.validate_credentials(credentials)
|
|
58
|
+
file.close
|
|
59
|
+
file.unlink
|
|
60
|
+
end
|
|
61
|
+
end
|
metadata
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: google-ads-common
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.12.
|
|
4
|
+
version: 0.12.1
|
|
5
|
+
prerelease:
|
|
5
6
|
platform: ruby
|
|
6
7
|
authors:
|
|
7
8
|
- Sergio Gomes
|
|
@@ -10,76 +11,86 @@ authors:
|
|
|
10
11
|
autorequire:
|
|
11
12
|
bindir: bin
|
|
12
13
|
cert_chain: []
|
|
13
|
-
date: 2016-
|
|
14
|
+
date: 2016-05-17 00:00:00.000000000 Z
|
|
14
15
|
dependencies:
|
|
15
16
|
- !ruby/object:Gem::Dependency
|
|
16
17
|
name: google-ads-savon
|
|
17
18
|
requirement: !ruby/object:Gem::Requirement
|
|
19
|
+
none: false
|
|
18
20
|
requirements:
|
|
19
|
-
- -
|
|
21
|
+
- - ~>
|
|
20
22
|
- !ruby/object:Gem::Version
|
|
21
23
|
version: 1.0.1
|
|
22
24
|
type: :runtime
|
|
23
25
|
prerelease: false
|
|
24
26
|
version_requirements: !ruby/object:Gem::Requirement
|
|
27
|
+
none: false
|
|
25
28
|
requirements:
|
|
26
|
-
- -
|
|
29
|
+
- - ~>
|
|
27
30
|
- !ruby/object:Gem::Version
|
|
28
31
|
version: 1.0.1
|
|
29
32
|
- !ruby/object:Gem::Dependency
|
|
30
33
|
name: httpi
|
|
31
34
|
requirement: !ruby/object:Gem::Requirement
|
|
35
|
+
none: false
|
|
32
36
|
requirements:
|
|
33
|
-
- -
|
|
37
|
+
- - ~>
|
|
34
38
|
- !ruby/object:Gem::Version
|
|
35
39
|
version: '2.3'
|
|
36
40
|
type: :runtime
|
|
37
41
|
prerelease: false
|
|
38
42
|
version_requirements: !ruby/object:Gem::Requirement
|
|
43
|
+
none: false
|
|
39
44
|
requirements:
|
|
40
|
-
- -
|
|
45
|
+
- - ~>
|
|
41
46
|
- !ruby/object:Gem::Version
|
|
42
47
|
version: '2.3'
|
|
43
48
|
- !ruby/object:Gem::Dependency
|
|
44
49
|
name: httpclient
|
|
45
50
|
requirement: !ruby/object:Gem::Requirement
|
|
51
|
+
none: false
|
|
46
52
|
requirements:
|
|
47
|
-
- -
|
|
53
|
+
- - ~>
|
|
48
54
|
- !ruby/object:Gem::Version
|
|
49
55
|
version: '2.7'
|
|
50
56
|
type: :runtime
|
|
51
57
|
prerelease: false
|
|
52
58
|
version_requirements: !ruby/object:Gem::Requirement
|
|
59
|
+
none: false
|
|
53
60
|
requirements:
|
|
54
|
-
- -
|
|
61
|
+
- - ~>
|
|
55
62
|
- !ruby/object:Gem::Version
|
|
56
63
|
version: '2.7'
|
|
57
64
|
- !ruby/object:Gem::Dependency
|
|
58
65
|
name: signet
|
|
59
66
|
requirement: !ruby/object:Gem::Requirement
|
|
67
|
+
none: false
|
|
60
68
|
requirements:
|
|
61
|
-
- -
|
|
69
|
+
- - ~>
|
|
62
70
|
- !ruby/object:Gem::Version
|
|
63
71
|
version: 0.7.0
|
|
64
72
|
type: :runtime
|
|
65
73
|
prerelease: false
|
|
66
74
|
version_requirements: !ruby/object:Gem::Requirement
|
|
75
|
+
none: false
|
|
67
76
|
requirements:
|
|
68
|
-
- -
|
|
77
|
+
- - ~>
|
|
69
78
|
- !ruby/object:Gem::Version
|
|
70
79
|
version: 0.7.0
|
|
71
80
|
- !ruby/object:Gem::Dependency
|
|
72
81
|
name: rake
|
|
73
82
|
requirement: !ruby/object:Gem::Requirement
|
|
83
|
+
none: false
|
|
74
84
|
requirements:
|
|
75
|
-
- -
|
|
85
|
+
- - ! '>='
|
|
76
86
|
- !ruby/object:Gem::Version
|
|
77
87
|
version: 10.4.2
|
|
78
88
|
type: :development
|
|
79
89
|
prerelease: false
|
|
80
90
|
version_requirements: !ruby/object:Gem::Requirement
|
|
91
|
+
none: false
|
|
81
92
|
requirements:
|
|
82
|
-
- -
|
|
93
|
+
- - ! '>='
|
|
83
94
|
- !ruby/object:Gem::Version
|
|
84
95
|
version: 10.4.2
|
|
85
96
|
description: Essential utilities shared by all Ads Ruby client libraries
|
|
@@ -89,72 +100,75 @@ executables: []
|
|
|
89
100
|
extensions: []
|
|
90
101
|
extra_rdoc_files: []
|
|
91
102
|
files:
|
|
92
|
-
- COPYING
|
|
93
|
-
- ChangeLog
|
|
94
|
-
- README.md
|
|
95
103
|
- lib/ads_common/api.rb
|
|
96
|
-
- lib/ads_common/
|
|
104
|
+
- lib/ads_common/version.rb
|
|
105
|
+
- lib/ads_common/errors.rb
|
|
106
|
+
- lib/ads_common/env_check.rb
|
|
97
107
|
- lib/ads_common/auth/base_handler.rb
|
|
98
|
-
- lib/ads_common/auth/oauth2_handler.rb
|
|
99
108
|
- lib/ads_common/auth/oauth2_service_account_handler.rb
|
|
100
|
-
- lib/ads_common/
|
|
101
|
-
- lib/ads_common/
|
|
109
|
+
- lib/ads_common/auth/oauth2_handler.rb
|
|
110
|
+
- lib/ads_common/credential_handler.rb
|
|
111
|
+
- lib/ads_common/api_config.rb
|
|
112
|
+
- lib/ads_common/utils.rb
|
|
113
|
+
- lib/ads_common/build/savon_service_generator.rb
|
|
102
114
|
- lib/ads_common/build/savon_registry.rb
|
|
103
115
|
- lib/ads_common/build/savon_registry_generator.rb
|
|
104
|
-
- lib/ads_common/build/
|
|
116
|
+
- lib/ads_common/build/savon_abstract_generator.rb
|
|
117
|
+
- lib/ads_common/build/savon_generator.rb
|
|
105
118
|
- lib/ads_common/config.rb
|
|
106
|
-
- lib/ads_common/credential_handler.rb
|
|
107
|
-
- lib/ads_common/env_check.rb
|
|
108
|
-
- lib/ads_common/errors.rb
|
|
109
|
-
- lib/ads_common/http.rb
|
|
110
119
|
- lib/ads_common/parameters_validator.rb
|
|
111
|
-
- lib/ads_common/results_extractor.rb
|
|
112
120
|
- lib/ads_common/savon_headers/base_header_handler.rb
|
|
113
121
|
- lib/ads_common/savon_headers/oauth_header_handler.rb
|
|
122
|
+
- lib/ads_common/results_extractor.rb
|
|
123
|
+
- lib/ads_common/http.rb
|
|
114
124
|
- lib/ads_common/savon_service.rb
|
|
115
|
-
-
|
|
116
|
-
- lib/ads_common/version.rb
|
|
117
|
-
- test/coverage.rb
|
|
125
|
+
- test/test_env.rb
|
|
118
126
|
- test/suite_unittests.rb
|
|
127
|
+
- test/coverage.rb
|
|
128
|
+
- test/test_results_extractor.rb
|
|
119
129
|
- test/test_config.rb
|
|
120
|
-
- test/
|
|
130
|
+
- test/test_utils.rb
|
|
121
131
|
- test/test_credential_handler.rb
|
|
122
|
-
- test/test_env.rb
|
|
123
132
|
- test/test_oauth2_handler.rb
|
|
124
|
-
- test/test_parameters_validator.rb
|
|
125
|
-
- test/test_results_extractor.rb
|
|
126
133
|
- test/test_savon_service.rb
|
|
127
|
-
- test/
|
|
134
|
+
- test/test_config.yml
|
|
135
|
+
- test/test_parameters_validator.rb
|
|
136
|
+
- test/test_oauth2_service_account_handler.rb
|
|
137
|
+
- COPYING
|
|
138
|
+
- README.md
|
|
139
|
+
- ChangeLog
|
|
128
140
|
homepage: https://github.com/googleads/google-api-ads-ruby
|
|
129
141
|
licenses:
|
|
130
142
|
- Apache-2.0
|
|
131
|
-
metadata: {}
|
|
132
143
|
post_install_message:
|
|
133
144
|
rdoc_options: []
|
|
134
145
|
require_paths:
|
|
135
146
|
- lib
|
|
136
147
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
148
|
+
none: false
|
|
137
149
|
requirements:
|
|
138
|
-
- -
|
|
150
|
+
- - ! '>='
|
|
139
151
|
- !ruby/object:Gem::Version
|
|
140
152
|
version: '0'
|
|
141
153
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
154
|
+
none: false
|
|
142
155
|
requirements:
|
|
143
|
-
- -
|
|
156
|
+
- - ! '>='
|
|
144
157
|
- !ruby/object:Gem::Version
|
|
145
158
|
version: 1.3.6
|
|
146
159
|
requirements: []
|
|
147
160
|
rubyforge_project: google-ads-common
|
|
148
|
-
rubygems_version:
|
|
161
|
+
rubygems_version: 1.8.23
|
|
149
162
|
signing_key:
|
|
150
|
-
specification_version:
|
|
163
|
+
specification_version: 3
|
|
151
164
|
summary: Common code for Google Ads APIs
|
|
152
165
|
test_files:
|
|
153
|
-
- test/
|
|
166
|
+
- test/test_env.rb
|
|
167
|
+
- test/test_results_extractor.rb
|
|
154
168
|
- test/test_config.rb
|
|
155
|
-
- test/test_credential_handler.rb
|
|
156
169
|
- test/test_utils.rb
|
|
157
|
-
- test/
|
|
170
|
+
- test/test_credential_handler.rb
|
|
158
171
|
- test/test_oauth2_handler.rb
|
|
159
|
-
- test/
|
|
160
|
-
- test/
|
|
172
|
+
- test/test_savon_service.rb
|
|
173
|
+
- test/test_parameters_validator.rb
|
|
174
|
+
- test/test_oauth2_service_account_handler.rb
|
checksums.yaml
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
SHA1:
|
|
3
|
-
metadata.gz: 92e8a7a26a88631f6109cecd9748a25907193e88
|
|
4
|
-
data.tar.gz: 115bedb52bd5a55003ffa3ed598ff4a72554df5f
|
|
5
|
-
SHA512:
|
|
6
|
-
metadata.gz: 0b78cdce163e1910a6e8152b3f7b323421d82a3e6b2c2c9200ead0cf43282cdd91ce3e9ba1b3535417399d4dde394bdcf0ce6d9aa4fae9cc453ad98ecacbba26
|
|
7
|
-
data.tar.gz: 5b104c82f29bd4f2031103b1e8897f2e408a5f7a20b03066e677c6787a5232a9d6c82d6c320b77e5481abe0b5a41a1331175f1b0b11d0dda1031fb30707ac75b
|