google-ads-common 0.14.1 → 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.
- checksums.yaml +4 -4
- data/ChangeLog +8 -0
- data/README.md +1 -1
- data/lib/ads_common/api.rb +11 -21
- data/lib/ads_common/api_config.rb +10 -36
- data/lib/ads_common/http.rb +4 -0
- data/lib/ads_common/savon_service.rb +12 -14
- data/lib/ads_common/utils.rb +1 -2
- data/lib/ads_common/version.rb +1 -1
- metadata +18 -27
- 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 -130
- data/test/test_utils.rb +0 -111
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3323c13c66ba24618874eabc9af72432dbc1aba7
|
4
|
+
data.tar.gz: 8e7c3178e7f7dfb61a04a406e904cd7880babb5d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 760fcea64ff72ae3f9e5bc7ba2af0bb73937174a6b6287753685557c20a460b5f53c7798e9e9382d5e4cebe44904220e6e6e1bc53f73a5f48c959e1749987aef
|
7
|
+
data.tar.gz: 58d901837aee9ba0a8d5c322232c88dda558567b4e1450fd2e072d783dcda421e2854af51dbe17298318b591007fad9a5d112a00ddd5b02c40ab2bdfe9cbc548
|
data/ChangeLog
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
1.0.0:
|
2
|
+
- Major version bump. The library has been stable and feature complete for
|
3
|
+
some time, and this is more accurately reflected by this version number.
|
4
|
+
- Throw explicit warning for disabled SSL peer verification.
|
5
|
+
- Small performance improvements for large requests.
|
6
|
+
- No longer include test files in the built gem.
|
7
|
+
- Removing support for multiple environments.
|
8
|
+
|
1
9
|
0.14.1:
|
2
10
|
- Scrubbing an additional sensitive field present in some AdWords requests.
|
3
11
|
|
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,32 +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(
|
110
|
+
def endpoint(version, service)
|
111
|
+
base = get_wsdl_base(version)
|
123
112
|
# TODO(dklimkin): Unflatten subdir constants. Cross-API refactor 0.9.0.
|
124
113
|
if !subdir_config().nil?
|
125
114
|
base = base.to_s + subdir_config()[[version, service]].to_s
|
@@ -142,19 +131,6 @@ module AdsCommon
|
|
142
131
|
subdir_config()[[version, service]]
|
143
132
|
end
|
144
133
|
|
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
134
|
# Perform the loading of the necessary source files for a version.
|
159
135
|
#
|
160
136
|
# Args:
|
@@ -208,7 +184,7 @@ module AdsCommon
|
|
208
184
|
#
|
209
185
|
def get_wsdls(version)
|
210
186
|
res = {}
|
211
|
-
wsdl_base = get_wsdl_base(
|
187
|
+
wsdl_base = get_wsdl_base(version)
|
212
188
|
postfix = wsdl_base.start_with?('http') ? '?wsdl' : '.wsdl'
|
213
189
|
services(version).each do |service|
|
214
190
|
path = wsdl_base
|
@@ -226,15 +202,13 @@ module AdsCommon
|
|
226
202
|
# the base URL via environmental variable.
|
227
203
|
#
|
228
204
|
# Args:
|
229
|
-
# - environment: environment to use like :SANDBOX or :PRODUCTION
|
230
205
|
# - version: the API version
|
231
206
|
#
|
232
207
|
# Returns:
|
233
208
|
# String containing base URL
|
234
209
|
#
|
235
|
-
def get_wsdl_base(
|
236
|
-
return ENV['ADSAPI_BASE_URL'] ||
|
237
|
-
environment_config(environment, version)
|
210
|
+
def get_wsdl_base(version)
|
211
|
+
return ENV['ADSAPI_BASE_URL'] || config(version)
|
238
212
|
end
|
239
213
|
end
|
240
214
|
end
|
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
|
@@ -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,38 +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
|
-
|
224
|
-
'
|
225
|
-
body = body.gsub(/httpAuthorizationHeader>[^<]+<\//,
|
226
|
-
'httpAuthorizationHeader>REDACTED</')
|
227
|
-
return body
|
224
|
+
return body.gsub(/(developerToken>|httpAuthorizationHeader>)[^<]+(<\/)/,
|
225
|
+
'\1' + REDACTED_STR + '\2')
|
228
226
|
end
|
229
227
|
|
230
228
|
# Format the fault message by capping length and removing newlines.
|
231
229
|
def format_fault(message)
|
232
|
-
message
|
233
|
-
|
234
|
-
|
235
|
-
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", ' ')
|
236
234
|
end
|
237
235
|
|
238
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.0
|
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: 2017-
|
13
|
+
date: 2017-09-22 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,18 +66,21 @@ 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:
|
81
|
+
- - "~>"
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '10.4'
|
75
84
|
- - ">="
|
76
85
|
- !ruby/object:Gem::Version
|
77
86
|
version: 10.4.2
|
@@ -79,6 +88,9 @@ dependencies:
|
|
79
88
|
prerelease: false
|
80
89
|
version_requirements: !ruby/object:Gem::Requirement
|
81
90
|
requirements:
|
91
|
+
- - "~>"
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '10.4'
|
82
94
|
- - ">="
|
83
95
|
- !ruby/object:Gem::Version
|
84
96
|
version: 10.4.2
|
@@ -114,18 +126,6 @@ files:
|
|
114
126
|
- lib/ads_common/savon_service.rb
|
115
127
|
- lib/ads_common/utils.rb
|
116
128
|
- 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
129
|
homepage: https://github.com/googleads/google-api-ads-ruby
|
130
130
|
licenses:
|
131
131
|
- Apache-2.0
|
@@ -146,17 +146,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
146
146
|
version: 1.3.6
|
147
147
|
requirements: []
|
148
148
|
rubyforge_project: google-ads-common
|
149
|
-
rubygems_version: 2.
|
149
|
+
rubygems_version: 2.6.8
|
150
150
|
signing_key:
|
151
151
|
specification_version: 4
|
152
152
|
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
|
153
|
+
test_files: []
|
data/test/coverage.rb
DELETED
@@ -1,33 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# Encoding: utf-8
|
3
|
-
#
|
4
|
-
# Copyright:: Copyright 2012, 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
|
-
# Runs test with coverage tool.
|
20
|
-
|
21
|
-
require 'simplecov'
|
22
|
-
|
23
|
-
SimpleCov.start
|
24
|
-
|
25
|
-
$:.unshift File.expand_path('../../', __FILE__)
|
26
|
-
require File.join(File.dirname(__FILE__), 'suite_unittests.rb')
|
27
|
-
|
28
|
-
# Now loading all files in the library to make sure we hit all untested files.
|
29
|
-
lib_base_path = File.expand_path('../../lib', __FILE__)
|
30
|
-
$:.unshift lib_base_path
|
31
|
-
|
32
|
-
code_files_mask = File.join(lib_base_path, '**/*.rb')
|
33
|
-
Dir.glob(code_files_mask).each {|file| require file}
|
data/test/suite_unittests.rb
DELETED
@@ -1,28 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# Encoding: utf-8
|
3
|
-
#
|
4
|
-
# Copyright:: Copyright 2012, 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 suite for unit tests.
|
20
|
-
|
21
|
-
require 'test/unit'
|
22
|
-
|
23
|
-
$:.unshift File.expand_path('../../lib/', __FILE__)
|
24
|
-
$:.unshift File.expand_path('../../', __FILE__)
|
25
|
-
|
26
|
-
# Ads Common units tests.
|
27
|
-
test_files_mask = File.join(File.dirname(__FILE__), 'test_*.rb')
|
28
|
-
Dir.glob(test_files_mask).each {|file| require file}
|