aws-sdk 1.1.3 → 1.1.4

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 (233) hide show
  1. data/ca-bundle.crt +2 -348
  2. data/lib/aws.rb +24 -49
  3. data/lib/aws/{common.rb → core.rb} +120 -9
  4. data/lib/aws/{api_config.rb → core/api_config.rb} +19 -20
  5. data/lib/aws/core/api_config_transform.rb +36 -0
  6. data/lib/aws/core/async_handle.rb +91 -0
  7. data/lib/aws/core/authorize_v2.rb +39 -0
  8. data/lib/aws/{authorize_v3.rb → core/authorize_v3.rb} +16 -15
  9. data/lib/aws/{api_config_transform.rb → core/authorize_with_session_token.rb} +9 -12
  10. data/lib/aws/core/autoloader.rb +64 -0
  11. data/lib/aws/core/cacheable.rb +78 -0
  12. data/lib/aws/core/client.rb +471 -0
  13. data/lib/aws/core/client_logging.rb +125 -0
  14. data/lib/aws/core/collections.rb +229 -0
  15. data/lib/aws/core/configuration.rb +358 -0
  16. data/lib/aws/core/configured_client_methods.rb +76 -0
  17. data/lib/aws/core/configured_grammars.rb +63 -0
  18. data/lib/aws/{configured_option_grammars.rb → core/configured_option_grammars.rb} +18 -20
  19. data/lib/aws/{configured_xml_grammars.rb → core/configured_xml_grammars.rb} +19 -21
  20. data/lib/aws/core/default_signer.rb +67 -0
  21. data/lib/aws/core/http/curb_handler.rb +129 -0
  22. data/lib/aws/core/http/handler.rb +77 -0
  23. data/lib/aws/core/http/httparty_handler.rb +113 -0
  24. data/lib/aws/core/http/net_http_handler.rb +124 -0
  25. data/lib/aws/core/http/request.rb +207 -0
  26. data/lib/aws/core/http/response.rb +73 -0
  27. data/lib/aws/{ignore_result_element.rb → core/ignore_result_element.rb} +14 -18
  28. data/lib/aws/core/indifferent_hash.rb +88 -0
  29. data/lib/aws/core/inflection.rb +47 -0
  30. data/lib/aws/core/lazy_error_classes.rb +62 -0
  31. data/lib/aws/{uri_escape.rb → core/meta_utils.rb} +24 -23
  32. data/lib/aws/core/model.rb +57 -0
  33. data/lib/aws/{authorize_with_session_token.rb → core/naming.rb} +9 -8
  34. data/lib/aws/core/option_grammar.rb +562 -0
  35. data/lib/aws/core/policy.rb +914 -0
  36. data/lib/aws/core/resource.rb +380 -0
  37. data/lib/aws/core/resource_cache.rb +40 -0
  38. data/lib/aws/core/response.rb +125 -0
  39. data/lib/aws/core/response_cache.rb +50 -0
  40. data/lib/aws/core/service_interface.rb +60 -0
  41. data/lib/aws/core/uri_escape.rb +46 -0
  42. data/lib/aws/core/xml_grammar.rb +926 -0
  43. data/lib/aws/ec2.rb +47 -16
  44. data/lib/aws/ec2/attachment.rb +0 -2
  45. data/lib/aws/ec2/attachment_collection.rb +1 -6
  46. data/lib/aws/ec2/availability_zone.rb +0 -2
  47. data/lib/aws/ec2/availability_zone_collection.rb +0 -3
  48. data/lib/aws/ec2/client.rb +6 -9
  49. data/lib/aws/ec2/client/xml.rb +3 -6
  50. data/lib/aws/ec2/collection.rb +1 -4
  51. data/lib/aws/ec2/config.rb +18 -0
  52. data/lib/aws/ec2/elastic_ip.rb +0 -2
  53. data/lib/aws/ec2/elastic_ip_collection.rb +0 -4
  54. data/lib/aws/ec2/errors.rb +1 -4
  55. data/lib/aws/ec2/has_permissions.rb +0 -2
  56. data/lib/aws/ec2/image.rb +0 -5
  57. data/lib/aws/ec2/image_collection.rb +0 -6
  58. data/lib/aws/ec2/instance.rb +23 -9
  59. data/lib/aws/ec2/instance_collection.rb +85 -22
  60. data/lib/aws/ec2/key_pair.rb +0 -2
  61. data/lib/aws/ec2/key_pair_collection.rb +1 -4
  62. data/lib/aws/ec2/permission_collection.rb +2 -5
  63. data/lib/aws/ec2/region.rb +0 -2
  64. data/lib/aws/ec2/region_collection.rb +0 -4
  65. data/lib/aws/ec2/request.rb +4 -9
  66. data/lib/aws/ec2/reserved_instances.rb +0 -3
  67. data/lib/aws/ec2/reserved_instances_collection.rb +0 -4
  68. data/lib/aws/ec2/reserved_instances_offering.rb +0 -3
  69. data/lib/aws/ec2/reserved_instances_offering_collection.rb +0 -4
  70. data/lib/aws/ec2/resource.rb +3 -5
  71. data/lib/aws/ec2/resource_tag_collection.rb +1 -6
  72. data/lib/aws/ec2/security_group.rb +204 -72
  73. data/lib/aws/ec2/security_group/egress_ip_permission_collection.rb +53 -0
  74. data/lib/aws/ec2/security_group/ip_permission.rb +92 -10
  75. data/lib/aws/ec2/security_group/ip_permission_collection.rb +14 -15
  76. data/lib/aws/ec2/security_group_collection.rb +11 -8
  77. data/lib/aws/ec2/snapshot.rb +0 -4
  78. data/lib/aws/ec2/snapshot_collection.rb +0 -4
  79. data/lib/aws/ec2/tag.rb +0 -3
  80. data/lib/aws/ec2/tag_collection.rb +1 -8
  81. data/lib/aws/ec2/tagged_item.rb +1 -3
  82. data/lib/aws/ec2/volume.rb +0 -6
  83. data/lib/aws/ec2/volume_collection.rb +0 -4
  84. data/lib/aws/errors.rb +0 -3
  85. data/lib/aws/iam.rb +33 -12
  86. data/lib/aws/iam/access_key.rb +0 -3
  87. data/lib/aws/iam/access_key_collection.rb +0 -3
  88. data/lib/aws/iam/account_alias_collection.rb +0 -2
  89. data/lib/aws/iam/client.rb +6 -8
  90. data/lib/aws/iam/client/xml.rb +4 -8
  91. data/lib/aws/iam/collection.rb +2 -5
  92. data/lib/aws/iam/config.rb +18 -0
  93. data/lib/aws/iam/errors.rb +2 -4
  94. data/lib/aws/iam/group.rb +0 -5
  95. data/lib/aws/iam/group_collection.rb +0 -3
  96. data/lib/aws/iam/group_policy_collection.rb +0 -2
  97. data/lib/aws/iam/group_user_collection.rb +1 -4
  98. data/lib/aws/iam/login_profile.rb +0 -2
  99. data/lib/aws/iam/mfa_device.rb +1 -3
  100. data/lib/aws/iam/mfa_device_collection.rb +0 -3
  101. data/lib/aws/iam/policy.rb +2 -4
  102. data/lib/aws/iam/policy_collection.rb +0 -3
  103. data/lib/aws/iam/request.rb +3 -7
  104. data/lib/aws/iam/resource.rb +1 -4
  105. data/lib/aws/iam/server_certificate.rb +0 -2
  106. data/lib/aws/iam/server_certificate_collection.rb +0 -3
  107. data/lib/aws/iam/signing_certificate.rb +0 -2
  108. data/lib/aws/iam/signing_certificate_collection.rb +0 -3
  109. data/lib/aws/iam/user.rb +0 -7
  110. data/lib/aws/iam/user_collection.rb +0 -3
  111. data/lib/aws/iam/user_group_collection.rb +0 -3
  112. data/lib/aws/iam/user_policy.rb +0 -2
  113. data/lib/aws/iam/user_policy_collection.rb +0 -3
  114. data/lib/aws/rails.rb +5 -4
  115. data/lib/aws/record.rb +4 -1
  116. data/lib/aws/record/base.rb +3 -2
  117. data/lib/aws/record/errors.rb +1 -3
  118. data/lib/aws/s3.rb +31 -6
  119. data/lib/aws/s3/access_control_list.rb +0 -2
  120. data/lib/aws/s3/acl_object.rb +10 -12
  121. data/lib/aws/s3/bucket.rb +1 -9
  122. data/lib/aws/s3/bucket_collection.rb +2 -5
  123. data/lib/aws/s3/bucket_version_collection.rb +1 -5
  124. data/lib/aws/s3/client.rb +34 -37
  125. data/lib/aws/s3/client/xml.rb +11 -14
  126. data/lib/aws/{resource_cache.rb → s3/config.rb} +6 -20
  127. data/lib/aws/s3/errors.rb +6 -7
  128. data/lib/aws/s3/multipart_upload.rb +1 -4
  129. data/lib/aws/s3/multipart_upload_collection.rb +1 -6
  130. data/lib/aws/s3/object_collection.rb +1 -5
  131. data/lib/aws/s3/object_metadata.rb +1 -3
  132. data/lib/aws/s3/object_upload_collection.rb +1 -7
  133. data/lib/aws/s3/object_version.rb +1 -4
  134. data/lib/aws/s3/object_version_collection.rb +1 -4
  135. data/lib/aws/s3/policy.rb +3 -5
  136. data/lib/aws/s3/prefix_and_delimiter_collection.rb +0 -2
  137. data/lib/aws/s3/prefixed_collection.rb +0 -2
  138. data/lib/aws/s3/presigned_post.rb +1 -3
  139. data/lib/aws/s3/request.rb +2 -5
  140. data/lib/aws/s3/s3_object.rb +1 -8
  141. data/lib/aws/s3/tree.rb +8 -6
  142. data/lib/aws/s3/tree/branch_node.rb +0 -3
  143. data/lib/aws/s3/tree/child_collection.rb +1 -5
  144. data/lib/aws/s3/tree/leaf_node.rb +0 -5
  145. data/lib/aws/s3/tree/parent.rb +1 -4
  146. data/lib/aws/s3/uploaded_part.rb +1 -3
  147. data/lib/aws/s3/uploaded_part_collection.rb +1 -5
  148. data/lib/aws/simple_db.rb +21 -6
  149. data/lib/aws/simple_db/attribute.rb +1 -6
  150. data/lib/aws/simple_db/attribute_collection.rb +1 -7
  151. data/lib/aws/simple_db/client.rb +7 -9
  152. data/lib/aws/simple_db/client/options.rb +2 -4
  153. data/lib/aws/simple_db/client/xml.rb +5 -10
  154. data/lib/aws/{naming.rb → simple_db/config.rb} +3 -14
  155. data/lib/aws/simple_db/delete_attributes.rb +0 -2
  156. data/lib/aws/simple_db/domain.rb +1 -6
  157. data/lib/aws/simple_db/domain_collection.rb +1 -4
  158. data/lib/aws/simple_db/domain_metadata.rb +1 -3
  159. data/lib/aws/simple_db/errors.rb +1 -4
  160. data/lib/aws/simple_db/item.rb +1 -7
  161. data/lib/aws/simple_db/item_collection.rb +22 -23
  162. data/lib/aws/simple_db/put_attributes.rb +0 -2
  163. data/lib/aws/simple_db/request.rb +3 -7
  164. data/lib/aws/simple_email_service.rb +11 -6
  165. data/lib/aws/simple_email_service/client.rb +7 -9
  166. data/lib/aws/simple_email_service/client/options.rb +3 -6
  167. data/lib/aws/simple_email_service/client/xml.rb +4 -8
  168. data/lib/aws/simple_email_service/config.rb +19 -0
  169. data/lib/aws/simple_email_service/email_address_collection.rb +1 -3
  170. data/lib/aws/simple_email_service/errors.rb +1 -4
  171. data/lib/aws/simple_email_service/quotas.rb +1 -3
  172. data/lib/aws/simple_email_service/request.rb +3 -7
  173. data/lib/aws/sns.rb +15 -8
  174. data/lib/aws/sns/client.rb +7 -8
  175. data/lib/aws/sns/client/options.rb +3 -6
  176. data/lib/aws/sns/client/xml.rb +4 -8
  177. data/lib/aws/sns/config.rb +18 -0
  178. data/lib/aws/sns/errors.rb +1 -4
  179. data/lib/aws/sns/policy.rb +3 -5
  180. data/lib/aws/sns/request.rb +4 -9
  181. data/lib/aws/sns/subscription.rb +1 -5
  182. data/lib/aws/sns/subscription_collection.rb +1 -5
  183. data/lib/aws/sns/topic.rb +1 -6
  184. data/lib/aws/sns/topic_collection.rb +1 -4
  185. data/lib/aws/sns/topic_subscription_collection.rb +1 -4
  186. data/lib/aws/sqs.rb +14 -5
  187. data/lib/aws/sqs/client.rb +6 -9
  188. data/lib/aws/sqs/client/xml.rb +4 -7
  189. data/lib/aws/sqs/config.rb +18 -0
  190. data/lib/aws/sqs/errors.rb +1 -4
  191. data/lib/aws/sqs/policy.rb +3 -5
  192. data/lib/aws/sqs/queue.rb +2 -7
  193. data/lib/aws/sqs/queue_collection.rb +4 -5
  194. data/lib/aws/sqs/received_message.rb +1 -3
  195. data/lib/aws/sqs/received_sns_message.rb +2 -2
  196. data/lib/aws/sqs/request.rb +4 -7
  197. data/lib/aws/sts.rb +12 -6
  198. data/lib/aws/sts/client.rb +6 -8
  199. data/lib/aws/sts/client/xml.rb +4 -8
  200. data/lib/aws/sts/config.rb +18 -0
  201. data/lib/aws/sts/errors.rb +1 -4
  202. data/lib/aws/sts/federated_session.rb +0 -2
  203. data/lib/aws/sts/policy.rb +3 -5
  204. data/lib/aws/sts/request.rb +3 -7
  205. metadata +60 -50
  206. data/lib/aws/async_handle.rb +0 -90
  207. data/lib/aws/authorize_v2.rb +0 -37
  208. data/lib/aws/base_client.rb +0 -488
  209. data/lib/aws/cacheable.rb +0 -79
  210. data/lib/aws/client_logging.rb +0 -122
  211. data/lib/aws/collections.rb +0 -230
  212. data/lib/aws/configuration.rb +0 -357
  213. data/lib/aws/configured_client_methods.rb +0 -81
  214. data/lib/aws/configured_grammars.rb +0 -65
  215. data/lib/aws/default_signer.rb +0 -65
  216. data/lib/aws/http/curb_handler.rb +0 -127
  217. data/lib/aws/http/handler.rb +0 -77
  218. data/lib/aws/http/httparty_handler.rb +0 -103
  219. data/lib/aws/http/request.rb +0 -165
  220. data/lib/aws/http/request_param.rb +0 -64
  221. data/lib/aws/http/response.rb +0 -72
  222. data/lib/aws/indifferent_hash.rb +0 -86
  223. data/lib/aws/inflection.rb +0 -46
  224. data/lib/aws/lazy_error_classes.rb +0 -64
  225. data/lib/aws/meta_utils.rb +0 -43
  226. data/lib/aws/model.rb +0 -57
  227. data/lib/aws/option_grammar.rb +0 -565
  228. data/lib/aws/policy.rb +0 -914
  229. data/lib/aws/resource.rb +0 -381
  230. data/lib/aws/response.rb +0 -125
  231. data/lib/aws/response_cache.rb +0 -50
  232. data/lib/aws/service_interface.rb +0 -60
  233. data/lib/aws/xml_grammar.rb +0 -925
@@ -0,0 +1,380 @@
1
+
2
+ # Copyright 2011 Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
5
+ # may not use this file except in compliance with the License. A copy of
6
+ # the License is located at
7
+ #
8
+ # http://aws.amazon.com/apache2.0/
9
+ #
10
+ # or in the "license" file accompanying this file. This file is
11
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
12
+ # ANY KIND, either express or implied. See the License for the specific
13
+ # language governing permissions and limitations under the License.
14
+
15
+ module AWS
16
+ module Core
17
+
18
+ # @private
19
+ class Resource
20
+
21
+ include Model
22
+ include Cacheable
23
+
24
+ # @private
25
+ class NotFound < StandardError; end
26
+
27
+ def initialize *args
28
+
29
+ super
30
+
31
+ # cache static attributes passed into options
32
+
33
+ options = args.last.is_a?(Hash) ? args.last : {}
34
+ options.each_pair do |opt_name,opt_value|
35
+ if
36
+ self.class.attributes.has_key?(opt_name) and
37
+ self.class.attributes[opt_name].static?
38
+ then
39
+ static_attributes[opt_name] = opt_value
40
+ end
41
+ end
42
+
43
+ end
44
+
45
+ # @return [String] Returns a simple string representation of this resource.
46
+ def inspect
47
+
48
+ identifiers = []
49
+ resource_identifiers.each do |key, value|
50
+ if attr = self.class.attributes.values.find{|a| a.get_as == key }
51
+ identifiers << "#{attr.name}:#{value}"
52
+ else
53
+ identifiers << "#{key}:#{value}"
54
+ end
55
+ end
56
+
57
+ "<#{self::class} #{identifiers.join(' ')}>"
58
+
59
+ end
60
+
61
+ # @return [Boolean] Returns true if the objects references the same
62
+ # AWS resource.
63
+ def == other
64
+ other.kind_of?(self.class) and
65
+ resource_identifiers == other.resource_identifiers
66
+ end
67
+
68
+ alias_method :eql?, :==
69
+
70
+ # @private
71
+ protected
72
+ def get_resource attr_name
73
+ raise NotImplementedError
74
+ end
75
+
76
+ # @private
77
+ protected
78
+ def update_resource attr, value
79
+ raise NotImplementedError
80
+ end
81
+
82
+ # Overide this method is subclasses of Resource. This method should
83
+ # return an array of identifying key/value pairs.
84
+ #
85
+ # # @private
86
+ # protected
87
+ # def resource_identifiers
88
+ # [[:user_name, name]]
89
+ # end
90
+ #
91
+ # @private
92
+ protected
93
+ def resource_identifiers
94
+ raise NotImplementedError
95
+ end
96
+
97
+ # @protected
98
+ protected
99
+ def resource_options(additional = {})
100
+ Hash[resource_identifiers].merge(additional)
101
+ end
102
+
103
+ # @private
104
+ protected
105
+ def local_cache_key
106
+ resource_identifiers.collect{|name,value| value.to_s }.join(":")
107
+ end
108
+
109
+ # @private
110
+ protected
111
+ def static_attributes
112
+ @static_attributes ||= {}
113
+ end
114
+
115
+ # @private
116
+ protected
117
+ def ruby_name
118
+ @ruby_name ||= Inflection.ruby_name(self.class.name)
119
+ end
120
+
121
+ # @private
122
+ public
123
+ def attributes_from_response resp
124
+
125
+ attributes = {}
126
+
127
+ self.class.attribute_providers_for(resp.request_type).each do |provider|
128
+ attributes.merge!(provider.attributes_from_response(self, resp))
129
+ end
130
+
131
+ # cache static attributes
132
+ attributes.each do |attr_name,value|
133
+ if self.class.attributes[attr_name].static?
134
+ static_attributes[attr_name] = value
135
+ end
136
+ end
137
+
138
+ attributes.empty? ? nil : attributes
139
+
140
+ end
141
+
142
+ # @private
143
+ protected
144
+ def cache_static_attributes request_type, resp_obj
145
+ self.class.attribute_providers_for(request_type).each do |provider|
146
+ attributes = provider.attributes_from_response_object(resp_obj)
147
+ attributes.each_pair do |attr_name,value|
148
+ if self.class.attributes[attr_name].static?
149
+ static_attributes[attr_name] = value
150
+ end
151
+ end
152
+ end
153
+ end
154
+
155
+
156
+ class << self
157
+
158
+ # @private
159
+ def new_from request_type, resp_obj, *args
160
+ resource = new(*args)
161
+ resource.send(:cache_static_attributes, request_type, resp_obj)
162
+ resource
163
+ end
164
+
165
+ # @private
166
+ def attributes
167
+ @attributes ||= Hash.new do |hash,attr_name|
168
+ raise "uknown attribute #{attr_name}"
169
+ end
170
+ end
171
+
172
+ # @private
173
+ def attribute_providers
174
+ @attribute_providers ||= []
175
+ end
176
+
177
+ # @private
178
+ def attribute_providers_for request_type
179
+ attribute_providers.select do |provider|
180
+ provider.request_types.include?(request_type)
181
+ end
182
+ end
183
+
184
+ # @private
185
+ protected
186
+ def attribute name, options = {}, &block
187
+ attr = Attribute.new(name, options)
188
+ attr.instance_eval(&block) if block_given?
189
+ define_attribute_getter(attr)
190
+ define_attribute_setter(attr) if attr.mutable?
191
+ attributes[attr.name] = attr
192
+ end
193
+
194
+ # @private
195
+ protected
196
+ def mutable_attribute name, options = {}, &block
197
+ attribute(name, options.merge(:mutable => true), &block)
198
+ end
199
+
200
+ # @private
201
+ protected
202
+ def define_attribute_getter attribute
203
+ define_method(attribute.name) do
204
+
205
+ return static_attributes[attribute.name] if
206
+ static_attributes.has_key?(attribute.name)
207
+
208
+ begin
209
+ retrieve_attribute(attribute) { get_resource(attribute) }
210
+ rescue Cacheable::NoData => e
211
+ name = ruby_name.tr("_", " ")
212
+ raise NotFound, "unable to find the #{name}"
213
+ end
214
+
215
+ end
216
+ end
217
+
218
+ # @private
219
+ protected
220
+ def define_attribute_setter attribute
221
+ setter = attribute.name.to_s.sub(/\?/, '') + '='
222
+ define_method(setter) do |value|
223
+ translated_value = attribute.translate_input_value(value)
224
+ update_resource(attribute, translated_value)
225
+ if attribute.static?
226
+ static_attributes[attribute.name] = translated_value
227
+ end
228
+ value
229
+ end
230
+ end
231
+
232
+ # @private
233
+ protected
234
+ def populates_from *request_types, &block
235
+ provider = provider(*request_types)
236
+ provider.find(&block)
237
+ provider.provides(*attributes.keys)
238
+ provider
239
+ end
240
+
241
+ # @private
242
+ protected
243
+ def provider *request_types, &block
244
+ provider = AttributeProvider.new(self, request_types)
245
+ if block_given?
246
+ yield(provider)
247
+ end
248
+ attribute_providers << provider
249
+ provider
250
+ end
251
+
252
+ end
253
+
254
+ # @private
255
+ class Attribute
256
+
257
+ def initialize name, options = {}
258
+ @name = name
259
+ @options = options
260
+ @request_types = []
261
+ end
262
+
263
+ attr_reader :name
264
+
265
+ attr_reader :request_types
266
+
267
+ def get_as
268
+ @get_as ||= (@options[:get_as] || @options[:as] || name)
269
+ end
270
+
271
+ def set_as
272
+ @set_as ||= (@options[:set_as] || @options[:as] || name)
273
+ end
274
+
275
+ def mutable?
276
+ @options[:mutable] == true
277
+ end
278
+
279
+ def static?
280
+ @options[:static] == true
281
+ end
282
+
283
+ def translates_input &block
284
+ @input_translator = block
285
+ end
286
+
287
+ def translates_output options = {}, &block
288
+ @translates_nil = options[:nil]
289
+ @output_translator = block
290
+ end
291
+
292
+ def translate_input_value value
293
+ @input_translator ? @input_translator.call(value) : value
294
+ end
295
+
296
+ def translate_output_value value
297
+
298
+ # by default nil values are not translated
299
+ return nil if value.nil? and @translates_nil != true
300
+
301
+ case
302
+ when @options[:to_sym] then value.tr('-','_').downcase.to_sym
303
+ when @output_translator then @output_translator.call(value)
304
+ else value
305
+ end
306
+
307
+ end
308
+
309
+ end
310
+
311
+ # @private
312
+ class AttributeProvider
313
+
314
+ def initialize klass, request_types
315
+ @klass = klass
316
+ @id = klass.attribute_providers.length
317
+ @request_types = request_types
318
+ @provides = {}
319
+ end
320
+
321
+ attr_reader :request_types
322
+
323
+ def find &block
324
+ @klass.send(:define_method, finder_method, &block)
325
+ end
326
+
327
+ def finder_method
328
+ "find_in_response_#{@id}"
329
+ end
330
+
331
+ # Indicates that all of the the named attributes can be retrieved
332
+ # from an appropriate response object.
333
+ #
334
+ # @param [Symbol] attr_names A list of attributes provided
335
+ # @param [Hash] options
336
+ # @option options [Boolean] :value_wrapped (false) If true, then
337
+ # the value returned by the response object will also receive
338
+ # the message :value before it is translated and returned.
339
+ # @option options [Symbol] :get_as Defaults to the method named
340
+ # by the attribute. This is useful when you have two providers
341
+ # for the same attribute but their response object name
342
+ # them differently.
343
+ def provides *attr_names
344
+ options = attr_names.last.is_a?(Hash) ? attr_names.pop : {}
345
+ attr_names.each do |attr_name|
346
+ attr = @klass.attributes[attr_name]
347
+ attr.request_types.push(*request_types)
348
+ @provides[attr_name] = options
349
+ end
350
+ end
351
+
352
+ def attributes_from_response resource, response
353
+ if response_object = resource.send(finder_method, response)
354
+ attributes_from_response_object(response_object)
355
+ else
356
+ {}
357
+ end
358
+ end
359
+
360
+ def attributes_from_response_object resp_obj
361
+ attributes = {}
362
+ @provides.each do |attr_name, options|
363
+
364
+ attr = @klass.attributes[attr_name]
365
+ method = options[:get_as] || attr.get_as
366
+
367
+ v = resp_obj.respond_to?(method) ? resp_obj.send(method) : nil
368
+ v = v.value if v and options[:value_wrapped]
369
+ v = attr.translate_output_value(v)
370
+
371
+ attributes[attr_name] = v
372
+
373
+ end
374
+ attributes
375
+ end
376
+
377
+ end
378
+ end
379
+ end
380
+ end
@@ -0,0 +1,40 @@
1
+ # Copyright 2011 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ module AWS
15
+ module Core
16
+
17
+ # @private
18
+ class ResourceCache
19
+
20
+ def initialize
21
+ @cache = {}
22
+ end
23
+
24
+ def store(key, attributes)
25
+ (@cache[key] ||= {}).merge!(attributes)
26
+ end
27
+
28
+ def cached?(key, attribute)
29
+ attributes = @cache[key] and attributes.has_key?(attribute)
30
+ end
31
+
32
+ def get(key, attribute)
33
+ raise "No cached value for attribute :#{attribute} of #{key}" unless
34
+ cached?(key, attribute)
35
+ @cache[key][attribute]
36
+ end
37
+
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,125 @@
1
+ # Copyright 2011 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ module AWS
15
+ module Core
16
+
17
+ # @private
18
+ class Response
19
+
20
+ include AsyncHandle
21
+
22
+ # @return [AWS::Error] Returns nil unless the request failed.
23
+ # Normally this will be nil unless you are using the Asynchronous
24
+ # interface.
25
+ attr_accessor :error
26
+
27
+ # @return [Hash] The hash of options passed to the low level request
28
+ # method that generated this response.
29
+ attr_accessor :request_options
30
+
31
+ # @return [Symbol] The low-level request method that generated
32
+ # this response
33
+ attr_accessor :request_type
34
+
35
+ # @return [Http::Request] the HTTP request object
36
+ attr_accessor :http_request
37
+
38
+ # @return [Http::Response] the HTTP response object
39
+ attr_accessor :http_response
40
+
41
+ # @return [Boolean] true if the response is cached
42
+ attr_accessor :cached
43
+
44
+ # @param [Http::Request] http_request
45
+ # @param [Http::Response] http_request
46
+ def initialize http_request = nil, http_response = nil, &block
47
+ @http_request = http_request
48
+ @http_response = http_response
49
+ @request_builder = block
50
+ rebuild_request if @request_builder && !http_request
51
+ end
52
+
53
+ # Rebuilds the HTTP request using the block passed to the initializer
54
+ def rebuild_request
55
+ @http_request = @request_builder.call
56
+ end
57
+
58
+ # @return [Boolean] Returns true unless there is a response error.
59
+ def successful?
60
+ error.nil?
61
+ end
62
+
63
+ # @return [Boolean] Returns true if the http request was throttled
64
+ # by AWS.
65
+ def throttled?
66
+ !successful? and
67
+ http_response.body and
68
+ parsed_body = XmlGrammar.parse(http_response.body) and
69
+ parsed_body.respond_to?(:code) and
70
+ parsed_body.code == "Throttling"
71
+ end
72
+
73
+ # @return [Boolean] Returns true if the http request timed out.
74
+ def timeout?
75
+ http_response.timeout?
76
+ end
77
+
78
+ # @private
79
+ def inspect
80
+ if request_type
81
+ "<#{self.class}:#{request_type}>"
82
+ else
83
+ "<#{self.class}>"
84
+ end
85
+ end
86
+
87
+ def cache_key
88
+ [http_request.access_key_id,
89
+ http_request.host,
90
+ request_type,
91
+ serialized_options].join(":")
92
+ end
93
+
94
+ def serialized_options
95
+ serialize_options_hash(request_options)
96
+ end
97
+
98
+ private
99
+ def serialize_options_hash(hash)
100
+ "(" + hash.keys.sort_by(&:to_s).map do |key|
101
+ "#{key}=#{serialize_options_value(hash[key])}"
102
+ end.join(" ") + ")"
103
+ end
104
+
105
+ private
106
+ def serialize_options_value(value)
107
+ case value
108
+ when Hash
109
+ serialize_options_hash(value)
110
+ when Array
111
+ serialize_options_array(value)
112
+ else
113
+ value.inspect
114
+ end
115
+ end
116
+
117
+ private
118
+ def serialize_options_array(ary)
119
+ "[" + ary.map { |v| serialize_options_value(v) }.join(" ") +
120
+ "]"
121
+ end
122
+
123
+ end
124
+ end
125
+ end