aws-sdk-core 3.91.0 → 3.94.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (33) hide show
  1. checksums.yaml +5 -5
  2. data/VERSION +1 -1
  3. data/lib/aws-sdk-core.rb +2 -2
  4. data/lib/aws-sdk-core/assume_role_web_identity_credentials.rb +1 -0
  5. data/lib/aws-sdk-core/async_client_stubs.rb +2 -2
  6. data/lib/aws-sdk-core/binary/event_builder.rb +6 -6
  7. data/lib/aws-sdk-core/client_stubs.rb +13 -12
  8. data/lib/aws-sdk-core/deprecations.rb +6 -8
  9. data/lib/aws-sdk-core/errors.rb +9 -9
  10. data/lib/aws-sdk-core/json.rb +9 -10
  11. data/lib/aws-sdk-core/log/param_filter.rb +1 -1
  12. data/lib/aws-sdk-core/pageable_response.rb +34 -20
  13. data/lib/aws-sdk-core/param_validator.rb +1 -1
  14. data/lib/aws-sdk-core/plugins/retries/clock_skew.rb +43 -8
  15. data/lib/aws-sdk-core/plugins/retry_errors.rb +60 -22
  16. data/lib/aws-sdk-core/rest/request/querystring_builder.rb +2 -2
  17. data/lib/aws-sdk-core/shared_config.rb +11 -9
  18. data/lib/aws-sdk-core/stubbing/protocols/query.rb +2 -2
  19. data/lib/aws-sdk-core/stubbing/protocols/rest.rb +3 -3
  20. data/lib/aws-sdk-core/xml/builder.rb +1 -1
  21. data/lib/aws-sdk-core/xml/doc_builder.rb +7 -3
  22. data/lib/aws-sdk-core/xml/error_handler.rb +1 -1
  23. data/lib/aws-sdk-core/xml/parser/engines/rexml.rb +2 -1
  24. data/lib/aws-sdk-sts.rb +1 -1
  25. data/lib/aws-sdk-sts/client.rb +24 -21
  26. data/lib/aws-sdk-sts/plugins/sts_regional_endpoints.rb +4 -4
  27. data/lib/aws-sdk-sts/resource.rb +1 -7
  28. data/lib/seahorse/client/h2/connection.rb +12 -12
  29. data/lib/seahorse/client/handler_list_entry.rb +2 -2
  30. data/lib/seahorse/client/http/request.rb +3 -3
  31. data/lib/seahorse/client/http/response.rb +2 -2
  32. data/lib/seahorse/client/net_http/handler.rb +2 -2
  33. metadata +5 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: '018176486b2589c3e5643f0517d600048b788239'
4
- data.tar.gz: bf23afa4bc903911cc3a571b318eb38911a4cb62
2
+ SHA256:
3
+ metadata.gz: e3dcb7b830a3e5f10ec9ad91d7f9ac0dd951c01ab6ac7ef4d3c92cc246121e5e
4
+ data.tar.gz: 67de0b39500fbd0f673f8eab1090a2ff2c8ccc0ff8d29458de785c9ba323e48c
5
5
  SHA512:
6
- metadata.gz: 8c5827b6dfca9a435419df7ec67f006179fe4656e909769e7545dbd4803b6723bdfedc7a9e89f23bff052d3e93428dcd39c9b803a1f35aba3ac26cfc3c33fb87
7
- data.tar.gz: a244072123870020dbca0dee7bbe8f7057367b1ce81e18c7078b994e79a5f48c5ca5639e0df4113d4e68fdbc12627097751d21e45a65c4359e7d0abd4a548474
6
+ metadata.gz: 73071a7ac86e2211ea76e64bf6ab449317cc9b7855a329729872363a09901f10937650bd4a7739590de279012987584b6222fdf1fe02e6762218cb849a18bb1d
7
+ data.tar.gz: d79f0f6d5bfe744db5361b08f6622862e0f6c153625cf9ee7034eca28d02955d553f5d2d3723bb4422b98df7bbfb05b705a58c2006bdf7715520e1de6eeaf302
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.91.0
1
+ 3.94.1
@@ -167,8 +167,8 @@ module Aws
167
167
 
168
168
  # @api private
169
169
  def eager_autoload!(*args)
170
- msg = 'Aws.eager_autoload is no longer needed, usage of '
171
- msg << 'autoload has been replaced with require statements'
170
+ msg = 'Aws.eager_autoload is no longer needed, usage of '\
171
+ 'autoload has been replaced with require statements'
172
172
  warn(msg)
173
173
  end
174
174
 
@@ -25,6 +25,7 @@ module Aws
25
25
  include CredentialProvider
26
26
  include RefreshingCredentials
27
27
 
28
+ # @param [Hash] options
28
29
  # @option options [required, String] :role_arn the IAM role
29
30
  # to be assumed
30
31
  #
@@ -42,8 +42,8 @@ module Aws
42
42
  if config.stub_responses
43
43
  @send_events
44
44
  else
45
- msg = 'This method is only implemented for stubbed clients, and is '
46
- msg << 'available when you enable stubbing in the constructor with `stub_responses: true`'
45
+ msg = 'This method is only implemented for stubbed clients, and is '\
46
+ 'available when you enable stubbing in the constructor with `stub_responses: true`'
47
47
  raise NotImplementedError.new(msg)
48
48
  end
49
49
  end
@@ -5,7 +5,7 @@ module Aws
5
5
 
6
6
  include Seahorse::Model::Shapes
7
7
 
8
- # @param [Class] parser_class
8
+ # @param [Class] serializer_class
9
9
  # @param [Seahorse::Model::ShapeRef] rules (of eventstream member)
10
10
  def initialize(serializer_class, rules)
11
11
  @serializer_class = serializer_class
@@ -59,7 +59,7 @@ module Aws
59
59
  payload = _build_payload(streaming, m_ref, params[m_name])
60
60
  end
61
61
  end
62
-
62
+
63
63
 
64
64
  event_ref.shape.members.each do |member_name, member_ref|
65
65
  if member_ref.eventheader && params[member_name]
@@ -69,7 +69,7 @@ module Aws
69
69
  value: header_value
70
70
  )
71
71
  elsif member_ref.eventpayload && params[member_name]
72
- # explicit payload
72
+ # explicit payload
73
73
  streaming, content_type = _content_type(member_ref.shape)
74
74
 
75
75
  es_headers[":content-type"] = Aws::EventStream::HeaderValue.new(
@@ -99,7 +99,7 @@ module Aws
99
99
  "Unsupport eventpayload shape: #{shape.name}")
100
100
  end
101
101
  end
102
-
102
+
103
103
  def _header_value_type(shape, value)
104
104
  case shape
105
105
  when StringShape then "string"
@@ -107,9 +107,9 @@ module Aws
107
107
  when TimestampShape then "timestamp"
108
108
  when BlobShape then "bytes"
109
109
  when BooleanShape then !!value ? "bool_true" : "bool_false"
110
- else
110
+ else
111
111
  raise Aws::Errors::EventStreamBuilderError.new(
112
- "Unsupported eventheader shape: #{shape.name}")
112
+ "Unsupported eventheader shape: #{shape.name}")
113
113
  end
114
114
  end
115
115
 
@@ -171,24 +171,25 @@ module Aws
171
171
  # @raise [RuntimeError] Raises a runtime error when called
172
172
  # on a client that has not enabled response stubbing via
173
173
  # `:stub_responses => true`.
174
- #
175
174
  def stub_responses(operation_name, *stubs)
176
175
  if config.stub_responses
177
176
  apply_stubs(operation_name, stubs.flatten)
178
177
  else
179
- msg = 'stubbing is not enabled; enable stubbing in the constructor '
180
- msg << 'with `:stub_responses => true`'
178
+ msg = 'stubbing is not enabled; enable stubbing in the constructor '\
179
+ 'with `:stub_responses => true`'
181
180
  raise msg
182
181
  end
183
182
  end
184
183
 
185
- # Allows you to access all of the requests that the stubbed client has made
186
- #
187
- # @params [Boolean] exclude_presign Setting to true for filtering out not sent requests from
188
- # generating presigned urls. Default to false.
189
- # @return [Array] Returns an array of the api requests made, each request object contains the
190
- # :operation_name, :params, and :context of the request.
191
- # @raise [NotImplementedError] Raises `NotImplementedError` when the client is not stubbed
184
+ # Allows you to access all of the requests that the stubbed client has made.
185
+ #
186
+ # @param [Hash] options The options for the api requests.
187
+ # @option options [Boolean] :exclude_presign (false) Set to true to filter
188
+ # out unsent requests from generated presigned urls.
189
+ # @return [Array] Returns an array of the api requests made. Each request
190
+ # object contains the :operation_name, :params, and :context.
191
+ # @raise [NotImplementedError] Raises `NotImplementedError` when the client
192
+ # is not stubbed.
192
193
  def api_requests(options = {})
193
194
  if config.stub_responses
194
195
  if options[:exclude_presign]
@@ -197,8 +198,8 @@ module Aws
197
198
  @api_requests
198
199
  end
199
200
  else
200
- msg = 'This method is only implemented for stubbed clients, and is '
201
- msg << 'available when you enable stubbing in the constructor with `stub_responses: true`'
201
+ msg = 'This method is only implemented for stubbed clients, and is '\
202
+ 'available when you enable stubbing in the constructor with `stub_responses: true`'
202
203
  raise NotImplementedError.new(msg)
203
204
  end
204
205
  end
@@ -48,14 +48,12 @@ module Aws
48
48
  def deprecated(method, options = {})
49
49
 
50
50
  deprecation_msg = options[:message] || begin
51
- msg = "#################### DEPRECATION WARNING ####################\n"
52
- msg << "Called deprecated method `#{method}` of #{self}."
53
- msg << " Use `#{options[:use]}` instead.\n" if options[:use]
54
- if options[:version]
55
- msg << "Method `#{method}` will be removed in #{options[:version]}."
56
- end
57
- msg << "\n#############################################################"
58
- msg
51
+ "#################### DEPRECATION WARNING ####################\n"\
52
+ "Called deprecated method `#{method}` of #{self}."\
53
+ "#{" Use `#{options[:use]}` instead.\n" if options[:use]}"\
54
+ "#{"Method `#{method}` will be removed in #{options[:version]}."\
55
+ if options[:version]}"\
56
+ "\n#############################################################"
59
57
  end
60
58
 
61
59
  alias_method(:"deprecated_#{method}", method)
@@ -52,7 +52,7 @@ module Aws
52
52
  # EcsCredentialsProvider fails to parse the metadata response after retries
53
53
  class MetadataParserError < RuntimeError
54
54
  def initialize(*args)
55
- msg = "Failed to parse metadata service response."
55
+ msg = 'Failed to parse metadata service response.'
56
56
  super(msg)
57
57
  end
58
58
  end
@@ -71,7 +71,7 @@ module Aws
71
71
  class EndpointDiscoveryError < RuntimeError
72
72
  def initialize(*args)
73
73
  msg = 'Endpoint discovery failed for the operation or discovered endpoint is not working, '\
74
- 'request will keep failing until endpoint discovery succeeds or :endpoint option is provided.'
74
+ 'request will keep failing until endpoint discovery succeeds or :endpoint option is provided.'
75
75
  super(msg)
76
76
  end
77
77
  end
@@ -83,8 +83,8 @@ module Aws
83
83
 
84
84
  def initialize(name)
85
85
  msg = "Missing required parameter #{name} to construct"\
86
- " endpoint host prefix. You can disable host prefix by"\
87
- " setting :disable_host_prefix_injection to `true`."
86
+ ' endpoint host prefix. You can disable host prefix by'\
87
+ ' setting :disable_host_prefix_injection to `true`.'
88
88
  super(msg)
89
89
  end
90
90
 
@@ -195,8 +195,8 @@ module Aws
195
195
  class MissingWebIdentityTokenFile < RuntimeError
196
196
  def initialize(*args)
197
197
  msg = 'Missing :web_identity_token_file parameter or'\
198
- ' invalid file path provided for'\
199
- ' Aws::AssumeRoleWebIdentityCredentials provider'
198
+ ' invalid file path provided for'\
199
+ ' Aws::AssumeRoleWebIdentityCredentials provider'
200
200
  super(msg)
201
201
  end
202
202
  end
@@ -208,8 +208,8 @@ module Aws
208
208
  # Raised when a client is constructed and region is not specified.
209
209
  class MissingRegionError < ArgumentError
210
210
  def initialize(*args)
211
- msg = "missing region; use :region option or "
212
- msg << "export region name to ENV['AWS_REGION']"
211
+ msg = 'missing region; use :region option or '\
212
+ "export region name to ENV['AWS_REGION']"
213
213
  super(msg)
214
214
  end
215
215
  end
@@ -289,7 +289,7 @@ Known AWS regions include (not specific to this service):
289
289
  module DynamicErrors
290
290
 
291
291
  def self.extended(submodule)
292
- submodule.instance_variable_set("@const_set_mutex", Mutex.new)
292
+ submodule.instance_variable_set('@const_set_mutex', Mutex.new)
293
293
  submodule.const_set(:ServiceError, Class.new(ServiceError))
294
294
  end
295
295
 
@@ -7,28 +7,24 @@ require_relative 'json/parser'
7
7
  module Aws
8
8
  # @api private
9
9
  module Json
10
-
11
10
  class ParseError < StandardError
12
-
13
11
  def initialize(error)
14
12
  @error = error
15
13
  super(error.message)
16
14
  end
17
15
 
18
16
  attr_reader :error
19
-
20
17
  end
21
18
 
22
19
  class << self
23
-
24
20
  def load(json)
25
21
  ENGINE.load(json, *ENGINE_LOAD_OPTIONS)
26
22
  rescue *ENGINE_ERRORS => e
27
- raise ParseError.new(e)
23
+ raise ParseError, e
28
24
  end
29
25
 
30
26
  def load_file(path)
31
- self.load(File.open(path, 'r', encoding: 'UTF-8') { |f| f.read })
27
+ load(File.open(path, 'r', encoding: 'UTF-8', &:read))
32
28
  end
33
29
 
34
30
  def dump(value)
@@ -39,7 +35,12 @@ module Aws
39
35
 
40
36
  def oj_engine
41
37
  require 'oj'
42
- [Oj, [{mode: :compat, symbol_keys: false}], [{ mode: :compat }], oj_parse_error]
38
+ [
39
+ Oj,
40
+ [{ mode: :compat, symbol_keys: false }],
41
+ [{ mode: :compat }],
42
+ oj_parse_error
43
+ ]
43
44
  rescue LoadError
44
45
  false
45
46
  end
@@ -50,17 +51,15 @@ module Aws
50
51
 
51
52
  def oj_parse_error
52
53
  if Oj.const_defined?('ParseError')
53
- [Oj::ParseError, EncodingError]
54
+ [Oj::ParseError, EncodingError, JSON::ParserError]
54
55
  else
55
56
  [SyntaxError]
56
57
  end
57
58
  end
58
-
59
59
  end
60
60
 
61
61
  # @api private
62
62
  ENGINE, ENGINE_LOAD_OPTIONS, ENGINE_DUMP_OPTIONS, ENGINE_ERRORS =
63
63
  oj_engine || json_engine
64
-
65
64
  end
66
65
  end
@@ -11,7 +11,7 @@ module Aws
11
11
  #
12
12
  # @api private
13
13
  # begin
14
- SENSITIVE = [:access_token, :account_name, :account_password, :address, :admin_contact, :admin_password, :alexa_for_business_room_arn, :artifact_credentials, :auth_code, :authentication_token, :authorization_result, :backup_plan_tags, :backup_vault_tags, :base_32_string_seed, :block, :block_address, :block_data, :blocks, :body, :bot_configuration, :bot_email, :calling_name, :cause, :client_id, :client_request_token, :client_secret, :comment, :configuration, :copy_source_sse_customer_key, :credentials, :current_password, :custom_attributes, :custom_private_key, :db_password, :default_phone_number, :definition, :description, :destination_access_token, :digest_tip_address, :display_name, :domain_signing_private_key, :e164_phone_number, :email, :email_address, :email_message, :embed_url, :error, :external_model_endpoint_data_blobs, :external_user_id, :feedback_token, :file, :first_name, :full_name, :host_key, :id, :id_token, :input, :input_text, :ion_text, :join_token, :key_id, :key_material, :key_store_password, :kms_key_id, :kms_master_key_id, :lambda_function_arn, :last_name, :local_console_password, :master_account_email, :master_user_name, :master_user_password, :meeting_host_id, :message, :metadata, :name, :new_password, :next_password, :notes, :number, :old_password, :outbound_events_https_endpoint, :output, :owner_information, :parameters, :passphrase, :password, :payload, :phone_number, :plaintext, :previous_password, :primary_email, :primary_provisioned_number, :private_key, :private_key_plaintext, :proof, :proposed_password, :public_key, :qr_code_png, :query, :random_password, :recovery_point_tags, :refresh_token, :registrant_contact, :request_attributes, :restore_metadata, :revision, :search_query, :secret_access_key, :secret_binary, :secret_code, :secret_hash, :secret_string, :secret_to_authenticate_initiator, :secret_to_authenticate_target, :security_token, :service_password, :session_attributes, :session_token, :share_notes, :shared_secret, :slots, :sns_topic_arn, :source_access_token, :sqs_queue_arn, :sse_customer_key, :ssekms_encryption_context, :ssekms_key_id, :status_message, :tag_key_list, :tags, :target_address, :task_parameters, :tech_contact, :temporary_password, :text, :token, :trust_password, :type, :upload_credentials, :upload_url, :uri, :user_data, :user_email, :user_name, :user_password, :username, :value, :values, :variables, :vpn_psk, :zip_file]
14
+ SENSITIVE = [:access_token, :account_name, :account_password, :address, :admin_contact, :admin_password, :alexa_for_business_room_arn, :artifact_credentials, :auth_code, :authentication_token, :authorization_result, :backup_plan_tags, :backup_vault_tags, :base_32_string_seed, :block, :block_address, :block_data, :blocks, :body, :bot_configuration, :bot_email, :calling_name, :cause, :client_id, :client_request_token, :client_secret, :comment, :configuration, :copy_source_sse_customer_key, :credentials, :current_password, :custom_attributes, :custom_private_key, :db_password, :default_phone_number, :definition, :description, :destination_access_token, :digest_tip_address, :display_name, :domain_signing_private_key, :e164_phone_number, :email, :email_address, :email_message, :embed_url, :error, :external_meeting_id, :external_model_endpoint_data_blobs, :external_user_id, :fall_back_phone_number, :feedback_token, :file, :first_name, :full_name, :host_key, :id, :id_token, :input, :input_text, :ion_text, :join_token, :key, :key_id, :key_material, :key_store_password, :kms_key_id, :kms_master_key_id, :lambda_function_arn, :last_name, :local_console_password, :master_account_email, :master_user_name, :master_user_password, :meeting_host_id, :message, :metadata, :name, :new_password, :next_password, :notes, :number, :old_password, :outbound_events_https_endpoint, :output, :owner_information, :parameters, :passphrase, :password, :payload, :phone_number, :plaintext, :previous_password, :primary_email, :primary_provisioned_number, :private_key, :private_key_plaintext, :proof, :proposed_password, :proxy_phone_number, :public_key, :qr_code_png, :query, :random_password, :recovery_point_tags, :refresh_token, :registrant_contact, :request_attributes, :resource_arn, :restore_metadata, :revision, :search_query, :secret_access_key, :secret_binary, :secret_code, :secret_hash, :secret_string, :secret_to_authenticate_initiator, :secret_to_authenticate_target, :security_token, :service_password, :session_attributes, :session_token, :share_notes, :shared_secret, :slots, :sns_topic_arn, :source_access_token, :sqs_queue_arn, :sse_customer_key, :ssekms_encryption_context, :ssekms_key_id, :status_message, :tag_key_list, :tags, :target_address, :task_parameters, :tech_contact, :temporary_password, :text, :token, :trust_password, :type, :upload_credentials, :upload_url, :uri, :user_data, :user_email, :user_name, :user_password, :username, :value, :values, :variables, :vpn_psk, :zip_file]
15
15
  # end
16
16
 
17
17
  def initialize(options = {})
@@ -1,32 +1,46 @@
1
1
  module Aws
2
2
 
3
- # Decorates a {Seahorse::Client::Response} with paging methods:
3
+ # Decorates a {Seahorse::Client::Response} with paging convenience methods.
4
+ # Some AWS calls provide paged responses to limit the amount of data returned
5
+ # with each response. To optimize for latency, some APIs may return an
6
+ # inconsistent number of responses per page. You should rely on the values of
7
+ # the `next_page?` method or using enumerable methods such as `each`
8
+ # rather than the number of items returned to iterate through results.
9
+ # See below for examples.
4
10
  #
5
- # resp = s3.list_objects(params)
6
- # resp.last_page?
7
- # #=> false
11
+ # # Paged Responses Are Enumerable
12
+ # The simplest way to handle paged response data is to use the built-in
13
+ # enumerator in the response object, as shown in the following example.
8
14
  #
9
- # # sends a request to receive the next response page
10
- # resp = resp.next_page
11
- # resp.last_page?
12
- # #=> true
15
+ # s3 = Aws::S3::Client.new
13
16
  #
14
- # resp.next_page
15
- # #=> raises PageableResponse::LastPageError
17
+ # s3.list_objects(bucket:'aws-sdk').each do |response|
18
+ # puts response.contents.map(&:key)
19
+ # end
16
20
  #
17
- # You can enumerate all response pages with a block
21
+ # This yields one response object per API call made, and enumerates objects
22
+ # in the named bucket. The SDK retrieves additional pages of data to
23
+ # complete the request.
18
24
  #
19
- # ec2.describe_instances(params).each do |page|
20
- # # yields once per page
21
- # page.reservations.each do |r|
22
- # # ...
23
- # end
24
- # end
25
+ # # Handling Paged Responses Manually
26
+ # To handle paging yourself, use the response’s `next_page?` method to verify
27
+ # there are more pages to retrieve, or use the last_page? method to verify
28
+ # there are no more pages to retrieve.
29
+ #
30
+ # If there are more pages, use the `next_page` method to retrieve the
31
+ # next page of results, as shown in the following example.
25
32
  #
26
- # Or using {#next_page} and {#last_page?}:
33
+ # s3 = Aws::S3::Client.new
27
34
  #
28
- # resp.last_page?
29
- # resp = resp.next_page until resp.last_page?
35
+ # # Get the first page of data
36
+ # response = s3.list_objects(bucket:'aws-sdk')
37
+ #
38
+ # # Get additional pages
39
+ # while response.next_page? do
40
+ # response = response.next_page
41
+ # # Use the response data here...
42
+ # puts response.contents.map(&:key)
43
+ # end
30
44
  #
31
45
  module PageableResponse
32
46
 
@@ -152,7 +152,7 @@ module Aws
152
152
  def correct_type?(ref, value, errors, context)
153
153
  if ref.eventstream && @input
154
154
  errors << "instead of providing value directly for eventstreams at input,"\
155
- " expected to use #signal events per stream"
155
+ " expected to use #signal events per stream"
156
156
  return false
157
157
  end
158
158
  case value
@@ -9,7 +9,14 @@ module Aws
9
9
 
10
10
  def initialize
11
11
  @mutex = Mutex.new
12
+ # clock_corrections are recorded only on errors
13
+ # and only when time difference is greater than the
14
+ # CLOCK_SKEW_THRESHOLD
12
15
  @endpoint_clock_corrections = Hash.new(0)
16
+
17
+ # estimated_skew is calculated on every request
18
+ # and is used to estimate a TTL for requests
19
+ @endpoint_estimated_skews = Hash.new(nil)
13
20
  end
14
21
 
15
22
  # Gets the clock_correction in seconds to apply to a given endpoint
@@ -18,11 +25,15 @@ module Aws
18
25
  @mutex.synchronize { @endpoint_clock_corrections[endpoint.to_s] }
19
26
  end
20
27
 
21
- # Sets the clock correction for an endpoint
22
- # @param endpoint [URI / String]
23
- # @param correction [Number]
24
- def set_clock_correction(endpoint, correction)
25
- @mutex.synchronize { @endpoint_clock_corrections[endpoint.to_s] = correction }
28
+ # The estimated skew factors in any clock skew from
29
+ # the service along with any network latency.
30
+ # This provides a more accurate value for the ttl,
31
+ # which should represent when the client will stop
32
+ # waiting for a request.
33
+ # Estimated Skew should not be used to correct clock skew errors
34
+ # it should only be used to estimate TTL for a request
35
+ def estimated_skew(endpoint)
36
+ @mutex.synchronize { @endpoint_estimated_skews[endpoint.to_s] }
26
37
  end
27
38
 
28
39
  # Determines whether a request has clock skew by comparing
@@ -30,13 +41,15 @@ module Aws
30
41
  # @param context [Seahorse::Client::RequestContext]
31
42
  def clock_skewed?(context)
32
43
  server_time = server_time(context.http_response)
33
- !!server_time && (Time.now.utc - server_time).abs > CLOCK_SKEW_THRESHOLD
44
+ !!server_time &&
45
+ (Time.now.utc - server_time).abs > CLOCK_SKEW_THRESHOLD
34
46
  end
35
47
 
36
- # Update the stored clock skew value for an endpoint
48
+ # Called only on clock skew related errors
49
+ # Update the stored clock skew correction value for an endpoint
37
50
  # from the server's time in the response
38
51
  # @param context [Seahorse::Client::RequestContext]
39
- def update_clock_skew(context)
52
+ def update_clock_correction(context)
40
53
  endpoint = context.http_request.endpoint
41
54
  now_utc = Time.now.utc
42
55
  server_time = server_time(context.http_response)
@@ -45,6 +58,20 @@ module Aws
45
58
  end
46
59
  end
47
60
 
61
+ # Called for every request
62
+ # Update our estimated clock skew for the endpoint
63
+ # from the servers time in the response
64
+ # @param context [Seahorse::Client::RequestContext]
65
+ def update_estimated_skew(context)
66
+ endpoint = context.http_request.endpoint
67
+ now_utc = Time.now.utc
68
+ server_time = server_time(context.http_response)
69
+ return unless server_time
70
+ @mutex.synchronize do
71
+ @endpoint_estimated_skews[endpoint.to_s] = server_time - now_utc
72
+ end
73
+ end
74
+
48
75
  private
49
76
 
50
77
  # @param response [Seahorse::Client::Http::Response:]
@@ -56,6 +83,14 @@ module Aws
56
83
  end
57
84
  end
58
85
 
86
+ # Sets the clock correction for an endpoint
87
+ # @param endpoint [URI / String]
88
+ # @param correction [Number]
89
+ def set_clock_correction(endpoint, correction)
90
+ @mutex.synchronize do
91
+ @endpoint_clock_corrections[endpoint.to_s] = correction
92
+ end
93
+ end
59
94
  end
60
95
  end
61
96
  end
@@ -97,15 +97,19 @@ This option is only used in the `legacy` retry mode.
97
97
  doc_type: String,
98
98
  docstring: <<-DOCS) do |cfg|
99
99
  Specifies which retry algorithm to use. Values are:
100
- * `legacy` - The pre-existing retry behavior. This is default value if
101
- no retry mode is provided.
102
- * `standard` - A standardized set of retry rules across the AWS SDKs.
103
- This includes support for retry quotas, which limit the number of
104
- unsuccessful retries a client can make.
105
- * `adaptive` - An experimental retry mode that includes all the
106
- functionality of `standard` mode along with automatic client side
107
- throttling. This is a provisional mode that may change behavior
108
- in the future.
100
+
101
+ * `legacy` - The pre-existing retry behavior. This is default value if
102
+ no retry mode is provided.
103
+
104
+ * `standard` - A standardized set of retry rules across the AWS SDKs.
105
+ This includes support for retry quotas, which limit the number of
106
+ unsuccessful retries a client can make.
107
+
108
+ * `adaptive` - An experimental retry mode that includes all the
109
+ functionality of `standard` mode along with automatic client side
110
+ throttling. This is a provisional mode that may change behavior
111
+ in the future.
112
+
109
113
  DOCS
110
114
  resolve_retry_mode(cfg)
111
115
  end
@@ -163,8 +167,8 @@ a clock skew correction and retry requests with skewed client clocks.
163
167
  # Raise if provided value is not one of the retry modes
164
168
  if value != 'legacy' && value != 'standard' && value != 'adaptive'
165
169
  raise ArgumentError,
166
- 'Must provide either `legacy`, `standard`, or `adaptive` for '\
167
- 'retry_mode profile option or for ENV[\'AWS_RETRY_MODE\']'
170
+ 'Must provide either `legacy`, `standard`, or `adaptive` for '\
171
+ 'retry_mode profile option or for ENV[\'AWS_RETRY_MODE\']'
168
172
  end
169
173
  value
170
174
  end
@@ -176,8 +180,8 @@ a clock skew correction and retry requests with skewed client clocks.
176
180
  # Raise if provided value is not a positive integer
177
181
  if !value.is_a?(Integer) || value <= 0
178
182
  raise ArgumentError,
179
- 'Must provide a positive integer for max_attempts profile '\
180
- 'option or for ENV[\'AWS_MAX_ATTEMPTS\']'
183
+ 'Must provide a positive integer for max_attempts profile '\
184
+ 'option or for ENV[\'AWS_MAX_ATTEMPTS\']'
181
185
  end
182
186
  value
183
187
  end
@@ -190,9 +194,9 @@ a clock skew correction and retry requests with skewed client clocks.
190
194
  # Raise if provided value is not true or false
191
195
  if value != 'true' && value != 'false'
192
196
  raise ArgumentError,
193
- 'Must provide either `true` or `false` for '\
194
- 'adaptive_retry_wait_to_fill profile option or for '\
195
- 'ENV[\'AWS_ADAPTIVE_RETRY_WAIT_TO_FILL\']'
197
+ 'Must provide either `true` or `false` for '\
198
+ 'adaptive_retry_wait_to_fill profile option or for '\
199
+ 'ENV[\'AWS_ADAPTIVE_RETRY_WAIT_TO_FILL\']'
196
200
  end
197
201
 
198
202
  value == 'true'
@@ -206,9 +210,9 @@ a clock skew correction and retry requests with skewed client clocks.
206
210
  # Raise if provided value is not true or false
207
211
  if value != 'true' && value != 'false'
208
212
  raise ArgumentError,
209
- 'Must provide either `true` or `false` for '\
210
- 'correct_clock_skew profile option or for '\
211
- 'ENV[\'AWS_CORRECT_CLOCK_SKEW\']'
213
+ 'Must provide either `true` or `false` for '\
214
+ 'correct_clock_skew profile option or for '\
215
+ 'ENV[\'AWS_CORRECT_CLOCK_SKEW\']'
212
216
  end
213
217
 
214
218
  value == 'true'
@@ -223,6 +227,7 @@ a clock skew correction and retry requests with skewed client clocks.
223
227
  config = context.config
224
228
 
225
229
  get_send_token(config)
230
+ add_retry_headers(context)
226
231
  response = @handler.call(context)
227
232
  error_inspector = Retries::ErrorInspector.new(
228
233
  response.error, response.context.http_response.status_code
@@ -235,12 +240,16 @@ a clock skew correction and retry requests with skewed client clocks.
235
240
  config.endpoint_cache.delete(key)
236
241
  end
237
242
 
238
- # Clock skew needs to be updated from the response even when
239
- # the request is not retryable
243
+ # Clock correction needs to be updated from the response even when
244
+ # the request is not retryable but should only be updated
245
+ # in the case of clock skew errors
240
246
  if error_inspector.clock_skew?(context)
241
- config.clock_skew.update_clock_skew(context)
247
+ config.clock_skew.update_clock_correction(context)
242
248
  end
243
249
 
250
+ # Estimated skew needs to be updated on every request
251
+ config.clock_skew.update_estimated_skew(context)
252
+
244
253
  return response unless retryable?(context, response, error_inspector)
245
254
 
246
255
  return response if context.retries >= config.max_attempts - 1
@@ -304,6 +313,35 @@ a clock skew correction and retry requests with skewed client clocks.
304
313
  context.http_response.reset
305
314
  call(context)
306
315
  end
316
+
317
+ def add_retry_headers(context)
318
+ request_pairs = {
319
+ 'attempt' => context.retries,
320
+ 'max' => context.config.max_attempts
321
+ }
322
+ if (ttl = compute_request_ttl(context))
323
+ request_pairs['ttl'] = ttl
324
+ end
325
+
326
+ # create the request header
327
+ formatted_header = request_pairs.map { |k, v| "#{k}=#{v}" }.join('; ')
328
+ context.http_request.headers['amz-sdk-request'] = formatted_header
329
+ end
330
+
331
+ def compute_request_ttl(context)
332
+ return if context.operation.async
333
+
334
+ endpoint = context.http_request.endpoint
335
+ estimated_skew = context.config.clock_skew.estimated_skew(endpoint)
336
+ if context.config.respond_to?(:http_read_timeout)
337
+ read_timeout = context.config.http_read_timeout
338
+ end
339
+
340
+ if estimated_skew && read_timeout
341
+ (Time.now.utc + read_timeout + estimated_skew)
342
+ .strftime('%Y%m%dT%H%M%SZ')
343
+ end
344
+ end
307
345
  end
308
346
 
309
347
  class LegacyHandler < Seahorse::Client::Handler
@@ -50,8 +50,8 @@ module Aws
50
50
  if StringShape === shape_ref.shape.member.shape
51
51
  list_of_strings(shape_ref.location_name, param_value)
52
52
  else
53
- msg = "Only list of strings supported, got "
54
- msg << shape_ref.shape.member.shape.class.name
53
+ msg = "Only list of strings supported, got "\
54
+ "#{shape_ref.shape.member.shape.class.name}"
55
55
  raise NotImplementedError, msg
56
56
  end
57
57
  else
@@ -184,9 +184,9 @@ module Aws
184
184
  credential_source ||= prof_cfg['credential_source']
185
185
  if opts[:source_profile] && credential_source
186
186
  raise Errors::CredentialSourceConflictError,
187
- "Profile #{profile} has a source_profile, and "\
188
- 'a credential_source. For assume role credentials, must '\
189
- 'provide only source_profile or credential_source, not both.'
187
+ "Profile #{profile} has a source_profile, and "\
188
+ 'a credential_source. For assume role credentials, must '\
189
+ 'provide only source_profile or credential_source, not both.'
190
190
  elsif opts[:source_profile]
191
191
  opts[:credentials] = resolve_source_profile(opts[:source_profile], opts)
192
192
  if opts[:credentials]
@@ -199,8 +199,9 @@ module Aws
199
199
  opts[:profile] = opts.delete(:source_profile)
200
200
  AssumeRoleCredentials.new(opts)
201
201
  else
202
- raise Errors::NoSourceProfileError, "Profile #{profile} has a role_arn, and source_profile, but the"\
203
- ' source_profile does not have credentials.'
202
+ raise Errors::NoSourceProfileError,
203
+ "Profile #{profile} has a role_arn, and source_profile, but the"\
204
+ ' source_profile does not have credentials.'
204
205
  end
205
206
  elsif credential_source
206
207
  opts[:credentials] = credentials_from_source(
@@ -217,8 +218,9 @@ module Aws
217
218
  opts.delete(:source_profile) # Cleanup
218
219
  AssumeRoleCredentials.new(opts)
219
220
  else
220
- raise Errors::NoSourceCredentials, "Profile #{profile} could not get source credentials from"\
221
- " provider #{credential_source}"
221
+ raise Errors::NoSourceCredentials,
222
+ "Profile #{profile} could not get source credentials from"\
223
+ " provider #{credential_source}"
222
224
  end
223
225
  elsif prof_cfg['role_arn']
224
226
  raise Errors::NoSourceProfileError, "Profile #{profile} has a role_arn, but no source_profile."
@@ -306,8 +308,8 @@ module Aws
306
308
  def validate_profile_exists(profile)
307
309
  unless (@parsed_credentials && @parsed_credentials[profile]) ||
308
310
  (@parsed_config && @parsed_config[profile])
309
- msg = "Profile `#{profile}' not found in #{@credentials_path}"
310
- msg << " or #{@config_path}" if @config_path
311
+ msg = "Profile `#{profile}' not found in #{@credentials_path}"\
312
+ "#{" or #{@config_path}" if @config_path}"
311
313
  raise Errors::NoSuchProfileError, msg
312
314
  end
313
315
  end
@@ -23,9 +23,9 @@ module Aws
23
23
  xml = []
24
24
  builder = Aws::Xml::DocBuilder.new(target: xml, indent: ' ')
25
25
  builder.node(operation.name + 'Response', xmlns: xmlns(api)) do
26
- if rules = operation.output
26
+ if (rules = operation.output)
27
27
  rules.location_name = operation.name + 'Result'
28
- Xml::Builder.new(rules, target:xml, pad:' ').to_xml(data)
28
+ Xml::Builder.new(rules, target: xml, pad:' ').to_xml(data)
29
29
  end
30
30
  builder.node('ResponseMetadata') do
31
31
  builder.node('RequestId', 'stubbed-request-id')
@@ -94,9 +94,9 @@ module Aws
94
94
  # Pending
95
95
  raise 'Stubbing :exception event is not supported'
96
96
  end
97
- stream << Aws::EventStream::Encoder.new.encode(
98
- Aws::EventStream::Message.new(opts))
99
- stream
97
+ [stream, Aws::EventStream::Encoder.new.encode(
98
+ Aws::EventStream::Message.new(opts)
99
+ )].pack('a*a*')
100
100
  end
101
101
  end
102
102
 
@@ -11,7 +11,7 @@ module Aws
11
11
  @xml = options[:target] || []
12
12
  indent = options[:indent] || ' '
13
13
  pad = options[:pad] || ''
14
- @builder = DocBuilder.new(target:@xml, indent:indent, pad:pad)
14
+ @builder = DocBuilder.new(target: @xml, indent: indent, pad: pad)
15
15
  end
16
16
 
17
17
  def to_xml(params)
@@ -6,7 +6,11 @@ module Aws
6
6
  # @option options [String] :pad ('')
7
7
  # @option options [String] :indent ('')
8
8
  def initialize(options = {})
9
- @target = options[:target] || ''
9
+ @target = options[:target] || (
10
+ # The String has to be mutable
11
+ # because @target implements `<<` method.
12
+ String.new
13
+ )
10
14
  @indent = options[:indent] || ''
11
15
  @pad = options[:pad] || ''
12
16
  @end_of_line = @indent == '' ? '' : "\n"
@@ -32,7 +36,7 @@ module Aws
32
36
  if block_given?
33
37
  @target << open_el(name, attrs)
34
38
  @target << @end_of_line
35
- increase_pad { yield }
39
+ increase_pad(&block)
36
40
  @target << @pad
37
41
  @target << close_el(name)
38
42
  elsif args.empty?
@@ -77,7 +81,7 @@ module Aws
77
81
  def increase_pad(&block)
78
82
  pre_increase = @pad
79
83
  @pad = @pad + @indent
80
- yield
84
+ block.call
81
85
  @pad = pre_increase
82
86
  end
83
87
 
@@ -6,7 +6,7 @@ module Aws
6
6
 
7
7
  def call(context)
8
8
  @handler.call(context).on(300..599) do |response|
9
- response.error = error(context)
9
+ response.error = error(context) unless response.error
10
10
  response.data = nil
11
11
  end
12
12
  end
@@ -15,7 +15,8 @@ module Aws
15
15
 
16
16
  def parse(xml)
17
17
  begin
18
- source = REXML::Source.new(xml)
18
+ mutable_xml = xml.dup # REXML only accepts mutable string
19
+ source = REXML::Source.new(mutable_xml)
19
20
  REXML::Parsers::StreamParser.new(source, self).parse
20
21
  rescue REXML::ParseException => error
21
22
  @stack.error(error.message)
@@ -43,6 +43,6 @@ require_relative 'aws-sdk-sts/customizations'
43
43
  # @service
44
44
  module Aws::STS
45
45
 
46
- GEM_VERSION = '3.91.0'
46
+ GEM_VERSION = '3.94.1'
47
47
 
48
48
  end
@@ -33,11 +33,11 @@ Aws::Plugins::GlobalConfiguration.add_identifier(:sts)
33
33
  module Aws::STS
34
34
  # An API client for STS. To construct a client, you need to configure a `:region` and `:credentials`.
35
35
  #
36
- # client = Aws::STS::Client.new(
37
- # region: region_name,
38
- # credentials: credentials,
39
- # # ...
40
- # )
36
+ # client = Aws::STS::Client.new(
37
+ # region: region_name,
38
+ # credentials: credentials,
39
+ # # ...
40
+ # )
41
41
  #
42
42
  # For details on configuring region and credentials see
43
43
  # the [developer guide](/sdk-for-ruby/v3/developer-guide/setup-config.html).
@@ -231,24 +231,28 @@ module Aws::STS
231
231
  #
232
232
  # @option options [String] :retry_mode ("legacy")
233
233
  # Specifies which retry algorithm to use. Values are:
234
- # * `legacy` - The pre-existing retry behavior. This is default value if
235
- # no retry mode is provided.
236
- # * `standard` - A standardized set of retry rules across the AWS SDKs.
237
- # This includes support for retry quotas, which limit the number of
238
- # unsuccessful retries a client can make.
239
- # * `adaptive` - An experimental retry mode that includes all the
240
- # functionality of `standard` mode along with automatic client side
241
- # throttling. This is a provisional mode that may change behavior
242
- # in the future.
234
+ #
235
+ # * `legacy` - The pre-existing retry behavior. This is default value if
236
+ # no retry mode is provided.
237
+ #
238
+ # * `standard` - A standardized set of retry rules across the AWS SDKs.
239
+ # This includes support for retry quotas, which limit the number of
240
+ # unsuccessful retries a client can make.
241
+ #
242
+ # * `adaptive` - An experimental retry mode that includes all the
243
+ # functionality of `standard` mode along with automatic client side
244
+ # throttling. This is a provisional mode that may change behavior
245
+ # in the future.
246
+ #
243
247
  #
244
248
  # @option options [String] :secret_access_key
245
249
  #
246
250
  # @option options [String] :session_token
247
251
  #
248
- # @option options [String] :sts_regional_endpoints ("legacy")
252
+ # @option options [String] :sts_regional_endpoints ("regional")
249
253
  # Passing in 'regional' to enable regional endpoint for STS for all supported
250
- # regions (except 'aws-global'), defaults to 'legacy' mode, using global endpoint
251
- # for legacy regions.
254
+ # regions (except 'aws-global'). Using 'legacy' mode will force all legacy
255
+ # regions to resolve to the STS global endpoint.
252
256
  #
253
257
  # @option options [Boolean] :stub_responses (false)
254
258
  # Causes the client to return stubbed responses. By default
@@ -272,8 +276,7 @@ module Aws::STS
272
276
  #
273
277
  # @option options [Integer] :http_read_timeout (60) The default
274
278
  # number of seconds to wait for response data. This value can
275
- # safely be set
276
- # per-request on the session yielded by {#session_for}.
279
+ # safely be set per-request on the session.
277
280
  #
278
281
  # @option options [Float] :http_idle_timeout (5) The number of
279
282
  # seconds a connection is allowed to sit idle before it is
@@ -285,7 +288,7 @@ module Aws::STS
285
288
  # request body. This option has no effect unless the request has
286
289
  # "Expect" header set to "100-continue". Defaults to `nil` which
287
290
  # disables this behaviour. This value can safely be set per
288
- # request on the session yielded by {#session_for}.
291
+ # request on the session.
289
292
  #
290
293
  # @option options [Boolean] :http_wire_trace (false) When `true`,
291
294
  # HTTP debug output will be sent to the `:logger`.
@@ -2182,7 +2185,7 @@ module Aws::STS
2182
2185
  params: params,
2183
2186
  config: config)
2184
2187
  context[:gem_name] = 'aws-sdk-core'
2185
- context[:gem_version] = '3.91.0'
2188
+ context[:gem_version] = '3.94.1'
2186
2189
  Seahorse::Client::Request.new(handlers, context)
2187
2190
  end
2188
2191
 
@@ -5,12 +5,12 @@ module Aws
5
5
  class STSRegionalEndpoints < Seahorse::Client::Plugin
6
6
 
7
7
  option(:sts_regional_endpoints,
8
- default: 'legacy',
8
+ default: 'regional',
9
9
  doc_type: String,
10
10
  docstring: <<-DOCS) do |cfg|
11
11
  Passing in 'regional' to enable regional endpoint for STS for all supported
12
- regions (except 'aws-global'), defaults to 'legacy' mode, using global endpoint
13
- for legacy regions.
12
+ regions (except 'aws-global'). Using 'legacy' mode will force all legacy
13
+ regions to resolve to the STS global endpoint.
14
14
  DOCS
15
15
  resolve_sts_regional_endpoints(cfg)
16
16
  end
@@ -22,7 +22,7 @@ for legacy regions.
22
22
  env_mode = nil if env_mode == ''
23
23
  cfg_mode = Aws.shared_config.sts_regional_endpoints(
24
24
  profile: cfg.profile)
25
- env_mode || cfg_mode || 'legacy'
25
+ env_mode || cfg_mode || 'regional'
26
26
  end
27
27
 
28
28
  end
@@ -6,13 +6,7 @@
6
6
  # WARNING ABOUT GENERATED CODE
7
7
 
8
8
  module Aws::STS
9
- # This class provides a resource oriented interface for STS.
10
- # To create a resource object:
11
- # resource = Aws::STS::Resource.new(region: 'us-west-2')
12
- # You can supply a client object with custom configuration that will be used for all resource operations.
13
- # If you do not pass +:client+, a default client will be constructed.
14
- # client = Aws::STS::Client.new(region: 'us-west-2')
15
- # resource = Aws::STS::Resource.new(client: client)
9
+
16
10
  class Resource
17
11
 
18
12
  # @param options ({})
@@ -76,7 +76,7 @@ module Seahorse
76
76
  tcp, addr = _tcp_socket(endpoint)
77
77
  debug_output("opening connection to #{endpoint.host}:#{endpoint.port} ...")
78
78
  _nonblocking_connect(tcp, addr)
79
- debug_output("opened")
79
+ debug_output('opened')
80
80
 
81
81
  @socket = OpenSSL::SSL::SSLSocket.new(tcp, _tls_context)
82
82
  @socket.sync_close = true
@@ -84,12 +84,12 @@ module Seahorse
84
84
 
85
85
  debug_output("starting TLS for #{endpoint.host}:#{endpoint.port} ...")
86
86
  @socket.connect
87
- debug_output("TLS established")
87
+ debug_output('TLS established')
88
88
  _register_h2_callbacks
89
89
  @status = :active
90
90
  elsif @status == :closed
91
- msg = "Async Client HTTP2 Connection is closed, you may"\
92
- " use #new_connection to create a new HTTP2 Connection for this client"
91
+ msg = 'Async Client HTTP2 Connection is closed, you may'\
92
+ ' use #new_connection to create a new HTTP2 Connection for this client'
93
93
  raise Http2ConnectionClosedError.new(msg)
94
94
  end
95
95
  }
@@ -106,7 +106,7 @@ module Seahorse
106
106
  rescue IO::WaitReadable
107
107
  begin
108
108
  unless IO.select([@socket], nil, nil, connection_read_timeout)
109
- self.debug_output("socket connection read time out")
109
+ self.debug_output('socket connection read time out')
110
110
  self.close!
111
111
  else
112
112
  # available, retry to start reading
@@ -132,7 +132,7 @@ module Seahorse
132
132
 
133
133
  def close!
134
134
  @mutex.synchronize {
135
- self.debug_output("closing connection ...")
135
+ self.debug_output('closing connection ...')
136
136
  if @socket
137
137
  @socket.close
138
138
  @socket = nil
@@ -151,10 +151,10 @@ module Seahorse
151
151
 
152
152
  def debug_output(msg, type = nil)
153
153
  prefix = case type
154
- when :send then "-> "
155
- when :receive then "<- "
154
+ when :send then '-> '
155
+ when :receive then '<- '
156
156
  else
157
- ""
157
+ ''
158
158
  end
159
159
  return unless @logger
160
160
  _debug_entry(prefix + msg)
@@ -170,8 +170,8 @@ module Seahorse
170
170
  def _register_h2_callbacks
171
171
  @h2_client.on(:frame) do |bytes|
172
172
  if @socket.nil?
173
- msg = "Connection is closed due to errors, "\
174
- "you can find errors at async_client.connection.errors"
173
+ msg = 'Connection is closed due to errors, '\
174
+ 'you can find errors at async_client.connection.errors'
175
175
  raise Http2ConnectionClosedError.new(msg)
176
176
  else
177
177
  @socket.print(bytes)
@@ -223,7 +223,7 @@ module Seahorse
223
223
  ssl_ctx.verify_mode = OpenSSL::SSL::VERIFY_NONE
224
224
  end
225
225
  if enable_alpn
226
- debug_output("enabling ALPN for TLS ...")
226
+ debug_output('enabling ALPN for TLS ...')
227
227
  ssl_ctx.alpn_protocols = ['h2']
228
228
  end
229
229
  ssl_ctx
@@ -86,8 +86,8 @@ module Seahorse
86
86
  if STEPS.key?(step)
87
87
  @step = step
88
88
  else
89
- msg = "invalid :step `%s', must be one of :initialize, :validate, "
90
- msg << ":build, :sign or :send"
89
+ msg = "invalid :step `%s', must be one of :initialize, :validate, "\
90
+ ':build, :sign or :send'
91
91
  raise ArgumentError, msg % step.inspect
92
92
  end
93
93
  end
@@ -34,8 +34,8 @@ module Seahorse
34
34
  if endpoint.nil? or URI::HTTP === endpoint or URI::HTTPS === endpoint
35
35
  @endpoint = endpoint
36
36
  else
37
- msg = "invalid endpoint, expected URI::HTTP, URI::HTTPS, or nil, "
38
- msg << "got #{endpoint.inspect}"
37
+ msg = 'invalid endpoint, expected URI::HTTP, URI::HTTPS, or nil, '\
38
+ "got #{endpoint.inspect}"
39
39
  raise ArgumentError, msg
40
40
  end
41
41
  end
@@ -55,7 +55,7 @@ module Seahorse
55
55
 
56
56
  # @param [#read, #size, #rewind] io
57
57
  def body=(io)
58
- @body =case io
58
+ @body = case io
59
59
  when nil then StringIO.new('')
60
60
  when String then StringIO.new(io)
61
61
  else io
@@ -109,8 +109,8 @@ module Seahorse
109
109
  @done = true
110
110
  emit(:done)
111
111
  else
112
- msg = "options must be empty or must contain :status_code, :headers, "
113
- msg << "and :body"
112
+ msg = 'options must be empty or must contain :status_code, :headers, '\
113
+ 'and :body'
114
114
  raise ArgumentError, msg
115
115
  end
116
116
  end
@@ -13,8 +13,8 @@ module Seahorse
13
13
  # @api private
14
14
  class TruncatedBodyError < IOError
15
15
  def initialize(bytes_expected, bytes_received)
16
- msg = "http response body truncated, expected #{bytes_expected} "
17
- msg << "bytes, received #{bytes_received} bytes"
16
+ msg = "http response body truncated, expected #{bytes_expected} "\
17
+ "bytes, received #{bytes_received} bytes"
18
18
  super(msg)
19
19
  end
20
20
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aws-sdk-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.91.0
4
+ version: 3.94.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Amazon Web Services
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-09 00:00:00.000000000 Z
11
+ date: 2020-05-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jmespath
@@ -64,7 +64,7 @@ dependencies:
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: '1.0'
67
+ version: '1'
68
68
  - - ">="
69
69
  - !ruby/object:Gem::Version
70
70
  version: 1.0.2
@@ -74,7 +74,7 @@ dependencies:
74
74
  requirements:
75
75
  - - "~>"
76
76
  - !ruby/object:Gem::Version
77
- version: '1.0'
77
+ version: '1'
78
78
  - - ">="
79
79
  - !ruby/object:Gem::Version
80
80
  version: 1.0.2
@@ -294,7 +294,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
294
294
  version: '0'
295
295
  requirements: []
296
296
  rubyforge_project:
297
- rubygems_version: 2.5.2.3
297
+ rubygems_version: 2.7.6.2
298
298
  signing_key:
299
299
  specification_version: 4
300
300
  summary: AWS SDK for Ruby - Core