google-ads-common 0.14.0 → 1.0.3
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 +5 -5
- data/COPYING +0 -0
- data/ChangeLog +22 -0
- data/README.md +1 -1
- data/lib/ads_common/api.rb +11 -21
- data/lib/ads_common/api_config.rb +10 -38
- data/lib/ads_common/auth/base_handler.rb +0 -0
- data/lib/ads_common/auth/oauth2_handler.rb +4 -0
- data/lib/ads_common/auth/oauth2_service_account_handler.rb +0 -0
- data/lib/ads_common/build/savon_abstract_generator.rb +0 -0
- data/lib/ads_common/build/savon_generator.rb +0 -0
- data/lib/ads_common/build/savon_registry.rb +19 -0
- data/lib/ads_common/build/savon_registry_generator.rb +0 -0
- data/lib/ads_common/build/savon_service_generator.rb +0 -0
- data/lib/ads_common/config.rb +0 -0
- data/lib/ads_common/credential_handler.rb +0 -0
- data/lib/ads_common/env_check.rb +0 -0
- data/lib/ads_common/errors.rb +0 -0
- data/lib/ads_common/http.rb +4 -0
- data/lib/ads_common/parameters_validator.rb +0 -0
- data/lib/ads_common/results_extractor.rb +0 -0
- data/lib/ads_common/savon_headers/base_header_handler.rb +0 -0
- data/lib/ads_common/savon_headers/oauth_header_handler.rb +0 -0
- data/lib/ads_common/savon_service.rb +12 -11
- data/lib/ads_common/utils.rb +1 -2
- data/lib/ads_common/version.rb +1 -1
- metadata +76 -29
- data/test/coverage.rb +0 -33
- data/test/suite_unittests.rb +0 -28
- data/test/test_config.rb +0 -96
- data/test/test_config.yml +0 -11
- data/test/test_credential_handler.rb +0 -125
- data/test/test_env.rb +0 -43
- data/test/test_oauth2_handler.rb +0 -84
- data/test/test_oauth2_service_account_handler.rb +0 -61
- data/test/test_parameters_validator.rb +0 -153
- data/test/test_results_extractor.rb +0 -250
- data/test/test_savon_service.rb +0 -125
- data/test/test_utils.rb +0 -111
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 105410f3e4bdea53a3e819141c4334d2331adcd9246699bad442788b6a7ac3bf
|
4
|
+
data.tar.gz: 72f5eb5edd223e0543a2eeee3f7917558026e938ddf0ea339e451bc8a8b2c488
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6dcafb8db218d85af94fed06884a3c034c4b6880e8e96adb19fd1b0e952e4a8676768f292ca4e0a953006a1cdc78fd5d496db6aeb1e181bc397ae689dd18beea
|
7
|
+
data.tar.gz: 1fef047b46c77af316eafcfb2b8db1bcfee5588672823fd1e2c7f36e5b9f46902fe82c8f872f361264e13913b81429c58ea9db90778a5ad8b448ffdfbf1d8620
|
data/COPYING
CHANGED
File without changes
|
data/ChangeLog
CHANGED
@@ -1,3 +1,25 @@
|
|
1
|
+
1.0.3:
|
2
|
+
- Updated rake dependency requirements.
|
3
|
+
|
4
|
+
1.0.2:
|
5
|
+
- Added enumeration values to SOAP service registry objects (pull
|
6
|
+
request #153).
|
7
|
+
|
8
|
+
1.0.1:
|
9
|
+
- Fixed issue #139. Library now gives a more appropriate warning when it
|
10
|
+
can't get an access token.
|
11
|
+
|
12
|
+
1.0.0:
|
13
|
+
- Major version bump. The library has been stable and feature complete for
|
14
|
+
some time, and this is more accurately reflected by this version number.
|
15
|
+
- Throw explicit warning for disabled SSL peer verification.
|
16
|
+
- Small performance improvements for large requests.
|
17
|
+
- No longer include test files in the built gem.
|
18
|
+
- Removing support for multiple environments.
|
19
|
+
|
20
|
+
0.14.1:
|
21
|
+
- Scrubbing an additional sensitive field present in some AdWords requests.
|
22
|
+
|
1
23
|
0.14.0:
|
2
24
|
- Standardizing logging format for requests, response, and summary.
|
3
25
|
|
data/README.md
CHANGED
@@ -68,7 +68,7 @@ Google Ads Developers Plus page:
|
|
68
68
|
|
69
69
|
# Copyright/License Info
|
70
70
|
|
71
|
-
Copyright 2010-
|
71
|
+
Copyright 2010-2017, Google Inc. All Rights Reserved.
|
72
72
|
|
73
73
|
Licensed under the Apache License, Version 2.0 (the "License");
|
74
74
|
you may not use this file except in compliance with the License.
|
data/lib/ads_common/api.rb
CHANGED
@@ -70,10 +70,9 @@ module AdsCommon
|
|
70
70
|
def service(name, version = nil)
|
71
71
|
name = name.to_sym
|
72
72
|
version = (version.nil?) ? api_config.default_version : version.to_sym
|
73
|
-
environment = @config.read('service.environment')
|
74
73
|
|
75
74
|
# Check if the combination is available.
|
76
|
-
validate_service_request(
|
75
|
+
validate_service_request(version, name)
|
77
76
|
|
78
77
|
# Try to re-use the service for this version if it was requested before.
|
79
78
|
wrapper = if @wrappers.include?(version) && @wrappers[version][name]
|
@@ -150,12 +149,11 @@ module AdsCommon
|
|
150
149
|
private
|
151
150
|
|
152
151
|
# Auxiliary method to test parameters correctness for the service request.
|
153
|
-
def validate_service_request(
|
154
|
-
# Check if the current
|
155
|
-
unless api_config.
|
152
|
+
def validate_service_request(version, service)
|
153
|
+
# Check if the current config supports the requested version.
|
154
|
+
unless api_config.has_version(version)
|
156
155
|
raise AdsCommon::Errors::Error,
|
157
|
-
"
|
158
|
-
[environment.to_s, version.to_s]
|
156
|
+
"Version '%s' not recognized" % version.to_s
|
159
157
|
end
|
160
158
|
|
161
159
|
# Check if the specified version has the requested service.
|
@@ -196,18 +194,14 @@ module AdsCommon
|
|
196
194
|
raise AdsCommon::Errors::Error,
|
197
195
|
'OAuth authorization method is deprecated, use OAuth2 instead.'
|
198
196
|
when :OAUTH2
|
199
|
-
environment = @config.read('service.environment',
|
200
|
-
api_config.default_environment())
|
201
197
|
AdsCommon::Auth::OAuth2Handler.new(
|
202
198
|
@config,
|
203
|
-
api_config.
|
199
|
+
api_config.config(:oauth_scope)
|
204
200
|
)
|
205
201
|
when :OAUTH2_SERVICE_ACCOUNT
|
206
|
-
environment = @config.read('service.environment',
|
207
|
-
api_config.default_environment())
|
208
202
|
AdsCommon::Auth::OAuth2ServiceAccountHandler.new(
|
209
203
|
@config,
|
210
|
-
api_config.
|
204
|
+
api_config.config(:oauth_scope)
|
211
205
|
)
|
212
206
|
else
|
213
207
|
raise AdsCommon::Errors::Error,
|
@@ -226,15 +220,13 @@ module AdsCommon
|
|
226
220
|
# - a simplified wrapper generated for the service
|
227
221
|
#
|
228
222
|
def prepare_wrapper(version, service)
|
229
|
-
environment = config.read('service.environment')
|
230
223
|
api_config.do_require(version, service)
|
231
|
-
endpoint = api_config.endpoint(
|
224
|
+
endpoint = api_config.endpoint(version, service)
|
232
225
|
interface_class_name = api_config.interface_name(version, service)
|
233
226
|
|
234
227
|
wrapper = class_for_path(interface_class_name).new(@config, endpoint)
|
235
228
|
auth_handler = get_auth_handler()
|
236
|
-
header_ns =
|
237
|
-
api_config.environment_config(environment, :header_ns) + version.to_s
|
229
|
+
header_ns = api_config.config(:header_ns) + version.to_s
|
238
230
|
soap_handler = soap_header_handler(auth_handler, version, header_ns,
|
239
231
|
wrapper.namespace)
|
240
232
|
wrapper.header_handler = soap_handler
|
@@ -270,10 +262,8 @@ module AdsCommon
|
|
270
262
|
provided_adapter = @config.read('connection.adapter')
|
271
263
|
@config.set('connection.adapter', :httpclient) if provided_adapter.nil?
|
272
264
|
|
273
|
-
#
|
274
|
-
|
275
|
-
symbolize_config_value(parameter)
|
276
|
-
end
|
265
|
+
# Make sure Auth param is a symbol.
|
266
|
+
symbolize_config_value('authentication.method')
|
277
267
|
end
|
278
268
|
|
279
269
|
# Converts value of a config key to uppercase symbol.
|
@@ -42,14 +42,13 @@ module AdsCommon
|
|
42
42
|
service_config.keys.select { |service| service.is_a? Integer }.max
|
43
43
|
end
|
44
44
|
|
45
|
-
# Does the
|
45
|
+
# Does the current config contain the given version?
|
46
46
|
#
|
47
47
|
# Returns:
|
48
|
-
# Boolean indicating whether the
|
49
|
-
# given version
|
48
|
+
# Boolean indicating whether the current config contains the given version
|
50
49
|
#
|
51
|
-
def
|
52
|
-
return !
|
50
|
+
def has_version(version)
|
51
|
+
return !config(version).nil?
|
53
52
|
end
|
54
53
|
|
55
54
|
# Does the given version exist and contain the given service?
|
@@ -94,33 +93,22 @@ module AdsCommon
|
|
94
93
|
return api_name.to_s.snakecase
|
95
94
|
end
|
96
95
|
|
97
|
-
# Get the default environment.
|
98
|
-
#
|
99
|
-
# Returns:
|
100
|
-
# Default environment
|
101
|
-
#
|
102
|
-
def default_environment
|
103
|
-
raise NotImplementedError, 'default_environment not overriden.'
|
104
|
-
end
|
105
|
-
|
106
96
|
# Get the default filename for the config file.
|
107
97
|
def default_config_filename
|
108
98
|
raise NotImplementedError, 'default_config_filename not overriden.'
|
109
99
|
end
|
110
100
|
|
111
|
-
# Get the endpoint for a service on a given
|
101
|
+
# Get the endpoint for a service on a given API version.
|
112
102
|
#
|
113
103
|
# Args:
|
114
|
-
# - environment: the service environment to be used
|
115
104
|
# - version: the API version
|
116
105
|
# - service: the name of the API service
|
117
106
|
#
|
118
107
|
# Returns:
|
119
108
|
# The endpoint URL
|
120
109
|
#
|
121
|
-
def endpoint(
|
122
|
-
base = get_wsdl_base(
|
123
|
-
# TODO(dklimkin): Unflatten subdir constants. Cross-API refactor 0.9.0.
|
110
|
+
def endpoint(version, service)
|
111
|
+
base = get_wsdl_base(version)
|
124
112
|
if !subdir_config().nil?
|
125
113
|
base = base.to_s + subdir_config()[[version, service]].to_s
|
126
114
|
end
|
@@ -138,23 +126,9 @@ module AdsCommon
|
|
138
126
|
#
|
139
127
|
def subdir(version, service)
|
140
128
|
return nil if subdir_config().nil?
|
141
|
-
# TODO(dklimkin): Unflatten subdir constants. Cross-API refactor 0.9.0.
|
142
129
|
subdir_config()[[version, service]]
|
143
130
|
end
|
144
131
|
|
145
|
-
# Get the authentication server details for an environment. Allows to
|
146
|
-
# override the auth URL via environmental variable.
|
147
|
-
#
|
148
|
-
# Args:
|
149
|
-
# - environment: the service environment to be used
|
150
|
-
#
|
151
|
-
# Returns:
|
152
|
-
# The full URL for the auth server
|
153
|
-
#
|
154
|
-
def auth_server(environment)
|
155
|
-
return ENV['ADSAPI_AUTH_URL'] || auth_server_config[environment]
|
156
|
-
end
|
157
|
-
|
158
132
|
# Perform the loading of the necessary source files for a version.
|
159
133
|
#
|
160
134
|
# Args:
|
@@ -208,7 +182,7 @@ module AdsCommon
|
|
208
182
|
#
|
209
183
|
def get_wsdls(version)
|
210
184
|
res = {}
|
211
|
-
wsdl_base = get_wsdl_base(
|
185
|
+
wsdl_base = get_wsdl_base(version)
|
212
186
|
postfix = wsdl_base.start_with?('http') ? '?wsdl' : '.wsdl'
|
213
187
|
services(version).each do |service|
|
214
188
|
path = wsdl_base
|
@@ -226,15 +200,13 @@ module AdsCommon
|
|
226
200
|
# the base URL via environmental variable.
|
227
201
|
#
|
228
202
|
# Args:
|
229
|
-
# - environment: environment to use like :SANDBOX or :PRODUCTION
|
230
203
|
# - version: the API version
|
231
204
|
#
|
232
205
|
# Returns:
|
233
206
|
# String containing base URL
|
234
207
|
#
|
235
|
-
def get_wsdl_base(
|
236
|
-
return ENV['ADSAPI_BASE_URL'] ||
|
237
|
-
environment_config(environment, version)
|
208
|
+
def get_wsdl_base(version)
|
209
|
+
return ENV['ADSAPI_BASE_URL'] || config(version)
|
238
210
|
end
|
239
211
|
end
|
240
212
|
end
|
File without changes
|
@@ -77,6 +77,10 @@ module AdsCommon
|
|
77
77
|
#
|
78
78
|
def auth_string(credentials)
|
79
79
|
token = get_token(credentials)
|
80
|
+
if token.nil?
|
81
|
+
raise AdsCommon::Errors::AuthError.new(
|
82
|
+
'Could not get auth token. Are you missing a refresh token?')
|
83
|
+
end
|
80
84
|
return ::Signet::OAuth2.generate_bearer_authorization_header(
|
81
85
|
token[:access_token])
|
82
86
|
end
|
File without changes
|
File without changes
|
File without changes
|
@@ -145,6 +145,9 @@ module AdsCommon
|
|
145
145
|
'sequence | complexContent/extension/sequence') do |seq_node|
|
146
146
|
type[:fields] += get_element_fields(seq_node)
|
147
147
|
end
|
148
|
+
|
149
|
+
extract_enumerations(type_element, type)
|
150
|
+
|
148
151
|
REXML::XPath.each(type_element, 'choice') do |seq_node|
|
149
152
|
type[:choices] ||= []
|
150
153
|
type[:choices] += get_element_fields(seq_node)
|
@@ -152,6 +155,22 @@ module AdsCommon
|
|
152
155
|
return type
|
153
156
|
end
|
154
157
|
|
158
|
+
# Extracts all possible enumerations for a type and adds them as an
|
159
|
+
# `enumerations` key on the type.
|
160
|
+
def extract_enumerations(type_element, type)
|
161
|
+
REXML::XPath.each(type_element,
|
162
|
+
"restriction[@base='xsd:string']") do |enum_node|
|
163
|
+
type.delete(:fields)
|
164
|
+
type[:type] = enum_node.attribute('base').to_s.gsub(/^.+:/, '')
|
165
|
+
end
|
166
|
+
REXML::XPath.each(type_element,
|
167
|
+
"restriction[@base='xsd:string']/enumeration") do |enum_node|
|
168
|
+
type[:enumerations] ||= []
|
169
|
+
type[:enumerations] << enum_node.attribute('value').to_s
|
170
|
+
end
|
171
|
+
return type
|
172
|
+
end
|
173
|
+
|
155
174
|
# Extracts input parameters of given method as an array.
|
156
175
|
def extract_input_parameters(op_node, doc)
|
157
176
|
op_name = get_element_name(op_node)
|
File without changes
|
File without changes
|
data/lib/ads_common/config.rb
CHANGED
File without changes
|
File without changes
|
data/lib/ads_common/env_check.rb
CHANGED
File without changes
|
data/lib/ads_common/errors.rb
CHANGED
File without changes
|
data/lib/ads_common/http.rb
CHANGED
@@ -120,6 +120,10 @@ module AdsCommon
|
|
120
120
|
strict_ssl =
|
121
121
|
config.read('connection.strict_ssl_verification', true)
|
122
122
|
httpi.auth.ssl.verify_mode = strict_ssl ? :peer : :none
|
123
|
+
if logger && !strict_ssl
|
124
|
+
logger.warn('HTTPS peer validation is disabled. This is NOT ' +
|
125
|
+
'secure and NOT recommended.')
|
126
|
+
end
|
123
127
|
end
|
124
128
|
end
|
125
129
|
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -33,6 +33,7 @@ module AdsCommon
|
|
33
33
|
|
34
34
|
FALLBACK_API_ERROR_EXCEPTION = "ApiException"
|
35
35
|
MAX_FAULT_LOG_LENGTH = 16000
|
36
|
+
REDACTED_STR = 'REDACTED'
|
36
37
|
|
37
38
|
# Creates a new service.
|
38
39
|
def initialize(config, endpoint, namespace, version)
|
@@ -201,35 +202,35 @@ module AdsCommon
|
|
201
202
|
summary_message += ', Fault message: %s' % format_fault(
|
202
203
|
response_hash[:envelope][:body][:fault][:faultstring])
|
203
204
|
logger.warn(summary_message)
|
204
|
-
logger.info(request_message)
|
205
|
-
logger.info(response_message)
|
205
|
+
logger.info(request_message) unless request_message.nil?
|
206
|
+
logger.info(response_message) unless response_message.nil?
|
206
207
|
else
|
207
208
|
logger.info(summary_message)
|
208
|
-
logger.debug(request_message)
|
209
|
-
logger.debug(response_message)
|
209
|
+
logger.debug(request_message) unless request_message.nil?
|
210
|
+
logger.debug(response_message) unless response_message.nil?
|
210
211
|
end
|
211
212
|
end
|
212
213
|
|
213
214
|
# Format headers, redacting sensitive information.
|
214
215
|
def format_headers(headers)
|
215
216
|
return headers.map do |k, v|
|
216
|
-
v =
|
217
|
+
v = REDACTED_STR if k == 'Authorization'
|
217
218
|
[k, v].join(': ')
|
218
219
|
end.join(', ')
|
219
220
|
end
|
220
221
|
|
221
222
|
# Sanitize the request body, redacting sensitive information.
|
222
223
|
def sanitize_request(body)
|
223
|
-
body.gsub(/developerToken>[
|
224
|
-
'
|
224
|
+
return body.gsub(/(developerToken>|httpAuthorizationHeader>)[^<]+(<\/)/,
|
225
|
+
'\1' + REDACTED_STR + '\2')
|
225
226
|
end
|
226
227
|
|
227
228
|
# Format the fault message by capping length and removing newlines.
|
228
229
|
def format_fault(message)
|
229
|
-
message
|
230
|
-
|
231
|
-
|
232
|
-
return message
|
230
|
+
if message.length > MAX_FAULT_LOG_LENGTH
|
231
|
+
message = message[0, MAX_FAULT_LOG_LENGTH]
|
232
|
+
end
|
233
|
+
return message.gsub("\n", ' ')
|
233
234
|
end
|
234
235
|
|
235
236
|
# Check whether or not to log request summaries based on log level.
|
data/lib/ads_common/utils.rb
CHANGED
@@ -23,8 +23,7 @@ module AdsCommon
|
|
23
23
|
|
24
24
|
# Returns the String in lowerCamelCase.
|
25
25
|
def lower_camelcase()
|
26
|
-
result =
|
27
|
-
result.gsub!(/^([A-Z])/) {$1.downcase()}
|
26
|
+
result = gsub(/^([A-Z])/) {$1.downcase()}
|
28
27
|
result.gsub!(/(?:_)([a-zA-Z\d])/) {$1.upcase()}
|
29
28
|
return result
|
30
29
|
end
|
data/lib/ads_common/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: google-ads-common
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sergio Gomes
|
@@ -10,13 +10,16 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2020-11-11 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: google-ads-savon
|
17
17
|
requirement: !ruby/object:Gem::Requirement
|
18
18
|
requirements:
|
19
19
|
- - "~>"
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.0'
|
22
|
+
- - ">="
|
20
23
|
- !ruby/object:Gem::Version
|
21
24
|
version: 1.0.2
|
22
25
|
type: :runtime
|
@@ -24,6 +27,9 @@ dependencies:
|
|
24
27
|
version_requirements: !ruby/object:Gem::Requirement
|
25
28
|
requirements:
|
26
29
|
- - "~>"
|
30
|
+
- !ruby/object:Gem::Version
|
31
|
+
version: '1.0'
|
32
|
+
- - ">="
|
27
33
|
- !ruby/object:Gem::Version
|
28
34
|
version: 1.0.2
|
29
35
|
- !ruby/object:Gem::Dependency
|
@@ -60,28 +66,90 @@ dependencies:
|
|
60
66
|
requirements:
|
61
67
|
- - "~>"
|
62
68
|
- !ruby/object:Gem::Version
|
63
|
-
version: 0.7
|
69
|
+
version: '0.7'
|
64
70
|
type: :runtime
|
65
71
|
prerelease: false
|
66
72
|
version_requirements: !ruby/object:Gem::Requirement
|
67
73
|
requirements:
|
68
74
|
- - "~>"
|
69
75
|
- !ruby/object:Gem::Version
|
70
|
-
version: 0.7
|
76
|
+
version: '0.7'
|
71
77
|
- !ruby/object:Gem::Dependency
|
72
78
|
name: rake
|
73
79
|
requirement: !ruby/object:Gem::Requirement
|
74
80
|
requirements:
|
75
81
|
- - ">="
|
76
82
|
- !ruby/object:Gem::Version
|
77
|
-
version:
|
83
|
+
version: 12.3.3
|
84
|
+
- - "<"
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '13.0'
|
78
87
|
type: :development
|
79
88
|
prerelease: false
|
80
89
|
version_requirements: !ruby/object:Gem::Requirement
|
81
90
|
requirements:
|
82
91
|
- - ">="
|
83
92
|
- !ruby/object:Gem::Version
|
84
|
-
version:
|
93
|
+
version: 12.3.3
|
94
|
+
- - "<"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '13.0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: test-unit
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '3.2'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '3.2'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: webmock
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '3.0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '3.0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: minitest
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '5.10'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '5.10'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: rr
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: 1.0.5
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 1.0.5
|
85
153
|
description: Essential utilities shared by all Ads Ruby client libraries
|
86
154
|
email:
|
87
155
|
- adwordsapiadvisor+michael@google.com
|
@@ -114,18 +182,6 @@ files:
|
|
114
182
|
- lib/ads_common/savon_service.rb
|
115
183
|
- lib/ads_common/utils.rb
|
116
184
|
- lib/ads_common/version.rb
|
117
|
-
- test/coverage.rb
|
118
|
-
- test/suite_unittests.rb
|
119
|
-
- test/test_config.rb
|
120
|
-
- test/test_config.yml
|
121
|
-
- test/test_credential_handler.rb
|
122
|
-
- test/test_env.rb
|
123
|
-
- test/test_oauth2_handler.rb
|
124
|
-
- test/test_oauth2_service_account_handler.rb
|
125
|
-
- test/test_parameters_validator.rb
|
126
|
-
- test/test_results_extractor.rb
|
127
|
-
- test/test_savon_service.rb
|
128
|
-
- test/test_utils.rb
|
129
185
|
homepage: https://github.com/googleads/google-api-ads-ruby
|
130
186
|
licenses:
|
131
187
|
- Apache-2.0
|
@@ -146,17 +202,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
146
202
|
version: 1.3.6
|
147
203
|
requirements: []
|
148
204
|
rubyforge_project: google-ads-common
|
149
|
-
rubygems_version: 2.
|
205
|
+
rubygems_version: 2.7.3
|
150
206
|
signing_key:
|
151
207
|
specification_version: 4
|
152
208
|
summary: Common code for Google Ads APIs
|
153
|
-
test_files:
|
154
|
-
- test/test_savon_service.rb
|
155
|
-
- test/test_config.rb
|
156
|
-
- test/test_oauth2_service_account_handler.rb
|
157
|
-
- test/test_credential_handler.rb
|
158
|
-
- test/test_utils.rb
|
159
|
-
- test/test_parameters_validator.rb
|
160
|
-
- test/test_oauth2_handler.rb
|
161
|
-
- test/test_env.rb
|
162
|
-
- test/test_results_extractor.rb
|
209
|
+
test_files: []
|