aws-sdk 1.8.5 → 1.9.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 (386) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +1 -0
  3. data/README.rdoc +8 -0
  4. data/lib/aws-sdk.rb +39 -35
  5. data/lib/aws/api_config/CloudFront-2012-07-01.yml +2398 -0
  6. data/lib/aws/api_config/DirectConnect-2012-10-25.yml +475 -0
  7. data/lib/aws/api_config/DynamoDB-2011-12-05.yml +8 -0
  8. data/lib/aws/api_config/DynamoDB-2012-08-10.yml +1516 -0
  9. data/lib/aws/api_config/OpsWorks-2013-02-18.yml +2 -2
  10. data/lib/aws/auto_scaling.rb +44 -44
  11. data/lib/aws/auto_scaling/activity.rb +1 -1
  12. data/lib/aws/auto_scaling/activity_collection.rb +14 -15
  13. data/lib/aws/auto_scaling/client.rb +277 -277
  14. data/lib/aws/auto_scaling/config.rb +1 -1
  15. data/lib/aws/auto_scaling/group.rb +35 -36
  16. data/lib/aws/auto_scaling/group_collection.rb +10 -10
  17. data/lib/aws/auto_scaling/group_options.rb +19 -19
  18. data/lib/aws/auto_scaling/instance.rb +27 -27
  19. data/lib/aws/auto_scaling/instance_collection.rb +10 -10
  20. data/lib/aws/auto_scaling/launch_configuration.rb +3 -3
  21. data/lib/aws/auto_scaling/launch_configuration_collection.rb +1 -1
  22. data/lib/aws/auto_scaling/notification_configuration.rb +2 -2
  23. data/lib/aws/auto_scaling/notification_configuration_collection.rb +37 -38
  24. data/lib/aws/auto_scaling/scaling_policy.rb +3 -3
  25. data/lib/aws/auto_scaling/scaling_policy_collection.rb +6 -6
  26. data/lib/aws/auto_scaling/scaling_policy_options.rb +8 -7
  27. data/lib/aws/auto_scaling/scheduled_action.rb +3 -3
  28. data/lib/aws/auto_scaling/scheduled_action_collection.rb +28 -28
  29. data/lib/aws/auto_scaling/tag_collection.rb +30 -28
  30. data/lib/aws/cloud_formation.rb +95 -94
  31. data/lib/aws/cloud_formation/client.rb +136 -133
  32. data/lib/aws/cloud_formation/config.rb +1 -1
  33. data/lib/aws/cloud_formation/stack.rb +37 -37
  34. data/lib/aws/cloud_formation/stack_collection.rb +28 -27
  35. data/lib/aws/cloud_formation/stack_event.rb +9 -11
  36. data/lib/aws/cloud_formation/stack_output.rb +1 -1
  37. data/lib/aws/cloud_formation/stack_resource.rb +6 -6
  38. data/lib/aws/cloud_formation/stack_resource_collection.rb +11 -12
  39. data/lib/aws/cloud_formation/stack_resource_summary_collection.rb +11 -11
  40. data/lib/aws/cloud_formation/stack_summary_collection.rb +39 -39
  41. data/lib/aws/cloud_front.rb +21 -21
  42. data/lib/aws/cloud_front/client.rb +853 -652
  43. data/lib/aws/cloud_front/request.rb +3 -0
  44. data/lib/aws/cloud_search.rb +22 -22
  45. data/lib/aws/cloud_search/client.rb +322 -315
  46. data/lib/aws/cloud_search/config.rb +1 -1
  47. data/lib/aws/cloud_watch.rb +39 -39
  48. data/lib/aws/cloud_watch/alarm.rb +55 -37
  49. data/lib/aws/cloud_watch/alarm_collection.rb +18 -18
  50. data/lib/aws/cloud_watch/alarm_history_item_collection.rb +2 -2
  51. data/lib/aws/cloud_watch/client.rb +360 -146
  52. data/lib/aws/cloud_watch/config.rb +1 -1
  53. data/lib/aws/cloud_watch/metric.rb +15 -15
  54. data/lib/aws/cloud_watch/metric_alarm_collection.rb +17 -17
  55. data/lib/aws/cloud_watch/metric_collection.rb +16 -16
  56. data/lib/aws/cloud_watch/metric_statistics.rb +11 -11
  57. data/lib/aws/core.rb +243 -225
  58. data/lib/aws/core/async_handle.rb +13 -13
  59. data/lib/aws/core/cacheable.rb +14 -15
  60. data/lib/aws/core/client.rb +40 -15
  61. data/lib/aws/core/collection.rb +42 -46
  62. data/lib/aws/core/collection/with_limit_and_next_token.rb +1 -1
  63. data/lib/aws/core/collection/with_next_token.rb +1 -1
  64. data/lib/aws/core/configuration.rb +97 -133
  65. data/lib/aws/core/credential_providers.rb +16 -16
  66. data/lib/aws/core/data.rb +23 -23
  67. data/lib/aws/core/http/connection_pool.rb +348 -0
  68. data/lib/aws/core/http/net_http_handler.rb +17 -26
  69. data/lib/aws/core/http/patch.rb +102 -0
  70. data/lib/aws/core/http/request.rb +13 -19
  71. data/lib/aws/core/http/response.rb +2 -2
  72. data/lib/aws/core/lazy_error_classes.rb +17 -17
  73. data/lib/aws/core/log_formatter.rb +70 -104
  74. data/lib/aws/core/options/json_serializer.rb +1 -1
  75. data/lib/aws/core/options/validator.rb +4 -4
  76. data/lib/aws/core/page_result.rb +8 -8
  77. data/lib/aws/core/policy.rb +49 -49
  78. data/lib/aws/core/region.rb +72 -0
  79. data/lib/aws/core/region_collection.rb +106 -0
  80. data/lib/aws/core/resource.rb +5 -5
  81. data/lib/aws/core/response.rb +20 -17
  82. data/lib/aws/core/rest_request_builder.rb +4 -4
  83. data/lib/aws/core/service_interface.rb +24 -2
  84. data/lib/aws/core/signature/version_3.rb +2 -2
  85. data/lib/aws/core/uri_escape.rb +1 -1
  86. data/lib/aws/core/xml/frame_stack.rb +1 -1
  87. data/lib/aws/core/xml/grammar.rb +3 -4
  88. data/lib/aws/core/xml/sax_handlers/libxml.rb +2 -2
  89. data/lib/aws/core/xml/sax_handlers/nokogiri.rb +3 -3
  90. data/lib/aws/core/xml/sax_handlers/rexml.rb +5 -5
  91. data/lib/aws/core/xml/stub.rb +9 -9
  92. data/lib/aws/data_pipeline.rb +21 -21
  93. data/lib/aws/data_pipeline/client.rb +189 -133
  94. data/lib/aws/data_pipeline/config.rb +1 -1
  95. data/lib/aws/direct_connect.rb +74 -0
  96. data/lib/aws/direct_connect/client.rb +253 -0
  97. data/lib/aws/direct_connect/config.rb +18 -0
  98. data/lib/aws/direct_connect/errors.rb +22 -0
  99. data/lib/aws/direct_connect/request.rb +27 -0
  100. data/lib/aws/dynamo_db.rb +71 -69
  101. data/lib/aws/dynamo_db/attribute_collection.rb +53 -58
  102. data/lib/aws/dynamo_db/batch_get.rb +23 -23
  103. data/lib/aws/dynamo_db/batch_write.rb +43 -43
  104. data/lib/aws/dynamo_db/binary.rb +9 -9
  105. data/lib/aws/dynamo_db/client.rb +494 -509
  106. data/lib/aws/dynamo_db/client_base.rb +91 -0
  107. data/lib/aws/dynamo_db/client_v2.rb +825 -0
  108. data/lib/aws/dynamo_db/config.rb +1 -1
  109. data/lib/aws/dynamo_db/item.rb +10 -10
  110. data/lib/aws/dynamo_db/item_collection.rb +75 -75
  111. data/lib/aws/dynamo_db/table.rb +85 -85
  112. data/lib/aws/dynamo_db/table_collection.rb +13 -13
  113. data/lib/aws/ec2.rb +132 -142
  114. data/lib/aws/ec2/attachment.rb +31 -36
  115. data/lib/aws/ec2/attachment_collection.rb +1 -1
  116. data/lib/aws/ec2/availability_zone.rb +4 -4
  117. data/lib/aws/ec2/client.rb +2272 -2125
  118. data/lib/aws/ec2/config.rb +1 -1
  119. data/lib/aws/ec2/customer_gateway.rb +6 -6
  120. data/lib/aws/ec2/customer_gateway_collection.rb +6 -6
  121. data/lib/aws/ec2/dhcp_options.rb +3 -3
  122. data/lib/aws/ec2/dhcp_options_collection.rb +10 -10
  123. data/lib/aws/ec2/elastic_ip.rb +15 -15
  124. data/lib/aws/ec2/elastic_ip_collection.rb +11 -15
  125. data/lib/aws/ec2/export_task.rb +4 -4
  126. data/lib/aws/ec2/export_task_collection.rb +11 -11
  127. data/lib/aws/ec2/filtered_collection.rb +6 -8
  128. data/lib/aws/ec2/image.rb +46 -40
  129. data/lib/aws/ec2/image_collection.rb +44 -52
  130. data/lib/aws/ec2/instance.rb +64 -62
  131. data/lib/aws/ec2/instance_collection.rb +47 -50
  132. data/lib/aws/ec2/internet_gateway.rb +6 -6
  133. data/lib/aws/ec2/internet_gateway/attachment.rb +13 -13
  134. data/lib/aws/ec2/internet_gateway_collection.rb +3 -3
  135. data/lib/aws/ec2/key_pair.rb +3 -3
  136. data/lib/aws/ec2/key_pair_collection.rb +12 -12
  137. data/lib/aws/ec2/network_acl.rb +39 -39
  138. data/lib/aws/ec2/network_acl/association.rb +2 -2
  139. data/lib/aws/ec2/network_acl/entry.rb +22 -22
  140. data/lib/aws/ec2/network_acl_collection.rb +2 -2
  141. data/lib/aws/ec2/network_interface.rb +13 -4
  142. data/lib/aws/ec2/network_interface/attachment.rb +3 -3
  143. data/lib/aws/ec2/network_interface_collection.rb +5 -5
  144. data/lib/aws/ec2/permission_collection.rb +1 -1
  145. data/lib/aws/ec2/region.rb +6 -6
  146. data/lib/aws/ec2/region_collection.rb +1 -1
  147. data/lib/aws/ec2/reserved_instances_collection.rb +2 -2
  148. data/lib/aws/ec2/reserved_instances_offering_collection.rb +2 -2
  149. data/lib/aws/ec2/resource_tag_collection.rb +5 -5
  150. data/lib/aws/ec2/route_table.rb +14 -14
  151. data/lib/aws/ec2/route_table/association.rb +22 -22
  152. data/lib/aws/ec2/route_table/route.rb +8 -8
  153. data/lib/aws/ec2/route_table_collection.rb +3 -3
  154. data/lib/aws/ec2/security_group.rb +39 -41
  155. data/lib/aws/ec2/security_group_collection.rb +19 -21
  156. data/lib/aws/ec2/snapshot.rb +3 -3
  157. data/lib/aws/ec2/snapshot_collection.rb +11 -12
  158. data/lib/aws/ec2/subnet.rb +2 -2
  159. data/lib/aws/ec2/subnet_collection.rb +17 -17
  160. data/lib/aws/ec2/tag_collection.rb +1 -1
  161. data/lib/aws/ec2/tagged_collection.rb +7 -7
  162. data/lib/aws/ec2/tagged_item.rb +10 -10
  163. data/lib/aws/ec2/volume.rb +16 -16
  164. data/lib/aws/ec2/volume_collection.rb +9 -12
  165. data/lib/aws/ec2/vpc.rb +6 -6
  166. data/lib/aws/ec2/vpc_collection.rb +10 -10
  167. data/lib/aws/ec2/vpn_connection.rb +4 -4
  168. data/lib/aws/ec2/vpn_connection/telemetry.rb +1 -1
  169. data/lib/aws/ec2/vpn_connection_collection.rb +6 -6
  170. data/lib/aws/ec2/vpn_gateway.rb +2 -2
  171. data/lib/aws/ec2/vpn_gateway_collection.rb +5 -5
  172. data/lib/aws/elastic_beanstalk.rb +12 -12
  173. data/lib/aws/elastic_beanstalk/client.rb +376 -368
  174. data/lib/aws/elastic_beanstalk/config.rb +1 -1
  175. data/lib/aws/elastic_transcoder.rb +5 -5
  176. data/lib/aws/elastic_transcoder/client.rb +283 -283
  177. data/lib/aws/elastic_transcoder/config.rb +1 -1
  178. data/lib/aws/elasticache.rb +12 -12
  179. data/lib/aws/elasticache/client.rb +484 -479
  180. data/lib/aws/elasticache/config.rb +1 -1
  181. data/lib/aws/elb.rb +23 -23
  182. data/lib/aws/elb/availability_zone_collection.rb +34 -34
  183. data/lib/aws/elb/backend_server_policy_collection.rb +24 -24
  184. data/lib/aws/elb/client.rb +153 -153
  185. data/lib/aws/elb/config.rb +1 -1
  186. data/lib/aws/elb/errors.rb +1 -1
  187. data/lib/aws/elb/instance_collection.rb +20 -25
  188. data/lib/aws/elb/listener.rb +3 -3
  189. data/lib/aws/elb/listener_collection.rb +8 -8
  190. data/lib/aws/elb/load_balancer.rb +15 -16
  191. data/lib/aws/elb/load_balancer_collection.rb +36 -24
  192. data/lib/aws/elb/load_balancer_policy.rb +1 -1
  193. data/lib/aws/elb/load_balancer_policy_collection.rb +5 -5
  194. data/lib/aws/emr.rb +28 -26
  195. data/lib/aws/emr/client.rb +165 -149
  196. data/lib/aws/emr/config.rb +1 -1
  197. data/lib/aws/emr/instance_group.rb +1 -1
  198. data/lib/aws/emr/instance_group_collection.rb +1 -1
  199. data/lib/aws/emr/job_flow.rb +27 -26
  200. data/lib/aws/emr/job_flow_collection.rb +34 -34
  201. data/lib/aws/errors.rb +7 -7
  202. data/lib/aws/glacier.rb +21 -21
  203. data/lib/aws/glacier/archive_collection.rb +2 -2
  204. data/lib/aws/glacier/client.rb +139 -140
  205. data/lib/aws/glacier/config.rb +1 -1
  206. data/lib/aws/glacier/vault.rb +2 -2
  207. data/lib/aws/glacier/vault_collection.rb +1 -1
  208. data/lib/aws/iam.rb +133 -144
  209. data/lib/aws/iam/access_key.rb +17 -17
  210. data/lib/aws/iam/access_key_collection.rb +22 -22
  211. data/lib/aws/iam/account_alias_collection.rb +2 -2
  212. data/lib/aws/iam/client.rb +429 -420
  213. data/lib/aws/iam/collection.rb +1 -1
  214. data/lib/aws/iam/config.rb +2 -2
  215. data/lib/aws/iam/group.rb +8 -8
  216. data/lib/aws/iam/group_collection.rb +16 -16
  217. data/lib/aws/iam/group_policy_collection.rb +6 -6
  218. data/lib/aws/iam/group_user_collection.rb +3 -3
  219. data/lib/aws/iam/mfa_device.rb +1 -1
  220. data/lib/aws/iam/mfa_device_collection.rb +9 -9
  221. data/lib/aws/iam/policy_collection.rb +4 -4
  222. data/lib/aws/iam/resource.rb +2 -2
  223. data/lib/aws/iam/server_certificate.rb +1 -1
  224. data/lib/aws/iam/server_certificate_collection.rb +15 -15
  225. data/lib/aws/iam/signing_certificate.rb +29 -29
  226. data/lib/aws/iam/signing_certificate_collection.rb +23 -23
  227. data/lib/aws/iam/user.rb +33 -38
  228. data/lib/aws/iam/user_collection.rb +27 -27
  229. data/lib/aws/iam/user_group_collection.rb +3 -3
  230. data/lib/aws/iam/user_policy_collection.rb +6 -6
  231. data/lib/aws/iam/virtual_mfa_device.rb +12 -12
  232. data/lib/aws/iam/virtual_mfa_device_collection.rb +4 -4
  233. data/lib/aws/import_export.rb +22 -21
  234. data/lib/aws/import_export/client.rb +47 -43
  235. data/lib/aws/ops_works.rb +5 -5
  236. data/lib/aws/ops_works/client.rb +484 -438
  237. data/lib/aws/ops_works/config.rb +1 -1
  238. data/lib/aws/rails.rb +34 -34
  239. data/lib/aws/rds.rb +18 -18
  240. data/lib/aws/rds/client.rb +1286 -1277
  241. data/lib/aws/rds/config.rb +1 -1
  242. data/lib/aws/rds/db_instance.rb +15 -4
  243. data/lib/aws/rds/db_snapshot.rb +1 -1
  244. data/lib/aws/record.rb +50 -24
  245. data/lib/aws/record/abstract_base.rb +52 -60
  246. data/lib/aws/record/attributes.rb +79 -79
  247. data/lib/aws/record/conversion.rb +1 -1
  248. data/lib/aws/record/dirty_tracking.rb +69 -67
  249. data/lib/aws/record/errors.rb +21 -21
  250. data/lib/aws/record/exceptions.rb +2 -2
  251. data/lib/aws/record/hash_model.rb +20 -21
  252. data/lib/aws/record/hash_model/attributes.rb +13 -15
  253. data/lib/aws/record/hash_model/finder_methods.rb +46 -46
  254. data/lib/aws/record/hash_model/scope.rb +31 -31
  255. data/lib/aws/record/model.rb +136 -136
  256. data/lib/aws/record/model/attributes.rb +57 -59
  257. data/lib/aws/record/model/finder_methods.rb +67 -67
  258. data/lib/aws/record/model/scope.rb +48 -49
  259. data/lib/aws/record/naming.rb +1 -1
  260. data/lib/aws/record/scope.rb +23 -19
  261. data/lib/aws/record/validations.rb +253 -271
  262. data/lib/aws/record/validator.rb +3 -3
  263. data/lib/aws/record/validators/acceptance.rb +1 -3
  264. data/lib/aws/record/validators/block.rb +1 -3
  265. data/lib/aws/record/validators/confirmation.rb +1 -3
  266. data/lib/aws/record/validators/count.rb +2 -4
  267. data/lib/aws/record/validators/exclusion.rb +2 -4
  268. data/lib/aws/record/validators/format.rb +2 -4
  269. data/lib/aws/record/validators/inclusion.rb +1 -3
  270. data/lib/aws/record/validators/length.rb +5 -7
  271. data/lib/aws/record/validators/method.rb +1 -3
  272. data/lib/aws/record/validators/numericality.rb +6 -8
  273. data/lib/aws/record/validators/presence.rb +1 -3
  274. data/lib/aws/redshift.rb +14 -14
  275. data/lib/aws/redshift/client.rb +596 -592
  276. data/lib/aws/redshift/config.rb +1 -1
  277. data/lib/aws/route_53.rb +30 -30
  278. data/lib/aws/route_53/change_batch.rb +7 -7
  279. data/lib/aws/route_53/client.rb +188 -152
  280. data/lib/aws/route_53/hosted_zone.rb +4 -4
  281. data/lib/aws/route_53/hosted_zone_collection.rb +7 -7
  282. data/lib/aws/route_53/resource_record_set.rb +10 -10
  283. data/lib/aws/route_53/resource_record_set_collection.rb +6 -6
  284. data/lib/aws/s3.rb +79 -79
  285. data/lib/aws/s3/access_control_list.rb +44 -36
  286. data/lib/aws/s3/acl_options.rb +51 -51
  287. data/lib/aws/s3/bucket.rb +146 -146
  288. data/lib/aws/s3/bucket_collection.rb +21 -21
  289. data/lib/aws/s3/bucket_lifecycle_configuration.rb +81 -82
  290. data/lib/aws/s3/bucket_tag_collection.rb +4 -2
  291. data/lib/aws/s3/cipher_io.rb +5 -4
  292. data/lib/aws/s3/client.rb +89 -84
  293. data/lib/aws/s3/client/xml.rb +1 -1
  294. data/lib/aws/s3/config.rb +7 -1
  295. data/lib/aws/s3/cors_rule.rb +2 -0
  296. data/lib/aws/s3/cors_rule_collection.rb +42 -40
  297. data/lib/aws/s3/data_options.rb +16 -11
  298. data/lib/aws/s3/encryption_utils.rb +2 -2
  299. data/lib/aws/s3/errors.rb +7 -7
  300. data/lib/aws/s3/multipart_upload.rb +30 -33
  301. data/lib/aws/s3/multipart_upload_collection.rb +8 -6
  302. data/lib/aws/s3/object_collection.rb +35 -35
  303. data/lib/aws/s3/object_metadata.rb +6 -6
  304. data/lib/aws/s3/object_version.rb +4 -4
  305. data/lib/aws/s3/object_version_collection.rb +15 -15
  306. data/lib/aws/s3/policy.rb +2 -2
  307. data/lib/aws/s3/prefixed_collection.rb +9 -5
  308. data/lib/aws/s3/presigned_post.rb +39 -37
  309. data/lib/aws/s3/request.rb +11 -11
  310. data/lib/aws/s3/s3_object.rb +210 -200
  311. data/lib/aws/s3/tree.rb +25 -27
  312. data/lib/aws/s3/tree/child_collection.rb +3 -3
  313. data/lib/aws/s3/tree/leaf_node.rb +2 -2
  314. data/lib/aws/s3/tree/parent.rb +1 -1
  315. data/lib/aws/s3/website_configuration.rb +13 -13
  316. data/lib/aws/simple_db.rb +83 -83
  317. data/lib/aws/simple_db/attribute.rb +9 -7
  318. data/lib/aws/simple_db/attribute_collection.rb +22 -13
  319. data/lib/aws/simple_db/client.rb +107 -107
  320. data/lib/aws/simple_db/config.rb +7 -1
  321. data/lib/aws/simple_db/consistent_read_option.rb +5 -5
  322. data/lib/aws/simple_db/domain.rb +4 -2
  323. data/lib/aws/simple_db/domain_collection.rb +4 -4
  324. data/lib/aws/simple_db/domain_metadata.rb +5 -5
  325. data/lib/aws/simple_db/errors.rb +9 -9
  326. data/lib/aws/simple_db/item.rb +5 -5
  327. data/lib/aws/simple_db/item_collection.rb +83 -81
  328. data/lib/aws/simple_db/item_data.rb +4 -4
  329. data/lib/aws/simple_db/put_attributes.rb +3 -3
  330. data/lib/aws/simple_email_service.rb +140 -140
  331. data/lib/aws/simple_email_service/client.rb +82 -76
  332. data/lib/aws/simple_email_service/config.rb +1 -2
  333. data/lib/aws/simple_email_service/email_address_collection.rb +3 -3
  334. data/lib/aws/simple_email_service/identity.rb +8 -8
  335. data/lib/aws/simple_email_service/quotas.rb +8 -6
  336. data/lib/aws/simple_workflow.rb +106 -106
  337. data/lib/aws/simple_workflow/activity_task.rb +15 -22
  338. data/lib/aws/simple_workflow/activity_task_collection.rb +15 -15
  339. data/lib/aws/simple_workflow/activity_type.rb +23 -23
  340. data/lib/aws/simple_workflow/activity_type_collection.rb +23 -23
  341. data/lib/aws/simple_workflow/client.rb +1004 -956
  342. data/lib/aws/simple_workflow/config.rb +1 -1
  343. data/lib/aws/simple_workflow/count.rb +5 -5
  344. data/lib/aws/simple_workflow/decision_task.rb +129 -129
  345. data/lib/aws/simple_workflow/decision_task_collection.rb +59 -59
  346. data/lib/aws/simple_workflow/domain.rb +11 -11
  347. data/lib/aws/simple_workflow/domain_collection.rb +26 -26
  348. data/lib/aws/simple_workflow/history_event.rb +32 -32
  349. data/lib/aws/simple_workflow/history_event_collection.rb +3 -3
  350. data/lib/aws/simple_workflow/option_formatters.rb +5 -5
  351. data/lib/aws/simple_workflow/request.rb +1 -1
  352. data/lib/aws/simple_workflow/resource.rb +1 -1
  353. data/lib/aws/simple_workflow/type.rb +8 -8
  354. data/lib/aws/simple_workflow/type_collection.rb +15 -15
  355. data/lib/aws/simple_workflow/workflow_execution.rb +70 -72
  356. data/lib/aws/simple_workflow/workflow_execution_collection.rb +130 -130
  357. data/lib/aws/simple_workflow/workflow_type.rb +27 -25
  358. data/lib/aws/simple_workflow/workflow_type_collection.rb +20 -20
  359. data/lib/aws/sns.rb +25 -25
  360. data/lib/aws/sns/client.rb +55 -55
  361. data/lib/aws/sns/config.rb +1 -1
  362. data/lib/aws/sns/policy.rb +1 -1
  363. data/lib/aws/sns/subscription.rb +7 -7
  364. data/lib/aws/sns/subscription_collection.rb +5 -5
  365. data/lib/aws/sns/topic.rb +49 -49
  366. data/lib/aws/sns/topic_collection.rb +2 -2
  367. data/lib/aws/sns/topic_subscription_collection.rb +5 -5
  368. data/lib/aws/sqs.rb +20 -20
  369. data/lib/aws/sqs/client.rb +78 -78
  370. data/lib/aws/sqs/config.rb +1 -1
  371. data/lib/aws/sqs/errors.rb +12 -12
  372. data/lib/aws/sqs/queue.rb +66 -67
  373. data/lib/aws/sqs/queue_collection.rb +16 -8
  374. data/lib/aws/sqs/received_message.rb +7 -6
  375. data/lib/aws/storage_gateway.rb +21 -21
  376. data/lib/aws/storage_gateway/client.rb +269 -202
  377. data/lib/aws/storage_gateway/config.rb +1 -1
  378. data/lib/aws/sts.rb +10 -8
  379. data/lib/aws/sts/client.rb +35 -35
  380. data/lib/aws/sts/session.rb +3 -3
  381. data/lib/aws/version.rb +1 -2
  382. metadata +23 -21
  383. data/lib/aws/core/autoloader.rb +0 -64
  384. data/lib/net/http/connection_pool.rb +0 -226
  385. data/lib/net/http/connection_pool/connection.rb +0 -189
  386. data/lib/net/http/connection_pool/session.rb +0 -126
@@ -17,48 +17,48 @@ module AWS
17
17
  # Data is a light wrapper around a Ruby hash that provides
18
18
  # method missing access to the hash contents.
19
19
  #
20
- # == Method Missing Access
20
+ # ## Method Missing Access
21
21
  #
22
22
  # You can access hash content with methods if their keys
23
23
  # are symbols.
24
24
  #
25
- # data = AWS::Core::Data.new({ :a => 1, :b => 2, :c => true })
26
- # data.a #=> 1
27
- # data.b #=> 2
28
- # data.c #=> true
29
- # data.d #=> raises NoMethodError
25
+ # data = AWS::Core::Data.new({ :a => 1, :b => 2, :c => true })
26
+ # data.a #=> 1
27
+ # data.b #=> 2
28
+ # data.c #=> true
29
+ # data.d #=> raises NoMethodError
30
30
  #
31
- # == Boolean Methods
31
+ # ## Boolean Methods
32
32
  #
33
33
  # Given the structure above you can also use question-mark methods.
34
34
  #
35
- # data.c? #=> true
36
- # data.d? #=> raises NoMethodError
35
+ # data.c? #=> true
36
+ # data.d? #=> raises NoMethodError
37
37
  #
38
- # == Nested Hashes
38
+ # ## Nested Hashes
39
39
  #
40
40
  # If the data contains nested hashes you can chain methods into
41
41
  # the structure.
42
42
  #
43
- # data = AWS::Core::Data.new(:a => { :b => { :c => 'abc' }})
44
- # data.a.b.c #=> 'abc'
43
+ # data = AWS::Core::Data.new(:a => { :b => { :c => 'abc' }})
44
+ # data.a.b.c #=> 'abc'
45
45
  #
46
- # == Nested Arrays
46
+ # ## Nested Arrays
47
47
  #
48
48
  # Arrays are wrapped in {Data::List} objects. They ensure any
49
49
  # data returned is correctly wrapped so you can continue using
50
50
  # method-missing access.
51
51
  #
52
- # data = AWS::Core::Data.new(
53
- # :people => [
54
- # {:name => 'john'},
55
- # {:name => 'jane'},
56
- # ]})
52
+ # data = AWS::Core::Data.new(
53
+ # :people => [
54
+ # {:name => 'john'},
55
+ # {:name => 'jane'},
56
+ # ]})
57
57
  #
58
- # data.people[0].name #=> 'john'
59
- # data.people[1].name #=> 'jane'
58
+ # data.people[0].name #=> 'john'
59
+ # data.people[1].name #=> 'jane'
60
60
  #
61
- # data.people.map(&:name) #=> ['john','jane']
61
+ # data.people.map(&:name) #=> ['john','jane']
62
62
  #
63
63
  class Data
64
64
 
@@ -149,8 +149,8 @@ module AWS
149
149
 
150
150
  # Returns an inspection string from the wrapped data.
151
151
  #
152
- # data = AWS::Core::Data.new({ :a => 1, :b => 2, :c => true })
153
- # data.inspect #=> '{:a=>1, :b=>2, :c=>true}'
152
+ # data = AWS::Core::Data.new({ :a => 1, :b => 2, :c => true })
153
+ # data.inspect #=> '{:a=>1, :b=>2, :c=>true}'
154
154
  #
155
155
  # @return [String]
156
156
  #
@@ -0,0 +1,348 @@
1
+ # Copyright 2011-2013 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 'net/http'
15
+ require 'net/https'
16
+ require 'thread'
17
+ require 'logger'
18
+
19
+ module AWS
20
+ module Core
21
+ module Http
22
+
23
+ # @attr_reader [URI::HTTP,nil] proxy_uri Returns the configured proxy uri.
24
+ # @attr_reader [Float,nil] http_continue_timeout
25
+ # @attr_reader [Integer,Float] http_idle_timeout
26
+ # @attr_reader [Integer,Float] http_open_timeout
27
+ # @attr_reader [Integer,Float] http_read_timeout
28
+ # @attr_reader [Boolean] http_wire_trace
29
+ # @attr_reader [Logger,nil] logger
30
+ # @attr_reader [Boolean] ssl_verify_peer
31
+ # @attr_reader [String,nil] ssl_ca_file
32
+ # @attr_reader [String,nil] ssl_ca_path
33
+ # @private
34
+ class ConnectionPool
35
+
36
+ @pools_mutex = Mutex.new
37
+ @pools = {}
38
+
39
+ # @private
40
+ OPTIONS = [
41
+ :proxy_uri,
42
+ :http_continue_timeout,
43
+ :http_idle_timeout,
44
+ :http_open_timeout,
45
+ :http_read_timeout,
46
+ :http_wire_trace,
47
+ :logger,
48
+ :ssl_verify_peer,
49
+ :ssl_ca_file,
50
+ :ssl_ca_path,
51
+ ]
52
+
53
+ OPTIONS.each do |attr_name|
54
+ attr_reader(attr_name)
55
+ end
56
+
57
+ alias_method :http_wire_trace?, :http_wire_trace
58
+
59
+ alias_method :ssl_verify_peer?, :ssl_verify_peer
60
+
61
+ # @private
62
+ def initialize options = {}
63
+ # user supplied options are filtered by the class .for method
64
+ options.each_pair do |opt_name, opt_value|
65
+ instance_variable_set("@#{opt_name}", opt_value)
66
+ end
67
+
68
+ # connection pool
69
+ @pool_mutex = Mutex.new
70
+ @pool = Hash.new do |pool,endpoint|
71
+ pool[endpoint] = []
72
+ pool[endpoint]
73
+ end
74
+ end
75
+
76
+ # @return [Hash] a read-only hash of options for this pool.
77
+ def options
78
+ OPTIONS.inject({}) do |options, opt_name|
79
+ options[opt_name] = send(opt_name)
80
+ options
81
+ end.freeze
82
+ end
83
+
84
+ # Makes an HTTP request, yielding a Net::HTTPResponse object.
85
+ #
86
+ # pool.request('http://google.com', Net::HTTP::Get.new('/')) do |resp|
87
+ # puts resp.code # status code
88
+ # puts resp.to_h.inspect # dump the headers
89
+ # puts resp.body
90
+ # end
91
+ #
92
+ # @param [URI::HTTP,URI::HTTPS,String] endpoint The HTTP(S) endpoint to
93
+ # connect to (e.g. 'https://domain.com').
94
+ #
95
+ # @param [Net::HTTPRequest] request The request to make. This can be
96
+ # any request object from Net::HTTP (e.g. Net::HTTP::Get,
97
+ # Net::HTTP::POST, etc).
98
+ #
99
+ # @yieldparam [Net::HTTPResponse] net_http_response
100
+ #
101
+ # @return (see #session_for
102
+ def request endpoint, request, &block
103
+ session_for(endpoint) do |http|
104
+ yield(http.request(request))
105
+ end
106
+ end
107
+
108
+ # @param [URI::HTTP,URI::HTTPS,String] endpoint The HTTP(S) endpoint to
109
+ # connect to (e.g. 'https://domain.com').
110
+ #
111
+ # @yieldparam [Net::HTTPSession] session
112
+ #
113
+ # @return [nil]
114
+ def session_for endpoint, &block
115
+ endpoint = endpoint.to_s
116
+ session = nil
117
+
118
+ # attempt to recycle an already open session
119
+ @pool_mutex.synchronize do
120
+ _clean
121
+ session = @pool[endpoint].shift
122
+ end
123
+
124
+ begin
125
+ session ||= start_session(endpoint)
126
+ session.read_timeout = http_read_timeout
127
+ session.continue_timeout = http_continue_timeout
128
+ yield(session)
129
+ rescue Exception => error
130
+ session.finish if session
131
+ raise error
132
+ else
133
+ # No error raised? Good, check the session into the pool.
134
+ @pool_mutex.synchronize { @pool[endpoint] << session }
135
+ end
136
+ nil
137
+ end
138
+
139
+ # @return [Integer] Returns the count of sessions currently in the pool,
140
+ # not counting those currently in use.
141
+ def size
142
+ @pool_mutex.synchronize do
143
+ size = 0
144
+ @pool.each_pair do |endpoint,sessions|
145
+ size += sessions.size
146
+ end
147
+ size
148
+ end
149
+ end
150
+
151
+ # Removes stale http sessions from the pool (that have exceeded
152
+ # the idle timeout).
153
+ # @return [nil]
154
+ def clean!
155
+ @pool_mutex.synchronize { _clean }
156
+ nil
157
+ end
158
+
159
+ # Closes and removes removes all sessions from the pool.
160
+ # If empty! is called while there are outstanding requests they may
161
+ # get checked back into the pool, leaving the pool in a non-empty state.
162
+ # @return [nil]
163
+ def empty!
164
+ @pool_mutex.synchronize do
165
+ @pool.each_pair do |endpoint,sessions|
166
+ sessions.each(&:finish)
167
+ end
168
+ @pool.clear
169
+ end
170
+ nil
171
+ end
172
+
173
+ class << self
174
+
175
+ # Returns a connection pool constructed from the given options.
176
+ # Calling this method twice with the same options will return
177
+ # the same pool.
178
+ #
179
+ # @option options [URI::HTTP,String] :proxy_uri A proxy to send
180
+ # requests through. Formatted like 'http://proxy.com:123'.
181
+ #
182
+ # @option options [Float] :http_continue_timeout (nil) The number of
183
+ # seconds to wait for a 100-continue response before sending the
184
+ # request body. This option has no effect unless the request has
185
+ # "Expect" header set to "100-continue". Defaults to `nil` which
186
+ # disables this behaviour. This value can safely be set per-request
187
+ # on the session yeidled by {#session_for}.
188
+ #
189
+ # @option options [Float] :http_idle_timeout (15) The number of
190
+ # seconds a connection is allowed to sit idble before it is
191
+ # considered stale. Stale connections are closed and removed
192
+ # from the pool before making a request.
193
+ #
194
+ # @option options [Float] :http_open_timeout (15) The number of
195
+ # seconds to wait when opening a HTTP session before rasing a
196
+ # `Timeout::Error`.
197
+ #
198
+ # @option options [Integer] :http_read_timeout (60) The default
199
+ # number of seconds to wait for response data. This value can
200
+ # safely be set
201
+ # per-request on the session yeidled by {#session_for}.
202
+ #
203
+ # @option options [Boolean] :http_wire_trace (false) When `true`, HTTP
204
+ # debug output will be sent to the `:logger`.
205
+ #
206
+ # @option options [Logger] :logger Where debug output is sent.
207
+ # Defaults to `nil` when `:http_wire_trace` is `false`.
208
+ # Defaults to `Logger.new($stdout)` when `:http_wire_trace` is
209
+ # `true`.
210
+ #
211
+ # @option options [Boolean] :ssl_verify_peer (true) When `true`, SSL
212
+ # peer certificates are verified when establishing a connection.
213
+ #
214
+ # @option options [String] :ssl_ca_file Full path to the SSL
215
+ # certificate authority bundle file that should be used when
216
+ # verifying peer certificates. If you do not pass
217
+ # `:ssl_ca_file` or `:ssl_ca_path` the the system default will be
218
+ # used if available.
219
+ #
220
+ # @option options [String] :ssl_ca_path Full path of the directory
221
+ # that contains the unbundled SSL certificate authority files#
222
+ # for verifying peer certificates. If you do not pass
223
+ # `:ssl_ca_file` or `:ssl_ca_path` the the system default will
224
+ # be used if available.
225
+ #
226
+ # @return [ConnectionPool]
227
+ def new options = {}
228
+ options = pool_options(options)
229
+ @pools_mutex.synchronize do
230
+ @pools[options] ||= super(options)
231
+ end
232
+ end
233
+
234
+ # @return [Array<ConnectionPool>] Returns a list of of the constructed
235
+ # connection pools.
236
+ def pools
237
+ @pools.values
238
+ end
239
+
240
+ private
241
+
242
+ # Filters an option hash, merging in default values.
243
+ # @return [Hash]
244
+ def pool_options options
245
+ wire_trace = !!options[:http_wire_trace]
246
+ logger = options[:logger] || Logger.new($stdout) if wire_trace
247
+ verify_peer = options.key?(:ssl_verify_peer) ?
248
+ !!options[:ssl_verify_peer] : true
249
+ {
250
+ :proxy_uri => URI.parse(options[:proxy_uri].to_s),
251
+ :http_continue_timeout => options[:http_continue_timeout],
252
+ :http_open_timeout => options[:http_open_timeout] || 15,
253
+ :http_idle_timeout => options[:http_idle_timeout] || 15,
254
+ :http_read_timeout => options[:http_read_timeout] || 60,
255
+ :http_wire_trace => wire_trace,
256
+ :logger => logger,
257
+ :ssl_verify_peer => verify_peer,
258
+ :ssl_ca_file => options[:ssl_ca_file],
259
+ :ssl_ca_path => options[:ssl_ca_path],
260
+ }
261
+ end
262
+
263
+ end
264
+
265
+ private
266
+
267
+ # Starts and returns a new HTTP(S) session.
268
+ # @param [String] endpoint
269
+ # @return [Net::HTTPSession]
270
+ def start_session endpoint
271
+
272
+ endpoint = URI.parse(endpoint)
273
+
274
+ args = []
275
+ args << endpoint.host
276
+ args << endpoint.port
277
+ args << proxy_uri.host
278
+ args << proxy_uri.port
279
+ args << proxy_uri.user
280
+ args << proxy_uri.password
281
+
282
+ http = Net::HTTP.new(*args.compact)
283
+ http.extend(SessionExtensions)
284
+ http.set_debug_output(logger) if http_wire_trace?
285
+ http.open_timeout = http_open_timeout
286
+
287
+ if endpoint.scheme == 'https'
288
+ http.use_ssl = true
289
+ if ssl_verify_peer?
290
+ http.verify_mode = OpenSSL::SSL::VERIFY_PEER
291
+ http.ca_file = ssl_ca_file if ssl_ca_file
292
+ http.ca_path = ssl_ca_path if ssl_ca_path
293
+ else
294
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
295
+ end
296
+ else
297
+ http.use_ssl = false
298
+ end
299
+
300
+ http.start
301
+ http
302
+ end
303
+
304
+ # Removes stale sessions from the pool. This method *must* be called
305
+ # @note **Must** be called behind a `@pool_mutex` synchronize block.
306
+ def _clean
307
+ now = Time.now
308
+ @pool.each_pair do |endpoint,sessions|
309
+ sessions.delete_if do |session|
310
+ if
311
+ session.last_used.nil? or
312
+ now - session.last_used > http_idle_timeout
313
+ then
314
+ session.finish
315
+ true
316
+ end
317
+ end
318
+ end
319
+ end
320
+
321
+ # Helper methods extended onto Net::HTTPSession objects opend by the
322
+ # connection pool.
323
+ # @private
324
+ module SessionExtensions
325
+
326
+ # Sends the request and tracks that this session has been used.
327
+ def request *args, &block
328
+ @last_used = Time.now
329
+ super(*args, &block)
330
+ end
331
+
332
+ # @return [Time,nil]
333
+ def last_used
334
+ @last_used
335
+ end
336
+
337
+ # Attempts to close/finish the session without raising an error.
338
+ def finish
339
+ super
340
+ rescue IOError
341
+ nil
342
+ end
343
+
344
+ end
345
+ end
346
+ end
347
+ end
348
+ end
@@ -11,13 +11,11 @@
11
11
  # ANY KIND, either express or implied. See the License for the specific
12
12
  # language governing permissions and limitations under the License.
13
13
 
14
- require 'net/http/connection_pool'
15
-
16
14
  module AWS
17
15
  module Core
18
16
  module Http
19
17
 
20
- # = NetHttpHandler
18
+ # # NetHttpHandler
21
19
  #
22
20
  # This is the default HTTP handler for the aws-sdk gem. It uses
23
21
  # Ruby's Net::HTTP to make requests. It uses persistent connections
@@ -34,12 +32,12 @@ module AWS
34
32
  SystemStackError, RegexpError, IndexError,
35
33
  ]
36
34
 
37
- # (see Net::HTTP::ConnectionPool.new)
35
+ # (see ConnectionPool.new)
38
36
  def initialize options = {}
39
- @pool = Net::HTTP::ConnectionPool.new(options)
37
+ @pool = ConnectionPool.new(options)
40
38
  end
41
39
 
42
- # @return [Net::HTTP::ConnectionPool]
40
+ # @return [ConnectionPool]
43
41
  attr_reader :pool
44
42
 
45
43
  # Given a populated request object and an empty response object,
@@ -49,28 +47,23 @@ module AWS
49
47
  # @param [Response] response
50
48
  # @return [nil]
51
49
  def handle request, response, &read_block
52
-
53
- options = {}
54
- options[:port] = request.port
55
- options[:ssl] = request.use_ssl?
56
- options[:proxy_uri] = request.proxy_uri
57
- options[:ssl_verify_peer] = request.ssl_verify_peer?
58
- options[:ssl_ca_file] = request.ssl_ca_file if request.ssl_ca_file
59
- options[:ssl_ca_path] = request.ssl_ca_path if request.ssl_ca_path
60
-
61
50
  begin
62
51
 
63
- connection = pool.connection_for(request.host, options)
64
- connection.read_timeout = request.read_timeout
52
+ @pool.session_for(request.endpoint) do |http|
53
+
54
+ http.read_timeout = request.read_timeout
55
+ http.continue_timeout = request.continue_timeout
65
56
 
66
- connection.request(build_net_http_request(request)) do |http_resp|
67
- response.status = http_resp.code.to_i
68
- response.headers = http_resp.to_hash
69
- if block_given? and response.status < 300
70
- http_resp.read_body(&read_block)
71
- else
72
- response.body = http_resp.read_body
57
+ http.request(build_net_http_request(request)) do |net_http_resp|
58
+ response.status = net_http_resp.code.to_i
59
+ response.headers = net_http_resp.to_hash
60
+ if block_given? and response.status < 300
61
+ net_http_resp.read_body(&read_block)
62
+ else
63
+ response.body = net_http_resp.read_body
64
+ end
73
65
  end
66
+
74
67
  end
75
68
 
76
69
  # The first rescue clause is required because Timeout::Error is
@@ -83,9 +76,7 @@ module AWS
83
76
  rescue Exception => error
84
77
  response.network_error = error
85
78
  end
86
-
87
79
  nil
88
-
89
80
  end
90
81
 
91
82
  protected