google-ads-common 0.14.0 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
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: []