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.
Files changed (39) hide show
  1. checksums.yaml +5 -5
  2. data/COPYING +0 -0
  3. data/ChangeLog +22 -0
  4. data/README.md +1 -1
  5. data/lib/ads_common/api.rb +11 -21
  6. data/lib/ads_common/api_config.rb +10 -38
  7. data/lib/ads_common/auth/base_handler.rb +0 -0
  8. data/lib/ads_common/auth/oauth2_handler.rb +4 -0
  9. data/lib/ads_common/auth/oauth2_service_account_handler.rb +0 -0
  10. data/lib/ads_common/build/savon_abstract_generator.rb +0 -0
  11. data/lib/ads_common/build/savon_generator.rb +0 -0
  12. data/lib/ads_common/build/savon_registry.rb +19 -0
  13. data/lib/ads_common/build/savon_registry_generator.rb +0 -0
  14. data/lib/ads_common/build/savon_service_generator.rb +0 -0
  15. data/lib/ads_common/config.rb +0 -0
  16. data/lib/ads_common/credential_handler.rb +0 -0
  17. data/lib/ads_common/env_check.rb +0 -0
  18. data/lib/ads_common/errors.rb +0 -0
  19. data/lib/ads_common/http.rb +4 -0
  20. data/lib/ads_common/parameters_validator.rb +0 -0
  21. data/lib/ads_common/results_extractor.rb +0 -0
  22. data/lib/ads_common/savon_headers/base_header_handler.rb +0 -0
  23. data/lib/ads_common/savon_headers/oauth_header_handler.rb +0 -0
  24. data/lib/ads_common/savon_service.rb +12 -11
  25. data/lib/ads_common/utils.rb +1 -2
  26. data/lib/ads_common/version.rb +1 -1
  27. metadata +76 -29
  28. data/test/coverage.rb +0 -33
  29. data/test/suite_unittests.rb +0 -28
  30. data/test/test_config.rb +0 -96
  31. data/test/test_config.yml +0 -11
  32. data/test/test_credential_handler.rb +0 -125
  33. data/test/test_env.rb +0 -43
  34. data/test/test_oauth2_handler.rb +0 -84
  35. data/test/test_oauth2_service_account_handler.rb +0 -61
  36. data/test/test_parameters_validator.rb +0 -153
  37. data/test/test_results_extractor.rb +0 -250
  38. data/test/test_savon_service.rb +0 -125
  39. data/test/test_utils.rb +0 -111
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 3267da5cdfdc5eef0f5653e99c6bd8329addb03f
4
- data.tar.gz: 06334b9e716c913d333d49089f30fd2fc2158823
2
+ SHA256:
3
+ metadata.gz: 105410f3e4bdea53a3e819141c4334d2331adcd9246699bad442788b6a7ac3bf
4
+ data.tar.gz: 72f5eb5edd223e0543a2eeee3f7917558026e938ddf0ea339e451bc8a8b2c488
5
5
  SHA512:
6
- metadata.gz: c1a6a5e280a2897d4443224111473de8f75a7db7550c9372364038418321c475473b50149e4d4f829e7be5f8b32445ed719fbdf39db8fa2b73df8ee57f4a9758
7
- data.tar.gz: 9b1612f9cc4b39666296a48be14960801773d401763dceaaee115193b21531bb6462d3a788c43dad93b724cd4c4ca0c57929e3dc0154583309fc10d3a3b1c93a
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-2015, Google Inc. All Rights Reserved.
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.
@@ -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(environment, version, name)
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(environment, version, service)
154
- # Check if the current environment supports the requested version.
155
- unless api_config.environment_has_version(environment, version)
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
- "Environment '%s' does not support version '%s'" %
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.environment_config(environment, :oauth_scope)
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.environment_config(environment, :oauth_scope)
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(environment, version, service)
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
- # Validating most important parameters.
274
- ['service.environment', 'authentication.method'].each do |parameter|
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 given environment exist and contain the given version?
45
+ # Does the current config contain the given version?
46
46
  #
47
47
  # Returns:
48
- # Boolean indicating whether the given environment exists and contains the
49
- # given version
48
+ # Boolean indicating whether the current config contains the given version
50
49
  #
51
- def environment_has_version(environment, version)
52
- return !environment_config(environment, version).nil?
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 environment and API version.
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(environment, version, service)
122
- base = get_wsdl_base(environment, version)
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(default_environment(), version)
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(environment, version)
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
@@ -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
File without changes
File without changes
@@ -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
@@ -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) if request_message
205
- logger.info(response_message) if 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) if request_message
209
- logger.debug(response_message) if 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 = 'REDACTED' if k == 'Authorization'
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>[a-zA-Z0-9_\-]+<\//,
224
- 'developerToken>REDACTED</')
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 = message[0...MAX_FAULT_LOG_LENGTH] if
230
- message.length > MAX_FAULT_LOG_LENGTH
231
- message = message.gsub("\n", " ")
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.
@@ -23,8 +23,7 @@ module AdsCommon
23
23
 
24
24
  # Returns the String in lowerCamelCase.
25
25
  def lower_camelcase()
26
- result = dup()
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
@@ -19,6 +19,6 @@
19
19
 
20
20
  module AdsCommon
21
21
  module ApiConfig
22
- CLIENT_LIB_VERSION = '0.14.0'
22
+ CLIENT_LIB_VERSION = '1.0.3'
23
23
  end
24
24
  end
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.14.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: 2017-05-24 00:00:00.000000000 Z
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.0
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.0
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: 10.4.2
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: 10.4.2
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.4.8
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: []