aws-sdk-core 3.91.0 → 3.94.1

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 (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