aws_sdk 3.1.5

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 (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,47 @@
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
+ # @private
18
+ module PrefixAndDelimiterCollection
19
+
20
+ include PrefixedCollection
21
+
22
+ # @see Bucket#as_tree
23
+ def as_tree options = {}
24
+ Tree.new(self, { :prefix => prefix }.merge(options))
25
+ end
26
+
27
+ # @private
28
+ protected
29
+ def each_member_in_page(page, &block)
30
+ super
31
+ page.common_prefixes.each do |p|
32
+ yield(with_prefix(p[:prefix]))
33
+ end
34
+ end
35
+
36
+ # @private
37
+ protected
38
+ def list_options(options)
39
+ opts = super
40
+ opts[:delimiter] = options[:delimiter] if options.key?(:delimiter)
41
+ opts
42
+ end
43
+
44
+ end
45
+
46
+ end
47
+ 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
+ module PrefixedCollection
18
+
19
+ include PaginatedCollection
20
+
21
+ # @private
22
+ def initialize *args
23
+ options = args.last.is_a?(Hash) ? args.pop : {}
24
+ @prefix = options[:prefix]
25
+ args.push(options)
26
+ super(*args)
27
+ end
28
+
29
+ # @return [String,nil] The prefix of this collection.
30
+ attr_reader :prefix
31
+
32
+ # Returns a new collection with a different prefix
33
+ #
34
+ # @example
35
+ # objects = collection.with_prefix('photos')
36
+ # objects.prefix #=> 'photos'
37
+ #
38
+ # @example Chaining with_prefix replaces previous prefix
39
+ # objects = collection.with_prefix('photos').with_prefix('videos')
40
+ # objects.prefix #=> 'videos'
41
+ #
42
+ # @example Chaining with_prefix with :append
43
+ # objects = collection.with_prefix('a/').with_prefix('b/', :append)
44
+ # objects.prefix #=> 'a/b/'
45
+ #
46
+ # @example Chaining with_prefix with :prepend
47
+ # objects = collection.with_prefix('a/').with_prefix('b/', :prepend)
48
+ # objects.prefix #=> 'b/a/'
49
+ #
50
+ # @param [String] prefix The prefix condition that limits what objects
51
+ # are returned by this collection.
52
+ # @param [Symbol] mode (:replace) If you chain calls to #with_prefix
53
+ # the +mode+ affects if the prefix prepends, appends, or replaces.
54
+ # Valid modes are:
55
+ # * +:replace+
56
+ # * +:append+
57
+ # * +:prepend+
58
+ # @return [Collection] Returns a new collection with a modified prefix.
59
+ def with_prefix prefix, mode = :replace
60
+ new_prefix = case mode
61
+ when :replace then prefix
62
+ when :append then "#{@prefix}#{prefix}"
63
+ when :prepend then "#{prefix}#{@prefix}"
64
+ else
65
+ raise ArgumentError, "invalid prefix mode `#{mode}`, it must be " +
66
+ ":replace, :append or :prepend"
67
+ end
68
+ self.class.new(bucket, :prefix => new_prefix)
69
+ end
70
+
71
+ # @private
72
+ protected
73
+ def list_options(options)
74
+ opts = super
75
+ opts[:prefix] = prefix if prefix
76
+ opts
77
+ end
78
+
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,553 @@
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 'uri'
15
+ require 'base64'
16
+ require 'time'
17
+
18
+ module AWS
19
+ class S3
20
+
21
+ # Helper to generate form fields for presigned POST requests to
22
+ # a bucket. You can use this to create a form that can be used
23
+ # from a web browser to upload objects to S3 while specifying
24
+ # conditions on what can be uploaded and how it is processed and
25
+ # stored.
26
+ #
27
+ # @example Form fields for uploading by file name
28
+ #
29
+ # form = bucket.presigned_post(:key => "photos/${filename}")
30
+ # form.url.to_s # => "https://mybucket.s3.amazonaws.com/"
31
+ # form.fields # => { "AWSAccessKeyId" => "...", ... }
32
+ #
33
+ # @example Generating a minimal HTML form
34
+ #
35
+ # form = bucket.objects.myobj.presigned_post
36
+ # hidden_inputs = form.fields.map do |(name, value)|
37
+ # %(<input type="hidden" name="#{name}" value="#{value}" />)
38
+ # end
39
+ # <<-END
40
+ # <form action="#{form.url}" method="post" enctype="multipart/form-data">
41
+ # #{hidden_inputs}
42
+ # <input type="file" name="file" />
43
+ # </form>
44
+ # END
45
+ #
46
+ # @example Restricting the size of the uploaded object
47
+ # bucket.presigned_post(:content_length => 1..(10*1024))
48
+ #
49
+ # @example Restricting the key prefix
50
+ # bucket.presigned_post.where(:key).starts_with("photos/")
51
+ #
52
+ class PresignedPost
53
+
54
+ include Core::Model
55
+
56
+ # @return [Bucket] The bucket to which data can be uploaded
57
+ # using the form fields
58
+ attr_reader :bucket
59
+
60
+ # @return [String] The key of the object that will be
61
+ # uploaded. If this is nil, then the object can be uploaded
62
+ # with any key that satisfies the conditions specified for
63
+ # the upload (see {#where}).
64
+ attr_reader :key
65
+
66
+ # @return [Hash] A hash of the metadata fields included in the
67
+ # signed fields. Additional metadata fields may be provided
68
+ # with the upload as long as they satisfy the conditions
69
+ # specified for the upload (see {#where}).
70
+ attr_reader :metadata
71
+
72
+ # @return [Range] The range of acceptable object sizes for the
73
+ # upload. By default any size object may be uploaded.
74
+ attr_reader :content_length
75
+
76
+ # @private
77
+ SPECIAL_FIELDS = [:cache_control,
78
+ :content_type,
79
+ :content_disposition,
80
+ :content_encoding,
81
+ :expires_header,
82
+ :acl,
83
+ :server_side_encryption,
84
+ :success_action_redirect,
85
+ :success_action_status]
86
+
87
+ # @private
88
+ attr_reader :conditions
89
+
90
+ # @return [Array<String>] Additional fields which may be sent
91
+ # with the upload. These will be included in the policy so
92
+ # that they can be sent with any value. S3 will ignore
93
+ # them.
94
+ attr_reader :ignored_fields
95
+
96
+ # @return The expiration time for the signature. By default
97
+ # the signature will expire an hour after it is generated.
98
+ attr_reader :expires
99
+
100
+ # Creates a new presigned post object.
101
+ #
102
+ # @param [Bucket] bucket The bucket to which data can be uploaded
103
+ # using the form fields.
104
+ #
105
+ # @param [Hash] opts Additional options for the upload. Aside
106
+ # from +:secure+, +:expires+, +:content_length+ and +:ignore+
107
+ # the values provided here will be stored in the hash returned
108
+ # from the {#fields} method, and the policy in that hash will
109
+ # restrict their values to the values provided. If you
110
+ # instead want to only restrict the values and not provide
111
+ # them -- for example, if your application generates separate
112
+ # form fields for those values -- you should use the {#where}
113
+ # method on the returned object instead of providing the
114
+ # values here.
115
+ #
116
+ # @option opts [String] :key The key of the object that will
117
+ # be uploaded. If this is nil, then the object can be
118
+ # uploaded with any key that satisfies the conditions
119
+ # specified for the upload (see {#where}).
120
+ #
121
+ # @option opts [Boolean] :secure By setting this to false, you
122
+ # can cause {#url} to return an HTTP URL. By default it
123
+ # returns an HTTPS URL.
124
+ #
125
+ # @option opts [Time, DateTime, Integer, String] :expires The
126
+ # time at which the signature will expire. By default the
127
+ # signature will expire one hour after it is generated
128
+ # (e.g. when {#fields} is called).
129
+ #
130
+ # When the value is a Time or DateTime, the signature
131
+ # expires at the specified time. When it is an integer, the
132
+ # signature expires the specified number of seconds after it
133
+ # is generated. When it is a string, the string is parsed
134
+ # as a time (using Time.parse) and the signature expires at
135
+ # that time.
136
+ #
137
+ # @option opts [String] :cache_control Sets the Cache-Control
138
+ # header stored with the object.
139
+ #
140
+ # @option opts [String] :content_type Sets the Content-Type
141
+ # header stored with the object.
142
+ #
143
+ # @option opts [String] :content_disposition Sets the
144
+ # Content-Disposition header stored with the object.
145
+ #
146
+ # @option opts [String] :expires_header Sets the Expires
147
+ # header stored with the object.
148
+ #
149
+ # @option options [Symbol] :acl A canned access control
150
+ # policy. Valid values are:
151
+ # * +:private+
152
+ # * +:public_read+
153
+ # * +:public_read_write+
154
+ # * +:authenticated_read+
155
+ # * +:bucket_owner_read+
156
+ # * +:bucket_owner_full_control+
157
+ #
158
+ # @option options [Symbol] :server_side_encryption (nil) If this
159
+ # option is set, the object will be stored using server side
160
+ # encryption. The only valid value is +:aes256+, which
161
+ # specifies that the object should be stored using the AES
162
+ # encryption algorithm with 256 bit keys. By default, this
163
+ # option uses the value of the +:s3_server_side_encryption+
164
+ # option in the current configuration; for more information,
165
+ # see {AWS.config}.
166
+ #
167
+ # @option opts [String] :success_action_redirect The URL to
168
+ # which the client is redirected upon successful upload.
169
+ #
170
+ # @option opts [Integer] :success_action_status The status
171
+ # code returned to the client upon successful upload if
172
+ # +:success_action_redirect+ is not specified. Accepts the
173
+ # values 200, 201, or 204 (default).
174
+ #
175
+ # If the value is set to 200 or 204, Amazon S3 returns an
176
+ # empty document with a 200 or 204 status code.
177
+ #
178
+ # If the value is set to 201, Amazon S3 returns an XML
179
+ # document with a 201 status code. For information on the
180
+ # content of the XML document, see
181
+ # {POST Object}[http://docs.amazonwebservices.com/AmazonS3/2006-03-01/API/index.html?RESTObjectPOST.html].
182
+ #
183
+ # @option opts [Hash] :metadata A hash of the metadata fields
184
+ # included in the signed fields. Additional metadata fields
185
+ # may be provided with the upload as long as they satisfy
186
+ # the conditions specified for the upload (see {#where}).
187
+ #
188
+ # @option opts [Integer, Range] :content_length The range of
189
+ # acceptable object sizes for the upload. By default any
190
+ # size object may be uploaded.
191
+ #
192
+ # @option opts [Array<String>] :ignore Additional fields which
193
+ # may be sent with the upload. These will be included in
194
+ # the policy so that they can be sent with any value. S3
195
+ # will ignore them.
196
+ def initialize(bucket, opts = {})
197
+ @bucket = bucket
198
+ @key = opts[:key]
199
+ @secure = (opts[:secure] != false)
200
+ @fields = {}
201
+ SPECIAL_FIELDS.each do |name|
202
+ @fields[name] = opts[name] if opts.key?(name)
203
+ end
204
+ @metadata = opts[:metadata] || {}
205
+ @content_length = range_value(opts[:content_length])
206
+ @conditions = opts[:conditions] || {}
207
+ @ignored_fields = [opts[:ignore]].flatten.compact
208
+ @expires = opts[:expires]
209
+
210
+ super
211
+
212
+ @fields[:server_side_encryption] =
213
+ config.s3_server_side_encryption unless
214
+ @fields.key?(:server_side_encryption)
215
+ @fields.delete(:server_side_encryption) if
216
+ @fields[:server_side_encryption].nil?
217
+ end
218
+
219
+ # @return [Boolean] True if {#url} generates an HTTPS url.
220
+ def secure?
221
+ @secure
222
+ end
223
+
224
+ # @return [URI::HTTP, URI::HTTPS] The URL to which the form
225
+ # fields should be POSTed. If you are using the fields in
226
+ # an HTML form, this is the URL to put in the +action+
227
+ # attribute of the form tag.
228
+ def url
229
+ req = Request.new
230
+ req.bucket = bucket.name
231
+ req.host = config.s3_endpoint
232
+ build_uri(req)
233
+ end
234
+
235
+ # Lets you specify conditions on a field. See
236
+ # {PresignedPost#where} for usage examples.
237
+ class ConditionBuilder
238
+
239
+ # @private
240
+ def initialize(post, field)
241
+ @post = post
242
+ @field = field
243
+ end
244
+
245
+ # Specifies that the value of the field must equal the
246
+ # provided value.
247
+ def is(value)
248
+ if @field == :content_length
249
+ self.in(value)
250
+ else
251
+ @post.with_equality_condition(@field, value)
252
+ end
253
+ end
254
+
255
+ # Specifies that the value of the field must begin with the
256
+ # provided value. If you are specifying a condition on the
257
+ # "key" field, note that this check takes place after the
258
+ # +${filename}+ variable is expanded. This is only valid
259
+ # for the following fields:
260
+ #
261
+ # * +:key+
262
+ # * +:cache_control+
263
+ # * +:content_type+
264
+ # * +:content_disposition+
265
+ # * +:content_encoding+
266
+ # * +:expires_header+
267
+ # * +:acl+
268
+ # * +:success_action_redirect+
269
+ # * metadata fields (see {#where_metadata})
270
+ def starts_with(prefix)
271
+ @post.with_prefix_condition(@field, prefix)
272
+ end
273
+
274
+ # Specifies that the value of the field must be in the given
275
+ # range. This may only be used to constrain the
276
+ # +:content_length+ field,
277
+ # e.g. <tt>presigned_post.with(:conent_length).in(1..4)</tt>.
278
+ def in(range)
279
+ @post.refine(:content_length => range)
280
+ end
281
+
282
+ end
283
+
284
+ # Adds a condition to the policy for the POST. Use
285
+ # {#where_metadata} to add metadata conditions.
286
+ #
287
+ # @example Restricting the ACL to "bucket-owner" ACLs
288
+ # presigned_post.where(:acl).starts_with("bucket-owner")
289
+ #
290
+ # @param [Symbol] field The field for which a condition should
291
+ # be added. Valid values:
292
+ #
293
+ # * +:key+
294
+ # * +:content_length+
295
+ # * +:cache_control+
296
+ # * +:content_type+
297
+ # * +:content_disposition+
298
+ # * +:content_encoding+
299
+ # * +:expires_header+
300
+ # * +:acl+
301
+ # * +:success_action_redirect+
302
+ # * +:success_action_status+
303
+ #
304
+ # @return [ConditionBuilder] An object that allows you to
305
+ # specify a condition on the field.
306
+ def where(field)
307
+ raise ArgumentError.new("unrecognized field name #{field}") unless
308
+ [:key, :content_length, *SPECIAL_FIELDS].include?(field) or
309
+ field =~ /^x-amz-meta-/
310
+ ConditionBuilder.new(self, field)
311
+ end
312
+
313
+ # Adds a condition to the policy for the POST to constrain the
314
+ # values of metadata fields uploaded with the object. If a
315
+ # metadata field does not have a condition associated with it
316
+ # and is not specified in the constructor (see {#metadata})
317
+ # then S3 will reject it.
318
+ #
319
+ # @param [Symbol, String] field The name of the metadata
320
+ # attribute. For example, +:color+ corresponds to the
321
+ # "x-amz-meta-color" field in the POST body.
322
+ #
323
+ # @return [ConditionBuilder] An object that allows you to
324
+ # specify a condition on the metadata attribute.
325
+ def where_metadata(field)
326
+ where("x-amz-meta-#{field}")
327
+ end
328
+
329
+ # @return [String] The Base64-encoded JSON policy document.
330
+ def policy
331
+ json = {
332
+ "expiration" => format_expiration,
333
+ "conditions" => generate_conditions
334
+ }.to_json
335
+ Base64.encode64(json).tr("\n","")
336
+ end
337
+
338
+ # @return [Hash] A collection of form fields (including a
339
+ # signature and a policy) that can be used to POST data to
340
+ # S3. Additional form fields may be added after the fact as
341
+ # long as they are described by a policy condition (see
342
+ # {#where}).
343
+ def fields
344
+
345
+ signature = config.signer.sign(policy, "sha1")
346
+
347
+ fields = {
348
+ "AWSAccessKeyId" => config.signer.access_key_id,
349
+ "key" => key,
350
+ "policy" => policy,
351
+ "signature" => signature
352
+ }.merge(optional_fields)
353
+
354
+ fields["x-amz-security-token"] = config.signer.session_token if
355
+ config.signer.session_token
356
+
357
+ fields.merge(optional_fields)
358
+
359
+ end
360
+
361
+ # @private
362
+ def with_equality_condition(option_name, value)
363
+ field_name = field_name(option_name)
364
+ with_condition(option_name, Hash[[[field_name, value]]])
365
+ end
366
+
367
+ # @private
368
+ def with_prefix_condition(option_name, prefix)
369
+ field_name = field_name(option_name)
370
+ with_condition(option_name,
371
+ ["starts-with", "$#{field_name}", prefix])
372
+ end
373
+
374
+ # @private
375
+ def refine(opts)
376
+ self.class.new(bucket, {
377
+ :conditions => conditions,
378
+ :key => key,
379
+ :metadata => metadata,
380
+ :secure => secure?,
381
+ :content_length => content_length,
382
+ :expires => expires,
383
+ :ignore => ignored_fields
384
+ }.merge(@fields).
385
+ merge(opts))
386
+ end
387
+
388
+ # @private
389
+ private
390
+ def with_condition(field, condition)
391
+ conditions = self.conditions.dup
392
+ (conditions[field] ||= []) << condition
393
+ refine(:conditions => conditions)
394
+ end
395
+
396
+ # @private
397
+ private
398
+ def format_expiration
399
+ time = expires || Time.now.utc + 60*60
400
+ time =
401
+ case time
402
+ when Time
403
+ time
404
+ when DateTime
405
+ Time.parse(time.to_s)
406
+ when Integer
407
+ (Time.now + time)
408
+ when String
409
+ Time.parse(time)
410
+ end
411
+ time.utc.iso8601
412
+ end
413
+
414
+ # @private
415
+ private
416
+ def range_value(range)
417
+ case range
418
+ when Integer
419
+ range..range
420
+ when Range
421
+ range
422
+ end
423
+ end
424
+
425
+ # @private
426
+ private
427
+ def split_range(range)
428
+ range = range_value(range)
429
+ [range.begin,
430
+ (range.exclude_end? ?
431
+ range.end-1 :
432
+ range.end)]
433
+ end
434
+
435
+ # @private
436
+ private
437
+ def optional_fields
438
+ fields = (SPECIAL_FIELDS &
439
+ @fields.keys).inject({}) do |fields, option_name|
440
+ fields[field_name(option_name)] =
441
+ field_value(option_name)
442
+ fields
443
+ end
444
+
445
+ @metadata.each do |key, value|
446
+ fields["x-amz-meta-#{key}"] = value.to_s
447
+ end
448
+
449
+ fields
450
+ end
451
+
452
+ # @private
453
+ private
454
+ def field_name(option_name)
455
+ case option_name
456
+ when :expires_header
457
+ "Expires"
458
+ when :server_side_encryption
459
+ "x-amz-server-side-encryption"
460
+ when :acl, :success_action_redirect, :success_action_status
461
+ option_name.to_s
462
+ else
463
+ # e.g. Cache-Control from cache_control
464
+ field_name = option_name.to_s.tr("_", "-").
465
+ gsub(/-(.)/) { |m| m.upcase }
466
+ field_name[0,1] = field_name[0,1].upcase
467
+ field_name
468
+ end
469
+ end
470
+
471
+ # @private
472
+ private
473
+ def field_value(option_name)
474
+ case option_name
475
+ when :acl
476
+ @fields[:acl].to_s.tr("_", "-")
477
+ when :server_side_encryption
478
+ value = @fields[:server_side_encryption]
479
+ if value.kind_of?(Symbol)
480
+ value.to_s.upcase
481
+ else
482
+ value.to_s
483
+ end
484
+ else
485
+ @fields[option_name].to_s
486
+ end
487
+ end
488
+
489
+ # @private
490
+ private
491
+ def generate_conditions
492
+
493
+ conditions = self.conditions.inject([]) do |list, (field, field_conds)|
494
+ list + field_conds
495
+ end
496
+
497
+ conditions << { "bucket" => bucket.name }
498
+ conditions += key_conditions
499
+ conditions += optional_fields.map { |(n, v)| Hash[[[n, v]]] }
500
+ conditions += range_conditions
501
+ conditions += ignored_conditions
502
+
503
+ if config.signer.session_token
504
+ conditions << {"x-amz-security-token" => config.signer.session_token}
505
+ end
506
+
507
+ conditions
508
+
509
+ end
510
+
511
+ # @private
512
+ private
513
+ def ignored_conditions
514
+ ignored_fields.map do |field|
515
+ ["starts-with", "$#{field}", ""]
516
+ end
517
+ end
518
+
519
+ # @private
520
+ private
521
+ def range_conditions
522
+ if content_length
523
+ [["content-length-range", *split_range(content_length)]]
524
+ else
525
+ []
526
+ end
527
+ end
528
+
529
+ # @private
530
+ private
531
+ def key_conditions
532
+ [if key && key.include?("${filename}")
533
+ ["starts-with", "$key", key[/^(.*)\$\{filename\}/, 1]]
534
+ elsif key
535
+ { "key" => key }
536
+ else
537
+ ["starts-with", "$key", ""]
538
+ end]
539
+ end
540
+
541
+ # @private
542
+ private
543
+ def build_uri(request)
544
+ uri_class = secure? ? URI::HTTPS : URI::HTTP
545
+ uri_class.build(:host => request.host,
546
+ :path => request.path,
547
+ :query => request.querystring)
548
+ end
549
+
550
+ end
551
+
552
+ end
553
+ end