aws_sdk 3.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (390) hide show
  1. data/lib/aws-sdk.rb +14 -0
  2. data/lib/aws.rb +49 -0
  3. data/lib/aws/api_config/AutoScaling-2011-01-01.yml +791 -0
  4. data/lib/aws/api_config/CloudFormation-2010-05-15.yml +303 -0
  5. data/lib/aws/api_config/DynamoDB-2011-12-05.yml +540 -0
  6. data/lib/aws/api_config/EC2-2011-12-15.yml +3638 -0
  7. data/lib/aws/api_config/EC2-2012-04-01.yml +3739 -0
  8. data/lib/aws/api_config/ELB-2011-08-15.yml +512 -0
  9. data/lib/aws/api_config/IAM-2010-05-08.yml +1221 -0
  10. data/lib/aws/api_config/SNS-2010-03-31.yml +248 -0
  11. data/lib/aws/api_config/SQS-2011-10-01.yml +314 -0
  12. data/lib/aws/api_config/STS-2011-06-15.yml +54 -0
  13. data/lib/aws/api_config/SimpleDB-2009-04-15.yml +305 -0
  14. data/lib/aws/api_config/SimpleEmailService-2010-12-01.yml +231 -0
  15. data/lib/aws/api_config/SimpleWorkflow-2012-01-25.yml +721 -0
  16. data/lib/aws/auto_scaling.rb +162 -0
  17. data/lib/aws/auto_scaling/activity.rb +102 -0
  18. data/lib/aws/auto_scaling/activity_collection.rb +82 -0
  19. data/lib/aws/auto_scaling/client.rb +765 -0
  20. data/lib/aws/auto_scaling/config.rb +18 -0
  21. data/lib/aws/auto_scaling/errors.rb +22 -0
  22. data/lib/aws/auto_scaling/group.rb +420 -0
  23. data/lib/aws/auto_scaling/group_collection.rb +96 -0
  24. data/lib/aws/auto_scaling/group_options.rb +146 -0
  25. data/lib/aws/auto_scaling/instance.rb +192 -0
  26. data/lib/aws/auto_scaling/instance_collection.rb +63 -0
  27. data/lib/aws/auto_scaling/launch_configuration.rb +150 -0
  28. data/lib/aws/auto_scaling/launch_configuration_collection.rb +144 -0
  29. data/lib/aws/auto_scaling/notification_configuration.rb +89 -0
  30. data/lib/aws/auto_scaling/notification_configuration_collection.rb +184 -0
  31. data/lib/aws/auto_scaling/request.rb +23 -0
  32. data/lib/aws/auto_scaling/scaling_policy.rb +125 -0
  33. data/lib/aws/auto_scaling/scaling_policy_collection.rb +72 -0
  34. data/lib/aws/auto_scaling/scaling_policy_options.rb +61 -0
  35. data/lib/aws/auto_scaling/scheduled_action.rb +145 -0
  36. data/lib/aws/auto_scaling/scheduled_action_collection.rb +195 -0
  37. data/lib/aws/auto_scaling/tag.rb +59 -0
  38. data/lib/aws/auto_scaling/tag_collection.rb +112 -0
  39. data/lib/aws/cloud_formation.rb +270 -0
  40. data/lib/aws/cloud_formation/client.rb +339 -0
  41. data/lib/aws/cloud_formation/config.rb +18 -0
  42. data/lib/aws/cloud_formation/errors.rb +22 -0
  43. data/lib/aws/cloud_formation/request.rb +29 -0
  44. data/lib/aws/cloud_formation/stack.rb +256 -0
  45. data/lib/aws/cloud_formation/stack_collection.rb +206 -0
  46. data/lib/aws/cloud_formation/stack_event.rb +75 -0
  47. data/lib/aws/cloud_formation/stack_event_collection.rb +47 -0
  48. data/lib/aws/cloud_formation/stack_options.rb +72 -0
  49. data/lib/aws/cloud_formation/stack_output.rb +53 -0
  50. data/lib/aws/cloud_formation/stack_resource.rb +117 -0
  51. data/lib/aws/cloud_formation/stack_resource_collection.rb +84 -0
  52. data/lib/aws/cloud_formation/stack_resource_summary_collection.rb +72 -0
  53. data/lib/aws/cloud_formation/stack_summary.rb +71 -0
  54. data/lib/aws/cloud_formation/stack_summary_collection.rb +127 -0
  55. data/lib/aws/core.rb +474 -0
  56. data/lib/aws/core/async_handle.rb +90 -0
  57. data/lib/aws/core/autoloader.rb +64 -0
  58. data/lib/aws/core/cacheable.rb +78 -0
  59. data/lib/aws/core/client.rb +541 -0
  60. data/lib/aws/core/client/query_json.rb +110 -0
  61. data/lib/aws/core/client/query_xml.rb +122 -0
  62. data/lib/aws/core/collection.rb +234 -0
  63. data/lib/aws/core/collection/limitable.rb +99 -0
  64. data/lib/aws/core/collection/simple.rb +90 -0
  65. data/lib/aws/core/configuration.rb +445 -0
  66. data/lib/aws/core/data.rb +242 -0
  67. data/lib/aws/core/default_signer.rb +67 -0
  68. data/lib/aws/core/http/curb_handler.rb +136 -0
  69. data/lib/aws/core/http/handler.rb +77 -0
  70. data/lib/aws/core/http/httparty_handler.rb +114 -0
  71. data/lib/aws/core/http/net_http_handler.rb +85 -0
  72. data/lib/aws/core/http/request.rb +250 -0
  73. data/lib/aws/core/http/response.rb +74 -0
  74. data/lib/aws/core/indifferent_hash.rb +88 -0
  75. data/lib/aws/core/inflection.rb +47 -0
  76. data/lib/aws/core/lazy_error_classes.rb +90 -0
  77. data/lib/aws/core/log_formatter.rb +454 -0
  78. data/lib/aws/core/meta_utils.rb +45 -0
  79. data/lib/aws/core/model.rb +57 -0
  80. data/lib/aws/core/naming.rb +30 -0
  81. data/lib/aws/core/option_grammar.rb +700 -0
  82. data/lib/aws/core/page_result.rb +73 -0
  83. data/lib/aws/core/policy.rb +916 -0
  84. data/lib/aws/core/resource.rb +408 -0
  85. data/lib/aws/core/resource_cache.rb +40 -0
  86. data/lib/aws/core/response.rb +202 -0
  87. data/lib/aws/core/response_cache.rb +50 -0
  88. data/lib/aws/core/service_interface.rb +61 -0
  89. data/lib/aws/core/session_signer.rb +90 -0
  90. data/lib/aws/core/signature/version_2.rb +42 -0
  91. data/lib/aws/core/signature/version_3.rb +73 -0
  92. data/lib/aws/core/signature/version_3_http.rb +72 -0
  93. data/lib/aws/core/signature/version_4.rb +138 -0
  94. data/lib/aws/core/uri_escape.rb +42 -0
  95. data/lib/aws/core/xml/frame.rb +242 -0
  96. data/lib/aws/core/xml/frame_stack.rb +85 -0
  97. data/lib/aws/core/xml/grammar.rb +299 -0
  98. data/lib/aws/core/xml/parser.rb +70 -0
  99. data/lib/aws/core/xml/root_frame.rb +65 -0
  100. data/lib/aws/core/xml/sax_handlers/libxml.rb +47 -0
  101. data/lib/aws/core/xml/sax_handlers/nokogiri.rb +55 -0
  102. data/lib/aws/core/xml/sax_handlers/ox.rb +41 -0
  103. data/lib/aws/core/xml/sax_handlers/rexml.rb +43 -0
  104. data/lib/aws/core/xml/stub.rb +123 -0
  105. data/lib/aws/dynamo_db.rb +213 -0
  106. data/lib/aws/dynamo_db/attribute_collection.rb +460 -0
  107. data/lib/aws/dynamo_db/batch_get.rb +206 -0
  108. data/lib/aws/dynamo_db/batch_write.rb +251 -0
  109. data/lib/aws/dynamo_db/client.rb +888 -0
  110. data/lib/aws/dynamo_db/config.rb +20 -0
  111. data/lib/aws/dynamo_db/errors.rb +20 -0
  112. data/lib/aws/dynamo_db/expectations.rb +40 -0
  113. data/lib/aws/dynamo_db/item.rb +130 -0
  114. data/lib/aws/dynamo_db/item_collection.rb +852 -0
  115. data/lib/aws/dynamo_db/item_data.rb +31 -0
  116. data/lib/aws/dynamo_db/keys.rb +41 -0
  117. data/lib/aws/dynamo_db/primary_key_element.rb +47 -0
  118. data/lib/aws/dynamo_db/request.rb +28 -0
  119. data/lib/aws/dynamo_db/resource.rb +33 -0
  120. data/lib/aws/dynamo_db/table.rb +489 -0
  121. data/lib/aws/dynamo_db/table_collection.rb +165 -0
  122. data/lib/aws/dynamo_db/types.rb +86 -0
  123. data/lib/aws/ec2.rb +431 -0
  124. data/lib/aws/ec2/attachment.rb +140 -0
  125. data/lib/aws/ec2/attachment_collection.rb +54 -0
  126. data/lib/aws/ec2/availability_zone.rb +87 -0
  127. data/lib/aws/ec2/availability_zone_collection.rb +43 -0
  128. data/lib/aws/ec2/block_device_mappings.rb +53 -0
  129. data/lib/aws/ec2/client.rb +4121 -0
  130. data/lib/aws/ec2/collection.rb +36 -0
  131. data/lib/aws/ec2/config.rb +18 -0
  132. data/lib/aws/ec2/config_transform.rb +63 -0
  133. data/lib/aws/ec2/customer_gateway.rb +90 -0
  134. data/lib/aws/ec2/customer_gateway_collection.rb +73 -0
  135. data/lib/aws/ec2/dhcp_options.rb +106 -0
  136. data/lib/aws/ec2/dhcp_options_collection.rb +87 -0
  137. data/lib/aws/ec2/elastic_ip.rb +157 -0
  138. data/lib/aws/ec2/elastic_ip_collection.rb +97 -0
  139. data/lib/aws/ec2/errors.rb +32 -0
  140. data/lib/aws/ec2/filtered_collection.rb +90 -0
  141. data/lib/aws/ec2/has_permissions.rb +44 -0
  142. data/lib/aws/ec2/image.rb +254 -0
  143. data/lib/aws/ec2/image_collection.rb +228 -0
  144. data/lib/aws/ec2/instance.rb +669 -0
  145. data/lib/aws/ec2/instance_collection.rb +346 -0
  146. data/lib/aws/ec2/internet_gateway.rb +122 -0
  147. data/lib/aws/ec2/internet_gateway/attachment.rb +78 -0
  148. data/lib/aws/ec2/internet_gateway_collection.rb +54 -0
  149. data/lib/aws/ec2/key_pair.rb +82 -0
  150. data/lib/aws/ec2/key_pair_collection.rb +99 -0
  151. data/lib/aws/ec2/network_acl.rb +256 -0
  152. data/lib/aws/ec2/network_acl/association.rb +56 -0
  153. data/lib/aws/ec2/network_acl/entry.rb +147 -0
  154. data/lib/aws/ec2/network_acl_collection.rb +64 -0
  155. data/lib/aws/ec2/network_interface.rb +228 -0
  156. data/lib/aws/ec2/network_interface/attachment.rb +100 -0
  157. data/lib/aws/ec2/network_interface_collection.rb +103 -0
  158. data/lib/aws/ec2/permission_collection.rb +174 -0
  159. data/lib/aws/ec2/region.rb +97 -0
  160. data/lib/aws/ec2/region_collection.rb +51 -0
  161. data/lib/aws/ec2/request.rb +22 -0
  162. data/lib/aws/ec2/reserved_instances.rb +53 -0
  163. data/lib/aws/ec2/reserved_instances_collection.rb +40 -0
  164. data/lib/aws/ec2/reserved_instances_offering.rb +58 -0
  165. data/lib/aws/ec2/reserved_instances_offering_collection.rb +39 -0
  166. data/lib/aws/ec2/resource.rb +161 -0
  167. data/lib/aws/ec2/resource_tag_collection.rb +211 -0
  168. data/lib/aws/ec2/route_table.rb +205 -0
  169. data/lib/aws/ec2/route_table/association.rb +119 -0
  170. data/lib/aws/ec2/route_table/route.rb +113 -0
  171. data/lib/aws/ec2/route_table_collection.rb +72 -0
  172. data/lib/aws/ec2/security_group.rb +458 -0
  173. data/lib/aws/ec2/security_group/egress_ip_permission_collection.rb +63 -0
  174. data/lib/aws/ec2/security_group/ingress_ip_permission_collection.rb +61 -0
  175. data/lib/aws/ec2/security_group/ip_permission.rb +128 -0
  176. data/lib/aws/ec2/security_group_collection.rb +135 -0
  177. data/lib/aws/ec2/snapshot.rb +143 -0
  178. data/lib/aws/ec2/snapshot_collection.rb +131 -0
  179. data/lib/aws/ec2/subnet.rb +161 -0
  180. data/lib/aws/ec2/subnet_collection.rb +115 -0
  181. data/lib/aws/ec2/tag.rb +81 -0
  182. data/lib/aws/ec2/tag_collection.rb +107 -0
  183. data/lib/aws/ec2/tagged_collection.rb +53 -0
  184. data/lib/aws/ec2/tagged_item.rb +85 -0
  185. data/lib/aws/ec2/volume.rb +170 -0
  186. data/lib/aws/ec2/volume_collection.rb +97 -0
  187. data/lib/aws/ec2/vpc.rb +166 -0
  188. data/lib/aws/ec2/vpc_collection.rb +70 -0
  189. data/lib/aws/ec2/vpn_connection.rb +99 -0
  190. data/lib/aws/ec2/vpn_connection/telemetry.rb +49 -0
  191. data/lib/aws/ec2/vpn_connection_collection.rb +96 -0
  192. data/lib/aws/ec2/vpn_gateway.rb +123 -0
  193. data/lib/aws/ec2/vpn_gateway/attachment.rb +45 -0
  194. data/lib/aws/ec2/vpn_gateway_collection.rb +77 -0
  195. data/lib/aws/elb.rb +65 -0
  196. data/lib/aws/elb/availability_zone_collection.rb +138 -0
  197. data/lib/aws/elb/backend_server_policy_collection.rb +140 -0
  198. data/lib/aws/elb/client.rb +539 -0
  199. data/lib/aws/elb/config.rb +18 -0
  200. data/lib/aws/elb/errors.rb +26 -0
  201. data/lib/aws/elb/instance_collection.rb +174 -0
  202. data/lib/aws/elb/listener.rb +189 -0
  203. data/lib/aws/elb/listener_collection.rb +119 -0
  204. data/lib/aws/elb/listener_opts.rb +45 -0
  205. data/lib/aws/elb/load_balancer.rb +253 -0
  206. data/lib/aws/elb/load_balancer_collection.rb +113 -0
  207. data/lib/aws/elb/load_balancer_policy.rb +93 -0
  208. data/lib/aws/elb/load_balancer_policy_collection.rb +208 -0
  209. data/lib/aws/elb/request.rb +23 -0
  210. data/lib/aws/errors.rb +122 -0
  211. data/lib/aws/iam.rb +418 -0
  212. data/lib/aws/iam/access_key.rb +180 -0
  213. data/lib/aws/iam/access_key_collection.rb +128 -0
  214. data/lib/aws/iam/account_alias_collection.rb +79 -0
  215. data/lib/aws/iam/client.rb +1609 -0
  216. data/lib/aws/iam/collection.rb +83 -0
  217. data/lib/aws/iam/config.rb +18 -0
  218. data/lib/aws/iam/errors.rb +22 -0
  219. data/lib/aws/iam/group.rb +111 -0
  220. data/lib/aws/iam/group_collection.rb +132 -0
  221. data/lib/aws/iam/group_policy_collection.rb +47 -0
  222. data/lib/aws/iam/group_user_collection.rb +84 -0
  223. data/lib/aws/iam/login_profile.rb +99 -0
  224. data/lib/aws/iam/mfa_device.rb +52 -0
  225. data/lib/aws/iam/mfa_device_collection.rb +127 -0
  226. data/lib/aws/iam/policy.rb +46 -0
  227. data/lib/aws/iam/policy_collection.rb +188 -0
  228. data/lib/aws/iam/request.rb +29 -0
  229. data/lib/aws/iam/resource.rb +71 -0
  230. data/lib/aws/iam/server_certificate.rb +141 -0
  231. data/lib/aws/iam/server_certificate_collection.rb +138 -0
  232. data/lib/aws/iam/signing_certificate.rb +169 -0
  233. data/lib/aws/iam/signing_certificate_collection.rb +131 -0
  234. data/lib/aws/iam/user.rb +205 -0
  235. data/lib/aws/iam/user_collection.rb +133 -0
  236. data/lib/aws/iam/user_group_collection.rb +98 -0
  237. data/lib/aws/iam/user_policy.rb +90 -0
  238. data/lib/aws/iam/user_policy_collection.rb +45 -0
  239. data/lib/aws/iam/virtual_mfa_device.rb +139 -0
  240. data/lib/aws/iam/virtual_mfa_device_collection.rb +73 -0
  241. data/lib/aws/rails.rb +195 -0
  242. data/lib/aws/record.rb +116 -0
  243. data/lib/aws/record/abstract_base.rb +645 -0
  244. data/lib/aws/record/attributes.rb +384 -0
  245. data/lib/aws/record/conversion.rb +38 -0
  246. data/lib/aws/record/dirty_tracking.rb +285 -0
  247. data/lib/aws/record/errors.rb +143 -0
  248. data/lib/aws/record/exceptions.rb +48 -0
  249. data/lib/aws/record/hash_model.rb +161 -0
  250. data/lib/aws/record/hash_model/attributes.rb +182 -0
  251. data/lib/aws/record/hash_model/finder_methods.rb +172 -0
  252. data/lib/aws/record/hash_model/scope.rb +108 -0
  253. data/lib/aws/record/model.rb +427 -0
  254. data/lib/aws/record/model/attributes.rb +379 -0
  255. data/lib/aws/record/model/finder_methods.rb +232 -0
  256. data/lib/aws/record/model/scope.rb +213 -0
  257. data/lib/aws/record/naming.rb +31 -0
  258. data/lib/aws/record/scope.rb +199 -0
  259. data/lib/aws/record/validations.rb +694 -0
  260. data/lib/aws/record/validator.rb +237 -0
  261. data/lib/aws/record/validators/acceptance.rb +51 -0
  262. data/lib/aws/record/validators/block.rb +38 -0
  263. data/lib/aws/record/validators/confirmation.rb +43 -0
  264. data/lib/aws/record/validators/count.rb +108 -0
  265. data/lib/aws/record/validators/exclusion.rb +43 -0
  266. data/lib/aws/record/validators/format.rb +57 -0
  267. data/lib/aws/record/validators/inclusion.rb +56 -0
  268. data/lib/aws/record/validators/length.rb +107 -0
  269. data/lib/aws/record/validators/method.rb +33 -0
  270. data/lib/aws/record/validators/numericality.rb +138 -0
  271. data/lib/aws/record/validators/presence.rb +45 -0
  272. data/lib/aws/s3.rb +135 -0
  273. data/lib/aws/s3/access_control_list.rb +250 -0
  274. data/lib/aws/s3/acl_object.rb +264 -0
  275. data/lib/aws/s3/bucket.rb +393 -0
  276. data/lib/aws/s3/bucket_collection.rb +143 -0
  277. data/lib/aws/s3/bucket_lifecycle_configuration.rb +360 -0
  278. data/lib/aws/s3/bucket_version_collection.rb +77 -0
  279. data/lib/aws/s3/client.rb +1184 -0
  280. data/lib/aws/s3/client/xml.rb +177 -0
  281. data/lib/aws/s3/config.rb +26 -0
  282. data/lib/aws/s3/data_options.rb +100 -0
  283. data/lib/aws/s3/errors.rb +81 -0
  284. data/lib/aws/s3/multipart_upload.rb +317 -0
  285. data/lib/aws/s3/multipart_upload_collection.rb +68 -0
  286. data/lib/aws/s3/object_collection.rb +337 -0
  287. data/lib/aws/s3/object_metadata.rb +96 -0
  288. data/lib/aws/s3/object_upload_collection.rb +77 -0
  289. data/lib/aws/s3/object_version.rb +143 -0
  290. data/lib/aws/s3/object_version_collection.rb +89 -0
  291. data/lib/aws/s3/paginated_collection.rb +75 -0
  292. data/lib/aws/s3/policy.rb +74 -0
  293. data/lib/aws/s3/prefix_and_delimiter_collection.rb +47 -0
  294. data/lib/aws/s3/prefixed_collection.rb +81 -0
  295. data/lib/aws/s3/presigned_post.rb +553 -0
  296. data/lib/aws/s3/request.rb +201 -0
  297. data/lib/aws/s3/s3_object.rb +1037 -0
  298. data/lib/aws/s3/tree.rb +118 -0
  299. data/lib/aws/s3/tree/branch_node.rb +68 -0
  300. data/lib/aws/s3/tree/child_collection.rb +104 -0
  301. data/lib/aws/s3/tree/leaf_node.rb +94 -0
  302. data/lib/aws/s3/tree/node.rb +22 -0
  303. data/lib/aws/s3/tree/parent.rb +87 -0
  304. data/lib/aws/s3/uploaded_part.rb +80 -0
  305. data/lib/aws/s3/uploaded_part_collection.rb +84 -0
  306. data/lib/aws/simple_db.rb +217 -0
  307. data/lib/aws/simple_db/attribute.rb +154 -0
  308. data/lib/aws/simple_db/attribute_collection.rb +231 -0
  309. data/lib/aws/simple_db/client.rb +349 -0
  310. data/lib/aws/simple_db/config.rb +20 -0
  311. data/lib/aws/simple_db/consistent_read_option.rb +42 -0
  312. data/lib/aws/simple_db/delete_attributes.rb +62 -0
  313. data/lib/aws/simple_db/domain.rb +121 -0
  314. data/lib/aws/simple_db/domain_collection.rb +113 -0
  315. data/lib/aws/simple_db/domain_metadata.rb +110 -0
  316. data/lib/aws/simple_db/errors.rb +55 -0
  317. data/lib/aws/simple_db/expect_condition_option.rb +45 -0
  318. data/lib/aws/simple_db/item.rb +93 -0
  319. data/lib/aws/simple_db/item_collection.rb +649 -0
  320. data/lib/aws/simple_db/item_data.rb +73 -0
  321. data/lib/aws/simple_db/put_attributes.rb +60 -0
  322. data/lib/aws/simple_db/request.rb +23 -0
  323. data/lib/aws/simple_email_service.rb +426 -0
  324. data/lib/aws/simple_email_service/client.rb +286 -0
  325. data/lib/aws/simple_email_service/config.rb +19 -0
  326. data/lib/aws/simple_email_service/email_address_collection.rb +69 -0
  327. data/lib/aws/simple_email_service/errors.rb +22 -0
  328. data/lib/aws/simple_email_service/identity.rb +91 -0
  329. data/lib/aws/simple_email_service/identity_collection.rb +81 -0
  330. data/lib/aws/simple_email_service/quotas.rb +64 -0
  331. data/lib/aws/simple_email_service/request.rb +29 -0
  332. data/lib/aws/simple_workflow.rb +226 -0
  333. data/lib/aws/simple_workflow/activity_task.rb +173 -0
  334. data/lib/aws/simple_workflow/activity_task_collection.rb +123 -0
  335. data/lib/aws/simple_workflow/activity_type.rb +131 -0
  336. data/lib/aws/simple_workflow/activity_type_collection.rb +93 -0
  337. data/lib/aws/simple_workflow/client.rb +1434 -0
  338. data/lib/aws/simple_workflow/config.rb +18 -0
  339. data/lib/aws/simple_workflow/count.rb +49 -0
  340. data/lib/aws/simple_workflow/decision_task.rb +601 -0
  341. data/lib/aws/simple_workflow/decision_task_collection.rb +225 -0
  342. data/lib/aws/simple_workflow/domain.rb +122 -0
  343. data/lib/aws/simple_workflow/domain_collection.rb +169 -0
  344. data/lib/aws/simple_workflow/errors.rb +20 -0
  345. data/lib/aws/simple_workflow/history_event.rb +276 -0
  346. data/lib/aws/simple_workflow/history_event_collection.rb +76 -0
  347. data/lib/aws/simple_workflow/option_formatters.rb +82 -0
  348. data/lib/aws/simple_workflow/request.rb +36 -0
  349. data/lib/aws/simple_workflow/resource.rb +94 -0
  350. data/lib/aws/simple_workflow/type.rb +89 -0
  351. data/lib/aws/simple_workflow/type_collection.rb +140 -0
  352. data/lib/aws/simple_workflow/workflow_execution.rb +386 -0
  353. data/lib/aws/simple_workflow/workflow_execution_collection.rb +617 -0
  354. data/lib/aws/simple_workflow/workflow_type.rb +177 -0
  355. data/lib/aws/simple_workflow/workflow_type_collection.rb +91 -0
  356. data/lib/aws/sns.rb +74 -0
  357. data/lib/aws/sns/client.rb +371 -0
  358. data/lib/aws/sns/config.rb +18 -0
  359. data/lib/aws/sns/errors.rb +22 -0
  360. data/lib/aws/sns/has_delivery_policy.rb +68 -0
  361. data/lib/aws/sns/policy.rb +47 -0
  362. data/lib/aws/sns/request.rb +23 -0
  363. data/lib/aws/sns/subscription.rb +144 -0
  364. data/lib/aws/sns/subscription_collection.rb +80 -0
  365. data/lib/aws/sns/topic.rb +403 -0
  366. data/lib/aws/sns/topic_collection.rb +67 -0
  367. data/lib/aws/sns/topic_subscription_collection.rb +55 -0
  368. data/lib/aws/sqs.rb +79 -0
  369. data/lib/aws/sqs/client.rb +360 -0
  370. data/lib/aws/sqs/config.rb +18 -0
  371. data/lib/aws/sqs/errors.rb +101 -0
  372. data/lib/aws/sqs/policy.rb +48 -0
  373. data/lib/aws/sqs/queue.rb +725 -0
  374. data/lib/aws/sqs/queue_collection.rb +170 -0
  375. data/lib/aws/sqs/received_message.rb +181 -0
  376. data/lib/aws/sqs/received_sns_message.rb +112 -0
  377. data/lib/aws/sqs/request.rb +43 -0
  378. data/lib/aws/sts.rb +152 -0
  379. data/lib/aws/sts/client.rb +105 -0
  380. data/lib/aws/sts/config.rb +18 -0
  381. data/lib/aws/sts/errors.rb +22 -0
  382. data/lib/aws/sts/federated_session.rb +56 -0
  383. data/lib/aws/sts/policy.rb +30 -0
  384. data/lib/aws/sts/request.rb +29 -0
  385. data/lib/aws/sts/session.rb +48 -0
  386. data/lib/net/http/connection_pool.rb +210 -0
  387. data/lib/net/http/connection_pool/connection.rb +132 -0
  388. data/lib/net/http/connection_pool/session.rb +93 -0
  389. data/lib/user.rb +49 -0
  390. metadata +433 -0
@@ -0,0 +1,177 @@
1
+ # Copyright 2011-2012 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
+ class S3
16
+ class Client < Core::Client
17
+
18
+ # @private
19
+ module XML
20
+
21
+ BaseGrammar = Core::XML::Grammar.new({}, :inflect_rename => true)
22
+
23
+ ListBuckets = BaseGrammar.customize do
24
+ element "Buckets" do
25
+ list "Bucket"
26
+ end
27
+ end
28
+
29
+ GetBucketAcl = GetObjectAcl = BaseGrammar.customize do
30
+ element "AccessControlList" do
31
+ ignore
32
+ element "Grant" do
33
+ rename :grants
34
+ list
35
+ element "Grantee" do
36
+ element "ID" do
37
+ rename :canonical_user_id
38
+ end
39
+ end
40
+ element "Permission" do
41
+ symbol_value
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ ListObjects = BaseGrammar.customize do
48
+
49
+ element("Name") { rename :bucket_name }
50
+ element("MaxKeys") { integer_value }
51
+ element("IsTruncated") { rename :truncated; boolean_value }
52
+ element("Delimiter") { force }
53
+
54
+ element("Contents") do
55
+ list
56
+ element("Owner") do
57
+ element("ID") { }
58
+ element("DisplayName") { }
59
+ end
60
+ element("Key") { }
61
+ element("Size") { }
62
+ element("StorageClass") { }
63
+ element("ETag") { rename :etag }
64
+
65
+ element("LastModified") { time_value }
66
+ end
67
+
68
+ element "CommonPrefixes" do
69
+ collect_values
70
+ end
71
+
72
+ end
73
+
74
+ GetBucketVersioning = BaseGrammar.customize do
75
+ default_value :status, :unversioned
76
+ element("Status") do
77
+ symbol_value
78
+ end
79
+ end
80
+
81
+ ListObjectVersions = BaseGrammar.customize do
82
+
83
+ element("MaxKeys") { integer_value }
84
+ element("IsTruncated") { rename :truncated; boolean_value }
85
+ element("NextKeyMarker") { force }
86
+ element("NextVersionIdMarker") { force }
87
+
88
+ %w(DeleteMarker Version).each do |element_name|
89
+ element(element_name) do
90
+ collect_values
91
+ rename(:versions)
92
+ element("IsLatest") { rename :latest; boolean_value }
93
+ element("LastModified") { datetime_value }
94
+ element("ETag") { rename :etag }
95
+ element("Size") { integer_value }
96
+ element("StorageClass") { symbol_value }
97
+ end
98
+ end
99
+
100
+ element "DeleteMarker" do
101
+ default_value(:delete_marker, true)
102
+ default_value(:version, false)
103
+ end
104
+
105
+ element "Version" do
106
+ default_value(:delete_marker, false)
107
+ default_value(:version, true)
108
+ end
109
+
110
+ element "CommonPrefixes" do
111
+ collect_values
112
+ end
113
+
114
+ end
115
+
116
+ InitiateMultipartUpload = BaseGrammar.customize do
117
+ element("UploadId") { force }
118
+ end
119
+
120
+ ListMultipartUploads = BaseGrammar.customize do
121
+
122
+ element("IsTruncated") { rename :truncated; boolean_value }
123
+ element("MaxUploads") { integer_value }
124
+ element("NextKeyMarker") { force }
125
+ element("NextUploadIdMarker") { force }
126
+ element("Upload") do
127
+ collect_values
128
+ rename :uploads
129
+ element("StorageClass") { symbol_value }
130
+ element("Initiated") { datetime_value }
131
+ end
132
+
133
+ element "CommonPrefixes" do
134
+ collect_values
135
+ end
136
+
137
+ end
138
+
139
+ DeleteObjects = BaseGrammar.customize do
140
+ element("Deleted") do
141
+ element("DeleteMarker") { boolean_value }
142
+ list
143
+ end
144
+ element("Error") { list; rename(:errors) }
145
+ end
146
+
147
+ CompleteMultipartUpload = BaseGrammar.customize
148
+
149
+ ListParts = BaseGrammar.customize do
150
+ element("StorageClass") { symbol_value }
151
+ element("IsTruncated") { rename :truncated; boolean_value }
152
+ element("MaxParts") { integer_value }
153
+ element("PartNumberMarker") { integer_value }
154
+ element("NextPartNumberMarker") { integer_value }
155
+ element("Part") do
156
+ collect_values
157
+ rename :parts
158
+ element("PartNumber") { integer_value }
159
+ element("LastModified") { datetime_value }
160
+ element("Size") { integer_value }
161
+ end
162
+ end
163
+
164
+ GetBucketLifecycleConfiguration = BaseGrammar.customize do
165
+ element("Rule") do
166
+ list
167
+ rename(:rules)
168
+ element("Expiration") do
169
+ element("Days") { integer_value }
170
+ end
171
+ end
172
+ end
173
+
174
+ end
175
+ end
176
+ end
177
+ end
@@ -0,0 +1,26 @@
1
+ # Copyright 2011-2012 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
+ AWS::Core::Configuration.module_eval do
15
+
16
+ add_service 'S3', 's3', 's3.amazonaws.com'
17
+
18
+ add_option :s3_multipart_threshold, 16 * 1024 * 1024
19
+
20
+ add_option :s3_multipart_min_part_size, 5 * 1024 * 1024
21
+
22
+ add_option :s3_multipart_max_parts, 10000
23
+
24
+ add_option :s3_server_side_encryption, nil
25
+
26
+ end
@@ -0,0 +1,100 @@
1
+ # Copyright 2011-2012 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
+ require 'pathname'
15
+
16
+ module AWS
17
+ class S3
18
+
19
+ # @private
20
+ module DataOptions
21
+
22
+ protected
23
+
24
+ def data_stream_from options, &block
25
+
26
+ validate_data!(options, block)
27
+
28
+ # block format
29
+ if block_given?
30
+ buffer = StringIO.new
31
+ yield(buffer)
32
+ buffer.rewind
33
+ return buffer
34
+ end
35
+
36
+ # string, pathname, file, io-like object, etc
37
+ data = options[:data]
38
+ file_opts = ["rb"]
39
+ file_opts << { :encoding => "BINARY" } if Object.const_defined?(:Encoding)
40
+ case
41
+ when data.is_a?(String)
42
+ data.force_encoding("BINARY") if data.respond_to?(:force_encoding)
43
+ StringIO.new(data)
44
+ when data.is_a?(Pathname) then File.open(data.to_s, *file_opts)
45
+ when options[:file] then File.open(options[:file], *file_opts)
46
+ else data
47
+ end
48
+
49
+ end
50
+
51
+ def content_length_from options
52
+ data = options[:data]
53
+ case
54
+ when options[:content_length] then options[:content_length]
55
+ when options[:file] then File.size(options[:file])
56
+ when data.is_a?(Pathname) then File.size(data.to_s)
57
+ when data.is_a?(File) then File.size(data.path)
58
+ when data.respond_to?(:bytesize) then data.bytesize
59
+ when data.respond_to?(:size) then data.size
60
+ when data.respond_to?(:length) then data.length
61
+ else raise ArgumentError, 'content_length was not provided ' +
62
+ 'and could not be determined'
63
+ end
64
+ end
65
+
66
+ def validate_data! options, block
67
+
68
+ data = options[:data]
69
+ filename = options[:file]
70
+
71
+ raise ArgumentError, 'data passed multiple ways' if
72
+ [data, filename, block].compact.size > 1
73
+
74
+ # accepting block format
75
+ return if block and block.arity == 1
76
+
77
+ # accepting file path
78
+ return if filename.kind_of?(String)
79
+
80
+ # accepting strings
81
+ return if data.kind_of?(String)
82
+
83
+ # accepting pathname
84
+ return if data.kind_of?(Pathname)
85
+
86
+ # accepts io-like objects (responds to read and eof?)
87
+ if data.respond_to?(:read) and
88
+ data.method(:read).arity != 0 and
89
+ data.respond_to?(:eof?) then
90
+ return true
91
+ end
92
+
93
+ raise ArgumentError, 'data must be provided as a String, ' +
94
+ 'Pathname, file path, or an object that responds to #read and #eof?'
95
+
96
+ end
97
+
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,81 @@
1
+ # Copyright 2011-2012 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
+ class S3
16
+
17
+ # This module contains exception classes for each of the error
18
+ # types that S3 can return. You can use these classes to rescue
19
+ # specific errors, for example:
20
+ #
21
+ # begin
22
+ # S3.new.buckets.mybucket.
23
+ # objects.myobj.write("HELLO")
24
+ # rescue S3::Errors::NoSuchBucket => e
25
+ # S3.new.buckets.create("mybucket")
26
+ # retry
27
+ # end
28
+ #
29
+ # All errors raised as a result of error responses from the
30
+ # service are instances of either {ClientError} or {ServerError}.
31
+ # @private
32
+ module Errors
33
+
34
+ # @private
35
+ GRAMMAR = Core::XML::Grammar.customize
36
+
37
+ extend Core::LazyErrorClasses
38
+
39
+ class BatchDeleteError < StandardError
40
+
41
+ def initialize error_counts
42
+ @error_counts = error_counts
43
+ total = error_counts.values.inject(0) {|sum,count| sum + count }
44
+ super("Failed to delete #{total} objects")
45
+ end
46
+
47
+ # @return [Hash] Returns a hash of error codes and how many
48
+ # objects failed with that code.
49
+ attr_reader :error_counts
50
+
51
+ end
52
+
53
+ # This error is special, because S3 does not (and must not
54
+ # according to RFC 2616) return a body with the HTTP response.
55
+ # The interface is the same as for any other client error.
56
+ class NotModified < AWS::Errors::Base
57
+
58
+ include AWS::Errors::ClientError
59
+
60
+ def initialize(req, resp)
61
+ super(req, resp, "NotModified", "Not Modified")
62
+ end
63
+
64
+ end
65
+
66
+ # This error is special, because S3 does not return a body with
67
+ # the HTTP response. The interface is the same as for any other
68
+ # client error.
69
+ class NoSuchKey < AWS::Errors::Base
70
+
71
+ include AWS::Errors::ClientError
72
+
73
+ def initialize(req, resp, code = nil, message = nil)
74
+ super(req, resp, "NoSuchKey", "No Such Key")
75
+ end
76
+
77
+ end
78
+
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,317 @@
1
+ # Copyright 2011-2012 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
+ require 'thread'
15
+
16
+ module AWS
17
+ class S3
18
+
19
+ # Represents a multipart upload to an S3 object. See
20
+ # {S3Object#multipart_upload} for a convenient way to initiate a
21
+ # multipart upload.
22
+ class MultipartUpload
23
+
24
+ include Core::Model
25
+
26
+ # @private
27
+ def initialize(object, id, options = {})
28
+ @id = id
29
+ @object = object
30
+
31
+ super
32
+
33
+ @completed_parts = {}
34
+ @increment_mutex = Mutex.new
35
+ @completed_mutex = Mutex.new
36
+ @last_part = 0
37
+ end
38
+
39
+ def bucket
40
+ object.bucket
41
+ end
42
+
43
+ def inspect
44
+ "<#{self.class}:#{object.bucket.name}/#{object.key}:#{id}>"
45
+ end
46
+ # @return [String] Returns the upload id.
47
+ attr_reader :id
48
+
49
+ alias_method :upload_id, :id
50
+
51
+ # @return [S3Object] Returns the object this upload is intended for.
52
+ attr_reader :object
53
+
54
+ # @return [Boolean] Returns true if both multipart uploads
55
+ # represent the same object and upload.
56
+ def ==(other)
57
+ other.kind_of?(MultipartUpload) and
58
+ other.object == object and
59
+ other.id == id
60
+ end
61
+
62
+ alias_method :eql?, :==
63
+
64
+ # @return [Boolean] True if the upload exists.
65
+ def exists?
66
+ client.list_parts(base_opts)
67
+ rescue Errors::NoSuchUpload => e
68
+ false
69
+ else
70
+ true
71
+ end
72
+
73
+ # @return The upload initiator. This object will have +:id+
74
+ # and +:display_name+ methods; if the initiator is an IAM
75
+ # user, the +:id+ method will return the ARN of the user, and
76
+ # if the initiator is an AWS account, this method will return
77
+ # the same data as {#owner}.
78
+ def initiator
79
+ client.list_parts(base_opts).initiator
80
+ end
81
+
82
+ # @return The upload owner. This object will have +:id+
83
+ # and +:display_name+ methods.
84
+ def owner
85
+ client.list_parts(base_opts).owner
86
+ end
87
+
88
+ # @return [Symbol] The class of storage used to store the
89
+ # uploaded object. Possible values:
90
+ #
91
+ # * +:standard+
92
+ # * +:reduced_redundancy?+
93
+ def storage_class
94
+ client.list_parts(base_opts).storage_class.downcase.to_sym
95
+ end
96
+
97
+ # @return [Boolean] True if the uploaded object will be stored
98
+ # with reduced redundancy.
99
+ def reduced_redundancy?
100
+ storage_class == :reduced_redundancy
101
+ end
102
+
103
+ # Aborts the upload. After a multipart upload is aborted, no
104
+ # additional parts can be uploaded using that upload ID. The
105
+ # storage consumed by any previously uploaded parts will be
106
+ # freed. However, if any part uploads are currently in
107
+ # progress, those part uploads might or might not succeed. As
108
+ # a result, it might be necessary to abort a given multipart
109
+ # upload multiple times in order to completely free all
110
+ # storage consumed by all parts.
111
+ # @return [nil]
112
+ def abort
113
+ client.abort_multipart_upload(base_opts)
114
+ @aborted = true
115
+ nil
116
+ end
117
+ alias_method :delete, :abort
118
+ alias_method :cancel, :abort
119
+
120
+ # @return [Boolean] True if the upload has been aborted.
121
+ # @see #abort
122
+ def aborted?
123
+ @aborted
124
+ end
125
+
126
+ # Uploads a part.
127
+ #
128
+ # @overload add_part(data, options = {})
129
+ #
130
+ # @param data The data to upload. Valid values include:
131
+ #
132
+ # * A string
133
+ #
134
+ # * A Pathname object
135
+ #
136
+ # * Any object responding to +read+ and +eof?+; the object
137
+ # must support the following access methods:
138
+ #
139
+ # read # all at once
140
+ # read(length) until eof? # in chunks
141
+ #
142
+ # If you specify data this way, you must also include
143
+ # the +:content_length+ option.
144
+ #
145
+ # @param [Hash] options Additional options for the upload.
146
+ #
147
+ # @option options [Integer] :content_length If provided,
148
+ # this option must match the total number of bytes written
149
+ # to S3 during the operation. This option is required if
150
+ # +:data+ is an IO-like object without a +size+ method.
151
+ #
152
+ # @overload add_part(options)
153
+ #
154
+ # @param [Hash] options Options for the upload. Either
155
+ # +:data+ or +:file+ is required.
156
+ #
157
+ # @option options :data The data to upload. Valid values
158
+ # include:
159
+ #
160
+ # * A string
161
+ #
162
+ # * A Pathname object
163
+ #
164
+ # * Any object responding to +read+ and +eof?+; the object
165
+ # must support the following access methods:
166
+ #
167
+ # read # all at once
168
+ # read(length) until eof? # in chunks
169
+ #
170
+ # If you specify data this way, you must also include
171
+ # the +:content_length+ option.
172
+ #
173
+ # @option options [String] :file Can be specified instead of
174
+ # +:data+; its value specifies the path of a file to
175
+ # upload.
176
+ #
177
+ # @option options [Integer] :content_length If provided,
178
+ # this option must match the total number of bytes written
179
+ # to S3 during the operation. This option is required if
180
+ # +:data+ is an IO-like object without a +size+ method.
181
+ #
182
+ # @option options [Integer] :part_number The part number.
183
+ def add_part(data_or_options, options = {})
184
+ if data_or_options.kind_of?(Hash)
185
+ part_options = base_opts.merge(data_or_options)
186
+ else
187
+ part_options = base_opts.merge(:data => data_or_options)
188
+ end
189
+ part_options.merge!(options)
190
+
191
+ unless part_options[:part_number]
192
+ @increment_mutex.synchronize do
193
+ part_options[:part_number] = (@last_part += 1)
194
+ end
195
+ end
196
+ part_number = part_options[:part_number]
197
+
198
+ resp = client.upload_part(part_options)
199
+ @completed_mutex.synchronize do
200
+ @completed_parts[part_number] = {
201
+ :part_number => part_number,
202
+ :etag => resp.etag
203
+ }
204
+ end
205
+ UploadedPart.new(self, part_number)
206
+ end
207
+
208
+ # Completes the upload by assembling previously uploaded
209
+ # parts.
210
+ #
211
+ # @return [S3Object, ObjectVersion] If the bucket has versioning
212
+ # enabled, returns the {ObjectVersion} representing the
213
+ # version that was uploaded. If versioning is disabled,
214
+ # returns the object.
215
+ def complete(*parts)
216
+ parts = parts.flatten
217
+ case parts.first
218
+ when :remote_parts
219
+ complete_opts = get_complete_opts
220
+ when :local_parts, nil
221
+ complete_opts = base_opts.merge(:parts => completed_parts)
222
+ else
223
+ part_numbers = parts.map do |part|
224
+ case part
225
+ when Integer
226
+ part
227
+ when UploadedPart
228
+ raise ArgumentError.new("cannot complete an upload with parts "+
229
+ "from a different upload") unless
230
+ part.upload == self
231
+
232
+ part.part_number
233
+ else
234
+ raise ArgumentError.new("expected number or UploadedPart")
235
+ end
236
+ end
237
+ complete_opts = get_complete_opts(part_numbers)
238
+ end
239
+
240
+ raise "no parts uploaded" if complete_opts[:parts].empty?
241
+
242
+ resp = client.complete_multipart_upload(complete_opts)
243
+ if resp.version_id
244
+ ObjectVersion.new(object, resp.version_id)
245
+ else
246
+ object
247
+ end
248
+ end
249
+
250
+ # Completes the upload or aborts it if no parts have been
251
+ # uploaded yet. Does nothing if the upload has already been
252
+ # aborted.
253
+ #
254
+ # @return [S3Object, ObjectVersion] If the bucket has versioning
255
+ # enabled, returns the {ObjectVersion} representing the
256
+ # version that was uploaded. If versioning is disabled,
257
+ # returns the object. If no upload was attempted (e.g. if it
258
+ # was aborted or if no parts were uploaded), returns +nil+.
259
+ def close
260
+ return if aborted?
261
+ if completed_parts.empty?
262
+ abort
263
+ else
264
+ complete
265
+ end
266
+ end
267
+
268
+ # @return [UploadedPartCollection] A collection representing
269
+ # the parts that have been uploaded to S3 for this upload.
270
+ def parts
271
+ UploadedPartCollection.new(self)
272
+ end
273
+
274
+ # @private
275
+ def completed_parts
276
+ @completed_parts.values.
277
+ sort { |a, b| a[:part_number] <=> b[:part_number] }
278
+ end
279
+
280
+ # @private
281
+ def inspect
282
+ "<#{self.class}:#{object.bucket.name}/#{object.key}:#{id}>"
283
+ end
284
+
285
+ # @private
286
+ private
287
+ def get_complete_opts(part_numbers = nil)
288
+ parts_resp = client.list_parts(base_opts)
289
+ complete_opts =
290
+ base_opts.merge(:parts =>
291
+ parts_resp.parts.map do |part|
292
+ { :part_number => part.part_number,
293
+ :etag => part.etag }
294
+ end)
295
+
296
+ complete_opts[:parts].reject! do |part|
297
+ !part_numbers.include?(part[:part_number])
298
+ end if part_numbers
299
+
300
+ complete_opts
301
+ end
302
+
303
+ # @private
304
+ private
305
+ def base_opts
306
+ opts = {
307
+ :bucket_name => object.bucket.name,
308
+ :key => object.key
309
+ }
310
+ opts[:upload_id] = upload_id if upload_id
311
+ opts
312
+ end
313
+
314
+ end
315
+
316
+ end
317
+ end