aws-sdk-core 2.0.48 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. checksums.yaml +4 -4
  2. data/apis/autoscaling/2011-01-01/api-2.json +636 -33
  3. data/apis/cloudhsm/2014-05-30/api-2.json +3 -6
  4. data/apis/ec2/2014-10-01/api-2.json +10267 -0
  5. data/apis/ec2/2014-10-01/paginators-1.json +125 -0
  6. data/apis/ec2/2014-10-01/resources-1.json +2289 -0
  7. data/apis/ec2/2014-10-01/waiters-2.json +453 -0
  8. data/apis/ec2/2015-03-01/api-2.json +11245 -0
  9. data/apis/ec2/2015-03-01/paginators-1.json +125 -0
  10. data/apis/ec2/2015-03-01/resources-1.json +2479 -0
  11. data/apis/ec2/2015-03-01/waiters-2.json +458 -0
  12. data/apis/ec2/2015-04-15/api-2.json +182 -2
  13. data/apis/ecs/2014-11-13/api-2.json +316 -7
  14. data/apis/ecs/2014-11-13/paginators-1.json +40 -0
  15. data/apis/ecs/2014-11-13/waiters-2.json +93 -0
  16. data/apis/redshift/2012-12-01/waiters-2.json +19 -0
  17. data/apis/s3/2006-03-01/api-2.json +1 -2
  18. data/apis/sqs/2012-11-05/api-2.json +5 -6
  19. data/ca-bundle.crt +3554 -0
  20. data/lib/aws-sdk-core.rb +127 -44
  21. data/lib/aws-sdk-core/api/builder.rb +95 -0
  22. data/lib/aws-sdk-core/api/customizations.rb +152 -0
  23. data/lib/aws-sdk-core/api/docs/builder.rb +220 -0
  24. data/lib/aws-sdk-core/api/docs/client_type_documenter.rb +109 -0
  25. data/lib/aws-sdk-core/api/docs/docstring_provider.rb +66 -0
  26. data/lib/aws-sdk-core/api/docs/operation_documenter.rb +107 -0
  27. data/lib/aws-sdk-core/api/docs/param_formatter.rb +163 -0
  28. data/lib/aws-sdk-core/api/docs/request_syntax_example.rb +22 -0
  29. data/lib/aws-sdk-core/api/docs/response_structure_example.rb +91 -0
  30. data/lib/aws-sdk-core/api/docs/utils.rb +133 -0
  31. data/lib/aws-sdk-core/api/shape_map.rb +140 -0
  32. data/lib/aws-sdk-core/assume_role_credentials.rb +9 -6
  33. data/lib/aws-sdk-core/client.rb +9 -6
  34. data/lib/aws-sdk-core/client_stubs.rb +127 -133
  35. data/lib/aws-sdk-core/client_waiters.rb +1 -1
  36. data/lib/aws-sdk-core/credential_provider.rb +44 -0
  37. data/lib/aws-sdk-core/credential_provider_chain.rb +3 -2
  38. data/lib/aws-sdk-core/credentials.rb +5 -0
  39. data/lib/aws-sdk-core/deprecations.rb +69 -0
  40. data/lib/aws-sdk-core/dynamodb.rb +12 -0
  41. data/lib/aws-sdk-core/eager_loader.rb +31 -0
  42. data/lib/aws-sdk-core/ecs.rb +2 -0
  43. data/lib/aws-sdk-core/empty_structure.rb +1 -82
  44. data/lib/aws-sdk-core/endpoint_provider.rb +1 -1
  45. data/lib/aws-sdk-core/instance_profile_credentials.rb +9 -10
  46. data/lib/aws-sdk-core/json.rb +56 -0
  47. data/lib/aws-sdk-core/json/builder.rb +33 -34
  48. data/lib/aws-sdk-core/json/error_handler.rb +2 -2
  49. data/lib/aws-sdk-core/json/handler.rb +67 -0
  50. data/lib/aws-sdk-core/json/json_engine.rb +15 -0
  51. data/lib/aws-sdk-core/json/oj_engine.rb +15 -0
  52. data/lib/aws-sdk-core/json/parser.rb +30 -38
  53. data/lib/aws-sdk-core/pageable_response.rb +9 -12
  54. data/lib/aws-sdk-core/pager.rb +69 -0
  55. data/lib/aws-sdk-core/param_converter.rb +203 -0
  56. data/lib/aws-sdk-core/param_validator.rb +148 -0
  57. data/lib/aws-sdk-core/plugins/dynamodb_simple_attributes.rb +21 -18
  58. data/lib/aws-sdk-core/plugins/glacier_account_id.rb +9 -1
  59. data/lib/aws-sdk-core/plugins/glacier_checksums.rb +2 -3
  60. data/lib/aws-sdk-core/plugins/param_converter.rb +27 -0
  61. data/lib/aws-sdk-core/plugins/param_validator.rb +28 -0
  62. data/lib/aws-sdk-core/plugins/protocols/json_rpc.rb +3 -7
  63. data/lib/aws-sdk-core/plugins/protocols/rest_json.rb +1 -2
  64. data/lib/aws-sdk-core/plugins/protocols/rest_xml.rb +1 -1
  65. data/lib/aws-sdk-core/plugins/regional_endpoint.rb +1 -1
  66. data/lib/aws-sdk-core/plugins/request_signer.rb +5 -5
  67. data/lib/aws-sdk-core/plugins/response_paging.rb +20 -11
  68. data/lib/aws-sdk-core/plugins/s3_get_bucket_location_fix.rb +1 -1
  69. data/lib/aws-sdk-core/plugins/s3_request_signer.rb +1 -2
  70. data/lib/aws-sdk-core/plugins/stub_responses.rb +25 -27
  71. data/lib/aws-sdk-core/query/ec2_param_builder.rb +29 -34
  72. data/lib/aws-sdk-core/query/handler.rb +32 -18
  73. data/lib/aws-sdk-core/query/param_builder.rb +45 -53
  74. data/lib/aws-sdk-core/refreshing_credentials.rb +3 -15
  75. data/lib/aws-sdk-core/rest/handler.rb +22 -0
  76. data/lib/aws-sdk-core/rest/request/body.rb +58 -0
  77. data/lib/aws-sdk-core/rest/request/builder.rb +50 -0
  78. data/lib/aws-sdk-core/rest/request/endpoint.rb +70 -0
  79. data/lib/aws-sdk-core/rest/request/headers.rb +48 -0
  80. data/lib/aws-sdk-core/rest/response/body.rb +43 -0
  81. data/lib/aws-sdk-core/rest/response/headers.rb +60 -0
  82. data/lib/aws-sdk-core/rest/response/parser.rb +47 -0
  83. data/lib/aws-sdk-core/rest/response/status_code.rb +24 -0
  84. data/lib/aws-sdk-core/shared_credentials.rb +11 -6
  85. data/lib/aws-sdk-core/signers/base.rb +1 -1
  86. data/lib/aws-sdk-core/signers/s3.rb +2 -3
  87. data/lib/aws-sdk-core/signers/v2.rb +7 -4
  88. data/lib/aws-sdk-core/signers/v4.rb +11 -22
  89. data/lib/aws-sdk-core/structure.rb +26 -145
  90. data/lib/aws-sdk-core/stubbing/data_applicator.rb +46 -0
  91. data/lib/aws-sdk-core/stubbing/empty_stub.rb +53 -0
  92. data/lib/aws-sdk-core/stubbing/protocols/ec2.rb +49 -0
  93. data/lib/aws-sdk-core/stubbing/protocols/json.rb +40 -0
  94. data/lib/aws-sdk-core/stubbing/protocols/query.rb +40 -0
  95. data/lib/aws-sdk-core/stubbing/protocols/rest.rb +67 -0
  96. data/lib/aws-sdk-core/stubbing/protocols/rest_json.rb +25 -0
  97. data/lib/aws-sdk-core/stubbing/protocols/rest_xml.rb +38 -0
  98. data/lib/aws-sdk-core/stubbing/stub_data.rb +34 -0
  99. data/lib/aws-sdk-core/version.rb +1 -1
  100. data/lib/aws-sdk-core/xml/builder.rb +58 -52
  101. data/lib/aws-sdk-core/xml/default_map.rb +10 -0
  102. data/lib/aws-sdk-core/xml/doc_builder.rb +86 -0
  103. data/lib/aws-sdk-core/xml/error_handler.rb +7 -2
  104. data/lib/aws-sdk-core/xml/parser.rb +4 -4
  105. data/lib/aws-sdk-core/xml/parser/frame.rb +75 -70
  106. data/lib/aws-sdk-core/xml/parser/stack.rb +4 -4
  107. data/lib/seahorse.rb +0 -11
  108. data/lib/seahorse/client/base.rb +3 -12
  109. data/lib/seahorse/client/http/request.rb +9 -5
  110. data/lib/seahorse/client/plugins/endpoint.rb +5 -56
  111. data/lib/seahorse/client/plugins/restful_bindings.rb +38 -31
  112. data/lib/seahorse/client/request_context.rb +2 -2
  113. data/lib/seahorse/client/response.rb +6 -5
  114. data/lib/seahorse/model/api.rb +18 -61
  115. data/lib/seahorse/model/operation.rb +24 -54
  116. data/lib/seahorse/model/shapes.rb +120 -364
  117. data/lib/seahorse/util.rb +2 -6
  118. metadata +56 -109
  119. data/apis/autoscaling/2011-01-01/docs-2.json +0 -1246
  120. data/apis/cloudformation/2010-05-15/docs-2.json +0 -725
  121. data/apis/cloudfront/2014-11-06/docs-2.json +0 -1125
  122. data/apis/cloudhsm/2014-05-30/docs-2.json +0 -472
  123. data/apis/cloudsearch/2013-01-01/docs-2.json +0 -865
  124. data/apis/cloudsearchdomain/2013-01-01/docs-2.json +0 -311
  125. data/apis/cloudtrail/2013-11-01/docs-2.json +0 -328
  126. data/apis/codedeploy/2014-10-06/docs-2.json +0 -1261
  127. data/apis/cognito-identity/2014-06-30/docs-2.json +0 -506
  128. data/apis/cognito-sync/2014-06-30/docs-2.json +0 -582
  129. data/apis/config/2014-10-17/docs-2.json +0 -513
  130. data/apis/config/2014-11-12/docs-2.json +0 -514
  131. data/apis/datapipeline/2012-10-29/docs-2.json +0 -607
  132. data/apis/directconnect/2012-10-25/docs-2.json +0 -494
  133. data/apis/ds/2015-04-16/docs-2.json +0 -753
  134. data/apis/dynamodb/2011-12-05/api-2.json +0 -949
  135. data/apis/dynamodb/2011-12-05/docs-2.json +0 -606
  136. data/apis/dynamodb/2011-12-05/paginators-1.json +0 -26
  137. data/apis/dynamodb/2011-12-05/waiters-2.json +0 -35
  138. data/apis/dynamodb/2012-08-10/docs-2.json +0 -977
  139. data/apis/ec2/2015-04-15/docs-2.json +0 -5368
  140. data/apis/ecs/2014-11-13/docs-2.json +0 -791
  141. data/apis/elasticache/2015-02-02/docs-2.json +0 -1390
  142. data/apis/elasticbeanstalk/2010-12-01/docs-2.json +0 -1114
  143. data/apis/elasticfilesystem/2015-02-01/docs-2.json +0 -414
  144. data/apis/elasticloadbalancing/2012-06-01/docs-2.json +0 -1078
  145. data/apis/elasticmapreduce/2009-03-31/docs-2.json +0 -969
  146. data/apis/elastictranscoder/2012-09-25/docs-2.json +0 -1152
  147. data/apis/email/2010-12-01/docs-2.json +0 -441
  148. data/apis/glacier/2012-06-01/docs-2.json +0 -575
  149. data/apis/iam/2010-05-08/docs-2.json +0 -2138
  150. data/apis/importexport/2010-06-01/docs-2.json +0 -432
  151. data/apis/kinesis/2013-12-02/docs-2.json +0 -424
  152. data/apis/kms/2014-11-01/docs-2.json +0 -628
  153. data/apis/lambda/2014-11-11/docs-2.json +0 -303
  154. data/apis/lambda/2015-03-31/docs-2.json +0 -490
  155. data/apis/logs/2014-03-28/docs-2.json +0 -599
  156. data/apis/machinelearning/2014-12-12/docs-2.json +0 -1034
  157. data/apis/monitoring/2010-08-01/docs-2.json +0 -514
  158. data/apis/opsworks/2013-02-18/docs-2.json +0 -1592
  159. data/apis/rds/2014-10-31/docs-2.json +0 -2074
  160. data/apis/redshift/2012-12-01/docs-2.json +0 -1890
  161. data/apis/route53/2013-04-01/docs-2.json +0 -1159
  162. data/apis/route53domains/2014-05-15/docs-2.json +0 -620
  163. data/apis/s3/2006-03-01/docs-2.json +0 -2213
  164. data/apis/sdb/2009-04-15/docs-2.json +0 -339
  165. data/apis/sns/2010-03-31/docs-2.json +0 -564
  166. data/apis/sqs/2012-11-05/docs-2.json +0 -503
  167. data/apis/ssm/2014-11-06/docs-2.json +0 -440
  168. data/apis/storagegateway/2013-06-30/docs-2.json +0 -1331
  169. data/apis/sts/2011-06-15/docs-2.json +0 -351
  170. data/apis/support/2013-04-15/docs-2.json +0 -680
  171. data/apis/swf/2012-01-25/docs-2.json +0 -1569
  172. data/apis/workspaces/2015-04-08/docs-2.json +0 -457
  173. data/lib/aws-sdk-core/api/customizer.rb +0 -75
  174. data/lib/aws-sdk-core/api/docstrings.rb +0 -38
  175. data/lib/aws-sdk-core/api/documenter.rb +0 -241
  176. data/lib/aws-sdk-core/api/operation_documenter.rb +0 -173
  177. data/lib/aws-sdk-core/api/operation_example.rb +0 -133
  178. data/lib/aws-sdk-core/api/service_customizations.rb +0 -140
  179. data/lib/aws-sdk-core/client_paging.rb +0 -31
  180. data/lib/aws-sdk-core/json/rest_handler.rb +0 -20
  181. data/lib/aws-sdk-core/json/rpc_body_handler.rb +0 -38
  182. data/lib/aws-sdk-core/json/rpc_headers_handler.rb +0 -34
  183. data/lib/aws-sdk-core/json/simple_body_handler.rb +0 -34
  184. data/lib/aws-sdk-core/paging/null_pager.rb +0 -20
  185. data/lib/aws-sdk-core/paging/null_provider.rb +0 -13
  186. data/lib/aws-sdk-core/paging/pager.rb +0 -70
  187. data/lib/aws-sdk-core/paging/provider.rb +0 -22
  188. data/lib/aws-sdk-core/rest_body_handler.rb +0 -111
  189. data/lib/aws-sdk-core/signers/handler.rb +0 -18
  190. data/lib/aws-sdk-core/xml/rest_handler.rb +0 -20
  191. data/lib/seahorse/client/param_converter.rb +0 -207
  192. data/lib/seahorse/client/param_validator.rb +0 -139
  193. data/lib/seahorse/client/plugins/json_simple.rb +0 -33
  194. data/lib/seahorse/client/plugins/param_conversion.rb +0 -29
  195. data/lib/seahorse/client/plugins/param_validation.rb +0 -30
  196. data/lib/seahorse/client/xml/builder.rb +0 -91
  197. data/lib/seahorse/model/shape_map.rb +0 -47
@@ -13,8 +13,9 @@ module Aws
13
13
  #
14
14
  # If you omit `:client` option, a new {STS::Client} object will be
15
15
  # constructed.
16
- class AssumeRoleCredentials < Credentials
16
+ class AssumeRoleCredentials
17
17
 
18
+ include CredentialProvider
18
19
  include RefreshingCredentials
19
20
 
20
21
  # @option options [required, String] :role_arn
@@ -35,11 +36,13 @@ module Aws
35
36
  private
36
37
 
37
38
  def refresh
38
- creds = @client.assume_role(@options).credentials
39
- @access_key_id = creds.access_key_id
40
- @secret_access_key = creds.secret_access_key
41
- @session_token = creds.session_token
42
- @expiration = creds.expiration
39
+ c = @client.assume_role(@options).credentials
40
+ @credentials = Credentials.new(
41
+ c.access_key_id,
42
+ c.secret_access_key,
43
+ c.session_token
44
+ )
45
+ @expiration = c.expiration
43
46
  end
44
47
 
45
48
  end
@@ -5,16 +5,18 @@ module Aws
5
5
  # @api private
6
6
  DEFAULT_PLUGINS = [
7
7
  'Seahorse::Client::Plugins::Logging',
8
- 'Seahorse::Client::Plugins::RestfulBindings',
9
8
  'Seahorse::Client::Plugins::ContentLength',
9
+ 'Aws::Plugins::ParamConverter',
10
+ 'Aws::Plugins::ParamValidator',
10
11
  'Aws::Plugins::UserAgent',
11
12
  'Aws::Plugins::RetryErrors',
12
13
  'Aws::Plugins::GlobalConfiguration',
13
14
  'Aws::Plugins::RegionalEndpoint',
14
15
  'Aws::Plugins::RequestSigner',
16
+ 'Aws::Plugins::ResponsePaging',
17
+ 'Aws::Plugins::StubResponses',
15
18
  ]
16
19
 
17
- include ClientPaging
18
20
  include ClientStubs
19
21
  include ClientWaiters
20
22
 
@@ -28,11 +30,12 @@ module Aws
28
30
  def define(svc_name, options)
29
31
  client_class = Class.new(self)
30
32
  client_class.identifier = svc_name.downcase.to_sym
31
- [:api, :paginators, :waiters].each do |definition|
32
- client_class.send("set_#{definition}", options[definition])
33
+ client_class.set_api(Api::Builder.build(options[:api], options))
34
+ client_class.set_waiters(options[:waiters])
35
+ DEFAULT_PLUGINS.each do |plugin|
36
+ client_class.add_plugin(plugin)
33
37
  end
34
- DEFAULT_PLUGINS.each { |plugin| client_class.add_plugin(plugin) }
35
- Api::ServiceCustomizations.apply(client_class)
38
+ Api::Customizations.apply_plugins(client_class)
36
39
  client_class
37
40
  end
38
41
 
@@ -8,15 +8,16 @@ module Aws
8
8
  # behavior.
9
9
  module ClientStubs
10
10
 
11
- # @api private
12
- def self.included(subclass)
13
- subclass.add_plugin('Aws::Plugins::StubResponses')
14
- end
15
-
16
11
  def initialize(*args)
17
12
  @stubs = {}
18
13
  @stub_mutex = Mutex.new
19
14
  super
15
+ if Hash === @config.stub_responses
16
+ @config.stub_responses.each do |operation_name, stubs|
17
+ apply_stubs(operation_name, Array === stubs ? stubs : [stubs])
18
+ end
19
+ @config.stub_responses = true
20
+ end
20
21
  end
21
22
 
22
23
  # Configures what data / errors should be returned from the named operation
@@ -24,19 +25,45 @@ module Aws
24
25
  #
25
26
  # ## Basic usage
26
27
  #
27
- # By default, fake responses are generated. You can override the default
28
- # fake data with specific response data by passing a hash.
28
+ # When you enable response stubbing, the client will generate fake
29
+ # responses and will not make any HTTP requests.
29
30
  #
30
- # # enable response stubbing in the client constructor
31
31
  # client = Aws::S3::Client.new(stub_responses: true)
32
+ # client.list_buckets
33
+ # #=> #<struct Aws::S3::Types::ListBucketsOutput buckets=[], owner=nil>
32
34
  #
33
- # # specify the response data for #list_buckets
34
- # client.stub_responses(:list_buckets, buckets:[{name:'aws-sdk'}])
35
+ # You can provide stub data that will be returned by the client.
35
36
  #
36
- # # no api calls made, stub returned
37
- # client.list_buckets.map(&:name)
37
+ # # stub data in the constructor
38
+ # client = Aws::S3::Client.new(stub_responses: {
39
+ # list_buckets: { bukets: [{name: 'my-bucket' }] },
40
+ # get_object: { body: 'data' },
41
+ # })
42
+ #
43
+ # client.list_buckets.buckets.map(&:name) #=> ['my-bucket']
44
+ # client.get_object(bucket:'name', key:'key').body.read #=> 'data'
45
+ #
46
+ # You can also specify the stub data using {#stub_responses}
47
+ #
48
+ # client = Aws::S3::Client.new(stub_responses: true)
49
+ # client.stub_resposnes(:list_buckets, {
50
+ # buckets: [{ name: 'my-bucket' }]
51
+ # })
52
+ #
53
+ # client.list_buckets.buckets.map(&:name) #=> ['my-bucket']
38
54
  # #=> ['aws-sdk']
39
55
  #
56
+ # Lastly, default stubs can be configured via `Aws.config`:
57
+ #
58
+ # Aws.config[:s3] = {
59
+ # stub_responses: {
60
+ # list_buckets: { bukets: [{name: 'my-bucket' }] }
61
+ # }
62
+ # }
63
+ #
64
+ # Aws::S3::Client.new.list_buckets.buckets.map(&:name)
65
+ # #=> ['my-bucket']
66
+ #
40
67
  # ## Stubbing Errors
41
68
  #
42
69
  # When stubbing is enabled, the SDK will default to generate
@@ -55,12 +82,29 @@ module Aws
55
82
  # client.get_object(bucket:'aws-sdk', key:'foo')
56
83
  # #=> raises the given runtime error object
57
84
  #
85
+ # ## Stubbing HTTP Responses
86
+ #
87
+ # As an alternative to providing the response data, you can provide
88
+ # an HTTP response.
89
+ #
90
+ # client.stub_responses(:get_object, {
91
+ # status_code: 200,
92
+ # headers: { 'header-name' => 'header-value' },
93
+ # body: "...",
94
+ # })
95
+ #
96
+ # To stub a HTTP response, pass a Hash with all three of the following
97
+ # keys set:
98
+ #
99
+ # * **`:status_code`** - <Integer> - The HTTP status code
100
+ # * **`:headers`** - Hash<String,String> - A hash of HTTP header keys and values
101
+ # * **`:body`** - <String,IO> - The HTTP response body.
102
+ #
58
103
  # ## Stubbing Multiple Responses
59
104
  #
60
105
  # Calling an operation multiple times will return similar responses.
61
106
  # You can configure multiple stubs and they will be returned in sequence.
62
107
  #
63
- #
64
108
  # client.stub_responses(:head_object, [
65
109
  # 'NotFound',
66
110
  # { content_length: 150 },
@@ -73,12 +117,16 @@ module Aws
73
117
  # resp.content_length #=> 150
74
118
  #
75
119
  # @param [Symbol] operation_name
120
+ #
76
121
  # @param [Mixed] stubs One or more responses to return from the named
77
122
  # operation.
123
+ #
78
124
  # @return [void]
125
+ #
79
126
  # @raise [RuntimeError] Raises a runtime error when called
80
127
  # on a client that has not enabled response stubbing via
81
128
  # `:stub_responses => true`.
129
+ #
82
130
  def stub_responses(operation_name, *stubs)
83
131
  if config.stub_responses
84
132
  apply_stubs(operation_name, stubs.flatten)
@@ -89,12 +137,35 @@ module Aws
89
137
  end
90
138
  end
91
139
 
140
+ # Generates and returns stubbed response data from the named operation.
141
+ #
142
+ # s3 = Aws::S3::Client.new
143
+ # s3.stub_data(:list_buckets)
144
+ # #=> #<struct Aws::S3::Types::ListBucketsOutput buckets=[], owner=#<struct Aws::S3::Types::Owner display_name="DisplayName", id="ID">>
145
+ #
146
+ # In addition to generating default stubs, you can provide data to
147
+ # apply to the response stub.
148
+ #
149
+ # s3.stub_data(:list_buckets, buckets:[{name:'aws-sdk'}])
150
+ # #=> #<struct Aws::S3::Types::ListBucketsOutput
151
+ # buckets=[#<struct Aws::S3::Types::Bucket name="aws-sdk", creation_date=nil>],
152
+ # owner=#<struct Aws::S3::Types::Owner display_name="DisplayName", id="ID">>
153
+ #
154
+ # @param [Symbol] operation_name
155
+ # @param [Hash] data
156
+ # @return [Structure] Returns a stubbed response data structure. The
157
+ # actual class returned will depend on the given `operation_name`.
158
+ def stub_data(operation_name, data = {})
159
+ Stubbing::StubData.new(operation(operation_name)).stub(data)
160
+ end
161
+
92
162
  # @api private
93
163
  def next_stub(operation_name)
164
+ operation_name = operation_name.to_sym
94
165
  @stub_mutex.synchronize do
95
- stubs = @stubs[operation_name.to_sym] || []
166
+ stubs = @stubs[operation_name] || []
96
167
  case stubs.length
97
- when 0 then new_stub(operation_name)
168
+ when 0 then default_stub(operation_name)
98
169
  when 1 then stubs.first
99
170
  else stubs.shift
100
171
  end
@@ -103,141 +174,64 @@ module Aws
103
174
 
104
175
  private
105
176
 
106
- # @param [Symbol] operation_name
107
- # @param [Hash, nil] data
108
- # @return [Structure]
109
- def new_stub(operation_name, data = nil)
110
- Stub.new(operation(operation_name).output).format(data || {})
177
+ def default_stub(operation_name)
178
+ stub = stub_data(operation_name)
179
+ http_response_stub(operation_name, stub)
111
180
  end
112
181
 
182
+ # This method converts the given stub data and converts it to a
183
+ # HTTP response (when possible). This enables the response stubbing
184
+ # plugin to provide a HTTP response that triggers all normal events
185
+ # during response handling.
113
186
  def apply_stubs(operation_name, stubs)
114
187
  @stub_mutex.synchronize do
115
188
  @stubs[operation_name.to_sym] = stubs.map do |stub|
116
189
  case stub
117
- when Exception then stub
118
- when String then service_error_class(stub)
119
- when Hash then new_stub(operation_name, stub)
120
- else stub
190
+ when Exception, Class then { error: stub }
191
+ when String then service_error_stub(stub)
192
+ when Hash then http_response_stub(operation_name, stub)
193
+ else { data: stub }
121
194
  end
122
195
  end
123
196
  end
124
197
  end
125
198
 
126
- def service_error_class(name)
127
- svc_module = Aws.const_get(self.class.name.split('::')[1])
128
- svc_module.const_get(:Errors).const_get(name)
199
+ def service_error_stub(error_code)
200
+ { http: protocol_helper.stub_error(error_code) }
129
201
  end
130
202
 
131
- class Stub
132
-
133
- # @param [Seahorse::Models::Shapes::Structure] output_shape This should
134
- # be the output shape for an operation.
135
- def initialize(output_shape)
136
- @shape = output_shape
137
- end
138
-
139
- # @param [Hash] data An optional hash of data to format into the stubbed
140
- # object.
141
- def format(data = {})
142
- if @shape.nil?
143
- empty_stub(data)
144
- else
145
- validate_data(data)
146
- stub(@shape, data)
147
- end
148
- end
149
-
150
- private
151
-
152
- def stub(shape, value)
153
- case shape
154
- when Seahorse::Model::Shapes::Structure then stub_structure(shape, value)
155
- when Seahorse::Model::Shapes::List then stub_list(shape, value || [])
156
- when Seahorse::Model::Shapes::Map then stub_map(shape, value || {})
157
- else stub_scalar(shape, value)
158
- end
159
- end
160
-
161
- def stub_structure(shape, hash)
162
- if hash
163
- structure_obj(shape, hash)
164
- else
165
- nil
166
- end
167
- end
168
-
169
- def structure_obj(shape, hash)
170
- stubs = Structure.new(shape.member_names)
171
- shape.members.each do |member_name, member_shape|
172
- if hash.key?(member_name) && hash[member_name].nil?
173
- stubs[member_name] = nil
174
- else
175
- value = structure_value(shape, member_name, member_shape, hash)
176
- stubs[member_name] = stub(member_shape, value)
177
- end
178
- end
179
- stubs
180
- end
181
-
182
- def structure_value(shape, member_name, member_shape, hash)
183
- if hash.key?(member_name)
184
- hash[member_name]
185
- elsif
186
- Seahorse::Model::Shapes::Structure === member_shape &&
187
- shape.required.include?(member_name)
188
- then
189
- {}
190
- else
191
- nil
192
- end
193
- end
194
-
195
- def stub_list(shape, array)
196
- stubs = []
197
- array.each do |value|
198
- stubs << stub(shape.member, value)
199
- end
200
- stubs
201
- end
202
-
203
- def stub_map(shape, value)
204
- stubs = {}
205
- value.each do |key, value|
206
- stubs[key] = stub(shape.value, value)
207
- end
208
- stubs
209
- end
210
-
211
- def stub_scalar(shape, value)
212
- if value.nil?
213
- case shape
214
- when Seahorse::Model::Shapes::String then shape.name
215
- when Seahorse::Model::Shapes::Integer then 0
216
- when Seahorse::Model::Shapes::Float then 0.0
217
- when Seahorse::Model::Shapes::Boolean then false
218
- when Seahorse::Model::Shapes::Timestamp then Time.now
219
- else nil
220
- end
221
- else
222
- value
223
- end
203
+ def http_response_stub(operation_name, data)
204
+ if Hash === data && data.keys.sort == [:body, :headers, :status_code]
205
+ { http: hash_to_http_resp(data) }
206
+ else
207
+ { http: data_to_http_resp(operation_name, data) }
224
208
  end
209
+ end
225
210
 
226
- def empty_stub(data)
227
- if data.empty?
228
- Structure.new(data)
229
- else
230
- msg = 'unable to generate a stubbed response from the given data; '
231
- msg << 'this operation does not return data'
232
- raise ArgumentError, msg
233
- end
234
- end
211
+ def hash_to_http_resp(data)
212
+ http_resp = Seahorse::Client::Http::Response.new
213
+ http_resp.status_code = data[:status_code]
214
+ http_resp.headers.update(data[:headers])
215
+ http_resp.body = data[:body]
216
+ http_resp
217
+ end
235
218
 
236
- def validate_data(data)
237
- args = [@shape, { validate_required:false }]
238
- Seahorse::Client::ParamValidator.new(*args).validate!(data)
239
- end
219
+ def data_to_http_resp(operation_name, data)
220
+ api = config.api
221
+ operation = api.operation(operation_name)
222
+ ParamValidator.validate!(operation.output, data)
223
+ protocol_helper.stub_data(api, operation, data)
224
+ end
240
225
 
226
+ def protocol_helper
227
+ case config.api.metadata['protocol']
228
+ when 'json' then Stubbing::Protocols::Json
229
+ when 'query' then Stubbing::Protocols::Query
230
+ when 'ec2' then Stubbing::Protocols::EC2
231
+ when 'rest-json' then Stubbing::Protocols::RestJson
232
+ when 'rest-xml' then Stubbing::Protocols::RestXml
233
+ else raise "unsupported protocol"
234
+ end.new
241
235
  end
242
236
  end
243
237
  end
@@ -10,7 +10,7 @@ module Aws
10
10
  case waiters
11
11
  when Waiters::Provider then waiters
12
12
  when Hash then Waiters::Provider.new(waiters)
13
- when String, Pathname then Waiters::Provider.new(Aws.load_json(waiters))
13
+ when String, Pathname then Waiters::Provider.new(Json.load_file(waiters))
14
14
  when nil then Waiters::NullProvider.new
15
15
  else raise ArgumentError, 'invalid waiters'
16
16
  end
@@ -0,0 +1,44 @@
1
+ module Aws
2
+ module CredentialProvider
3
+
4
+ extend Deprecations
5
+
6
+ # @return [Credentials]
7
+ def credentials
8
+ @credentials
9
+ end
10
+
11
+ # @return [Boolean]
12
+ def set?
13
+ !!@credentials && @credentials.set?
14
+ end
15
+
16
+ # @deprecated Deprecated in 2.1.0. This method is subject to errors
17
+ # from a race condition when called against refreshable credential
18
+ # objects. Will be removed in 2.2.0.
19
+ # @see #credentials
20
+ def access_key_id
21
+ @credentials ? @credentials.access_key_id : nil
22
+ end
23
+ deprecated(:access_key_id, use: '#credentials')
24
+
25
+ # @deprecated Deprecated in 2.1.0. This method is subject to errors
26
+ # from a race condition when called against refreshable credential
27
+ # objects. Will be removed in 2.2.0.
28
+ # @see #credentials
29
+ def secret_access_key
30
+ @credentials ? @credentials.secret_access_key : nil
31
+ end
32
+ deprecated(:secret_access_key, use: '#credentials')
33
+
34
+ # @deprecated Deprecated in 2.1.0. This method is subject to errors
35
+ # from a race condition when called against refreshable credential
36
+ # objects. Will be removed in 2.2.0.
37
+ # @see #credentials
38
+ def session_token
39
+ @credentials ? @credentials.session_token : nil
40
+ end
41
+ deprecated(:session_token, use: '#credentials')
42
+
43
+ end
44
+ end