aws-sdk-euca 1.8.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 (539) hide show
  1. data/.yardopts +5 -0
  2. data/LICENSE.txt +12 -0
  3. data/README.rdoc +189 -0
  4. data/ca-bundle.crt +3895 -0
  5. data/lib/aws-sdk-euca.rb +79 -0
  6. data/lib/aws-sdk.rb +79 -0
  7. data/lib/aws.rb +14 -0
  8. data/lib/aws/api_config/AutoScaling-2011-01-01.yml +825 -0
  9. data/lib/aws/api_config/CloudFormation-2010-05-15.yml +322 -0
  10. data/lib/aws/api_config/CloudFront-2012-05-05.yml +2102 -0
  11. data/lib/aws/api_config/CloudSearch-2011-02-01.yml +681 -0
  12. data/lib/aws/api_config/CloudWatch-2010-08-01.yml +433 -0
  13. data/lib/aws/api_config/DataPipeline-2012-10-29.yml +422 -0
  14. data/lib/aws/api_config/DynamoDB-2011-12-05.yml +1160 -0
  15. data/lib/aws/api_config/EC2-2013-02-01.yml +4368 -0
  16. data/lib/aws/api_config/ELB-2012-06-01.yml +597 -0
  17. data/lib/aws/api_config/EMR-2009-03-31.yml +370 -0
  18. data/lib/aws/api_config/ElastiCache-2012-03-09.yml +777 -0
  19. data/lib/aws/api_config/ElastiCache-2012-11-15.yml +979 -0
  20. data/lib/aws/api_config/ElasticBeanstalk-2010-12-01.yml +823 -0
  21. data/lib/aws/api_config/ElasticTranscoder-2012-09-25.yml +1036 -0
  22. data/lib/aws/api_config/Glacier-2012-06-01.yml +618 -0
  23. data/lib/aws/api_config/IAM-2010-05-08.yml +1222 -0
  24. data/lib/aws/api_config/ImportExport-2010-06-01.yml +109 -0
  25. data/lib/aws/api_config/OpsWorks-2013-02-18.yml +1463 -0
  26. data/lib/aws/api_config/RDS-2012-09-17.yml +1861 -0
  27. data/lib/aws/api_config/RDS-2013-02-12.yml +2377 -0
  28. data/lib/aws/api_config/Redshift-2012-12-01.yml +1149 -0
  29. data/lib/aws/api_config/Route53-2012-02-29.yml +380 -0
  30. data/lib/aws/api_config/Route53-2012-12-12.yml +547 -0
  31. data/lib/aws/api_config/SNS-2010-03-31.yml +249 -0
  32. data/lib/aws/api_config/SQS-2012-11-05.yml +317 -0
  33. data/lib/aws/api_config/STS-2011-06-15.yml +81 -0
  34. data/lib/aws/api_config/SimpleDB-2009-04-15.yml +306 -0
  35. data/lib/aws/api_config/SimpleEmailService-2010-12-01.yml +346 -0
  36. data/lib/aws/api_config/SimpleWorkflow-2012-01-25.yml +2358 -0
  37. data/lib/aws/api_config/StorageGateway-2012-06-30.yml +748 -0
  38. data/lib/aws/auto_scaling.rb +164 -0
  39. data/lib/aws/auto_scaling/activity.rb +102 -0
  40. data/lib/aws/auto_scaling/activity_collection.rb +82 -0
  41. data/lib/aws/auto_scaling/client.rb +521 -0
  42. data/lib/aws/auto_scaling/config.rb +18 -0
  43. data/lib/aws/auto_scaling/errors.rb +22 -0
  44. data/lib/aws/auto_scaling/group.rb +420 -0
  45. data/lib/aws/auto_scaling/group_collection.rb +96 -0
  46. data/lib/aws/auto_scaling/group_options.rb +146 -0
  47. data/lib/aws/auto_scaling/instance.rb +192 -0
  48. data/lib/aws/auto_scaling/instance_collection.rb +63 -0
  49. data/lib/aws/auto_scaling/launch_configuration.rb +158 -0
  50. data/lib/aws/auto_scaling/launch_configuration_collection.rb +154 -0
  51. data/lib/aws/auto_scaling/notification_configuration.rb +89 -0
  52. data/lib/aws/auto_scaling/notification_configuration_collection.rb +184 -0
  53. data/lib/aws/auto_scaling/request.rb +29 -0
  54. data/lib/aws/auto_scaling/scaling_policy.rb +142 -0
  55. data/lib/aws/auto_scaling/scaling_policy_collection.rb +72 -0
  56. data/lib/aws/auto_scaling/scaling_policy_options.rb +64 -0
  57. data/lib/aws/auto_scaling/scheduled_action.rb +145 -0
  58. data/lib/aws/auto_scaling/scheduled_action_collection.rb +195 -0
  59. data/lib/aws/auto_scaling/tag.rb +59 -0
  60. data/lib/aws/auto_scaling/tag_collection.rb +112 -0
  61. data/lib/aws/cloud_formation.rb +272 -0
  62. data/lib/aws/cloud_formation/client.rb +369 -0
  63. data/lib/aws/cloud_formation/config.rb +18 -0
  64. data/lib/aws/cloud_formation/errors.rb +22 -0
  65. data/lib/aws/cloud_formation/request.rb +29 -0
  66. data/lib/aws/cloud_formation/stack.rb +255 -0
  67. data/lib/aws/cloud_formation/stack_collection.rb +209 -0
  68. data/lib/aws/cloud_formation/stack_event.rb +75 -0
  69. data/lib/aws/cloud_formation/stack_event_collection.rb +47 -0
  70. data/lib/aws/cloud_formation/stack_options.rb +72 -0
  71. data/lib/aws/cloud_formation/stack_output.rb +53 -0
  72. data/lib/aws/cloud_formation/stack_resource.rb +117 -0
  73. data/lib/aws/cloud_formation/stack_resource_collection.rb +84 -0
  74. data/lib/aws/cloud_formation/stack_resource_summary_collection.rb +64 -0
  75. data/lib/aws/cloud_formation/stack_summary_collection.rb +123 -0
  76. data/lib/aws/cloud_front.rb +73 -0
  77. data/lib/aws/cloud_front/client.rb +1307 -0
  78. data/lib/aws/cloud_front/config.rb +18 -0
  79. data/lib/aws/cloud_front/errors.rb +22 -0
  80. data/lib/aws/cloud_front/request.rb +44 -0
  81. data/lib/aws/cloud_search.rb +74 -0
  82. data/lib/aws/cloud_search/client.rb +558 -0
  83. data/lib/aws/cloud_search/config.rb +18 -0
  84. data/lib/aws/cloud_search/errors.rb +22 -0
  85. data/lib/aws/cloud_search/request.rb +23 -0
  86. data/lib/aws/cloud_watch.rb +119 -0
  87. data/lib/aws/cloud_watch/alarm.rb +272 -0
  88. data/lib/aws/cloud_watch/alarm_collection.rb +153 -0
  89. data/lib/aws/cloud_watch/alarm_history_item.rb +50 -0
  90. data/lib/aws/cloud_watch/alarm_history_item_collection.rb +84 -0
  91. data/lib/aws/cloud_watch/client.rb +247 -0
  92. data/lib/aws/cloud_watch/config.rb +18 -0
  93. data/lib/aws/cloud_watch/errors.rb +22 -0
  94. data/lib/aws/cloud_watch/metric.rb +135 -0
  95. data/lib/aws/cloud_watch/metric_alarm_collection.rb +160 -0
  96. data/lib/aws/cloud_watch/metric_collection.rb +131 -0
  97. data/lib/aws/cloud_watch/metric_statistics.rb +69 -0
  98. data/lib/aws/cloud_watch/request.rb +23 -0
  99. data/lib/aws/core.rb +587 -0
  100. data/lib/aws/core/async_handle.rb +90 -0
  101. data/lib/aws/core/autoloader.rb +64 -0
  102. data/lib/aws/core/cacheable.rb +78 -0
  103. data/lib/aws/core/client.rb +691 -0
  104. data/lib/aws/core/collection.rb +267 -0
  105. data/lib/aws/core/collection/simple.rb +82 -0
  106. data/lib/aws/core/collection/with_limit_and_next_token.rb +71 -0
  107. data/lib/aws/core/collection/with_next_token.rb +97 -0
  108. data/lib/aws/core/configuration.rb +546 -0
  109. data/lib/aws/core/credential_providers.rb +461 -0
  110. data/lib/aws/core/data.rb +247 -0
  111. data/lib/aws/core/http/curb_handler.rb +155 -0
  112. data/lib/aws/core/http/handler.rb +89 -0
  113. data/lib/aws/core/http/net_http_handler.rb +128 -0
  114. data/lib/aws/core/http/request.rb +263 -0
  115. data/lib/aws/core/http/response.rb +81 -0
  116. data/lib/aws/core/indifferent_hash.rb +88 -0
  117. data/lib/aws/core/inflection.rb +56 -0
  118. data/lib/aws/core/json_client.rb +47 -0
  119. data/lib/aws/core/json_parser.rb +76 -0
  120. data/lib/aws/core/json_request_builder.rb +35 -0
  121. data/lib/aws/core/json_response_parser.rb +79 -0
  122. data/lib/aws/core/lazy_error_classes.rb +90 -0
  123. data/lib/aws/core/log_formatter.rb +462 -0
  124. data/lib/aws/core/managed_file.rb +32 -0
  125. data/lib/aws/core/meta_utils.rb +45 -0
  126. data/lib/aws/core/model.rb +57 -0
  127. data/lib/aws/core/naming.rb +30 -0
  128. data/lib/aws/core/option_grammar.rb +735 -0
  129. data/lib/aws/core/options/json_serializer.rb +82 -0
  130. data/lib/aws/core/options/validator.rb +155 -0
  131. data/lib/aws/core/options/xml_serializer.rb +118 -0
  132. data/lib/aws/core/page_result.rb +75 -0
  133. data/lib/aws/core/policy.rb +916 -0
  134. data/lib/aws/core/query_client.rb +41 -0
  135. data/lib/aws/core/query_error_parser.rb +24 -0
  136. data/lib/aws/core/query_request_builder.rb +47 -0
  137. data/lib/aws/core/query_response_parser.rb +35 -0
  138. data/lib/aws/core/resource.rb +413 -0
  139. data/lib/aws/core/resource_cache.rb +40 -0
  140. data/lib/aws/core/response.rb +208 -0
  141. data/lib/aws/core/response_cache.rb +50 -0
  142. data/lib/aws/core/rest_error_parser.rb +24 -0
  143. data/lib/aws/core/rest_json_client.rb +40 -0
  144. data/lib/aws/core/rest_request_builder.rb +146 -0
  145. data/lib/aws/core/rest_response_parser.rb +66 -0
  146. data/lib/aws/core/rest_xml_client.rb +47 -0
  147. data/lib/aws/core/service_interface.rb +61 -0
  148. data/lib/aws/core/signature/version_2.rb +56 -0
  149. data/lib/aws/core/signature/version_3.rb +77 -0
  150. data/lib/aws/core/signature/version_3_https.rb +54 -0
  151. data/lib/aws/core/signature/version_4.rb +135 -0
  152. data/lib/aws/core/signer.rb +46 -0
  153. data/lib/aws/core/uri_escape.rb +44 -0
  154. data/lib/aws/core/xml/frame.rb +244 -0
  155. data/lib/aws/core/xml/frame_stack.rb +85 -0
  156. data/lib/aws/core/xml/grammar.rb +307 -0
  157. data/lib/aws/core/xml/parser.rb +70 -0
  158. data/lib/aws/core/xml/root_frame.rb +65 -0
  159. data/lib/aws/core/xml/sax_handlers/libxml.rb +47 -0
  160. data/lib/aws/core/xml/sax_handlers/nokogiri.rb +55 -0
  161. data/lib/aws/core/xml/sax_handlers/ox.rb +41 -0
  162. data/lib/aws/core/xml/sax_handlers/rexml.rb +43 -0
  163. data/lib/aws/core/xml/stub.rb +123 -0
  164. data/lib/aws/data_pipeline.rb +73 -0
  165. data/lib/aws/data_pipeline/client.rb +339 -0
  166. data/lib/aws/data_pipeline/config.rb +18 -0
  167. data/lib/aws/data_pipeline/errors.rb +20 -0
  168. data/lib/aws/data_pipeline/request.rb +26 -0
  169. data/lib/aws/dynamo_db.rb +206 -0
  170. data/lib/aws/dynamo_db/attribute_collection.rb +461 -0
  171. data/lib/aws/dynamo_db/batch_get.rb +213 -0
  172. data/lib/aws/dynamo_db/batch_write.rb +252 -0
  173. data/lib/aws/dynamo_db/binary.rb +35 -0
  174. data/lib/aws/dynamo_db/client.rb +904 -0
  175. data/lib/aws/dynamo_db/config.rb +24 -0
  176. data/lib/aws/dynamo_db/errors.rb +20 -0
  177. data/lib/aws/dynamo_db/expectations.rb +40 -0
  178. data/lib/aws/dynamo_db/item.rb +133 -0
  179. data/lib/aws/dynamo_db/item_collection.rb +852 -0
  180. data/lib/aws/dynamo_db/item_data.rb +31 -0
  181. data/lib/aws/dynamo_db/keys.rb +41 -0
  182. data/lib/aws/dynamo_db/primary_key_element.rb +48 -0
  183. data/lib/aws/dynamo_db/request.rb +26 -0
  184. data/lib/aws/dynamo_db/resource.rb +33 -0
  185. data/lib/aws/dynamo_db/table.rb +491 -0
  186. data/lib/aws/dynamo_db/table_collection.rb +165 -0
  187. data/lib/aws/dynamo_db/types.rb +111 -0
  188. data/lib/aws/ec2.rb +440 -0
  189. data/lib/aws/ec2/attachment.rb +140 -0
  190. data/lib/aws/ec2/attachment_collection.rb +54 -0
  191. data/lib/aws/ec2/availability_zone.rb +86 -0
  192. data/lib/aws/ec2/availability_zone_collection.rb +43 -0
  193. data/lib/aws/ec2/block_device_mappings.rb +53 -0
  194. data/lib/aws/ec2/client.rb +3621 -0
  195. data/lib/aws/ec2/collection.rb +36 -0
  196. data/lib/aws/ec2/config.rb +18 -0
  197. data/lib/aws/ec2/config_transform.rb +63 -0
  198. data/lib/aws/ec2/customer_gateway.rb +90 -0
  199. data/lib/aws/ec2/customer_gateway_collection.rb +73 -0
  200. data/lib/aws/ec2/dhcp_options.rb +106 -0
  201. data/lib/aws/ec2/dhcp_options_collection.rb +87 -0
  202. data/lib/aws/ec2/elastic_ip.rb +208 -0
  203. data/lib/aws/ec2/elastic_ip_collection.rb +97 -0
  204. data/lib/aws/ec2/errors.rb +32 -0
  205. data/lib/aws/ec2/export_task.rb +120 -0
  206. data/lib/aws/ec2/export_task_collection.rb +67 -0
  207. data/lib/aws/ec2/filtered_collection.rb +89 -0
  208. data/lib/aws/ec2/has_permissions.rb +44 -0
  209. data/lib/aws/ec2/image.rb +264 -0
  210. data/lib/aws/ec2/image_collection.rb +228 -0
  211. data/lib/aws/ec2/instance.rb +796 -0
  212. data/lib/aws/ec2/instance_collection.rb +372 -0
  213. data/lib/aws/ec2/internet_gateway.rb +122 -0
  214. data/lib/aws/ec2/internet_gateway/attachment.rb +78 -0
  215. data/lib/aws/ec2/internet_gateway_collection.rb +54 -0
  216. data/lib/aws/ec2/key_pair.rb +82 -0
  217. data/lib/aws/ec2/key_pair_collection.rb +99 -0
  218. data/lib/aws/ec2/network_acl.rb +256 -0
  219. data/lib/aws/ec2/network_acl/association.rb +56 -0
  220. data/lib/aws/ec2/network_acl/entry.rb +147 -0
  221. data/lib/aws/ec2/network_acl_collection.rb +64 -0
  222. data/lib/aws/ec2/network_interface.rb +228 -0
  223. data/lib/aws/ec2/network_interface/attachment.rb +100 -0
  224. data/lib/aws/ec2/network_interface_collection.rb +103 -0
  225. data/lib/aws/ec2/permission_collection.rb +174 -0
  226. data/lib/aws/ec2/region.rb +106 -0
  227. data/lib/aws/ec2/region_collection.rb +51 -0
  228. data/lib/aws/ec2/request.rb +21 -0
  229. data/lib/aws/ec2/reserved_instances.rb +56 -0
  230. data/lib/aws/ec2/reserved_instances_collection.rb +40 -0
  231. data/lib/aws/ec2/reserved_instances_offering.rb +60 -0
  232. data/lib/aws/ec2/reserved_instances_offering_collection.rb +39 -0
  233. data/lib/aws/ec2/resource.rb +161 -0
  234. data/lib/aws/ec2/resource_tag_collection.rb +211 -0
  235. data/lib/aws/ec2/route_table.rb +205 -0
  236. data/lib/aws/ec2/route_table/association.rb +119 -0
  237. data/lib/aws/ec2/route_table/route.rb +119 -0
  238. data/lib/aws/ec2/route_table_collection.rb +72 -0
  239. data/lib/aws/ec2/security_group.rb +484 -0
  240. data/lib/aws/ec2/security_group/ip_permission.rb +135 -0
  241. data/lib/aws/ec2/security_group/ip_permission_collection.rb +82 -0
  242. data/lib/aws/ec2/security_group_collection.rb +135 -0
  243. data/lib/aws/ec2/snapshot.rb +143 -0
  244. data/lib/aws/ec2/snapshot_collection.rb +132 -0
  245. data/lib/aws/ec2/subnet.rb +161 -0
  246. data/lib/aws/ec2/subnet_collection.rb +115 -0
  247. data/lib/aws/ec2/tag.rb +81 -0
  248. data/lib/aws/ec2/tag_collection.rb +107 -0
  249. data/lib/aws/ec2/tagged_collection.rb +53 -0
  250. data/lib/aws/ec2/tagged_item.rb +85 -0
  251. data/lib/aws/ec2/volume.rb +174 -0
  252. data/lib/aws/ec2/volume_collection.rb +101 -0
  253. data/lib/aws/ec2/vpc.rb +166 -0
  254. data/lib/aws/ec2/vpc_collection.rb +70 -0
  255. data/lib/aws/ec2/vpn_connection.rb +99 -0
  256. data/lib/aws/ec2/vpn_connection/telemetry.rb +49 -0
  257. data/lib/aws/ec2/vpn_connection_collection.rb +96 -0
  258. data/lib/aws/ec2/vpn_gateway.rb +123 -0
  259. data/lib/aws/ec2/vpn_gateway/attachment.rb +45 -0
  260. data/lib/aws/ec2/vpn_gateway_collection.rb +77 -0
  261. data/lib/aws/elastic_beanstalk.rb +50 -0
  262. data/lib/aws/elastic_beanstalk/client.rb +867 -0
  263. data/lib/aws/elastic_beanstalk/config.rb +18 -0
  264. data/lib/aws/elastic_beanstalk/errors.rb +22 -0
  265. data/lib/aws/elastic_beanstalk/request.rb +29 -0
  266. data/lib/aws/elastic_transcoder.rb +30 -0
  267. data/lib/aws/elastic_transcoder/client.rb +672 -0
  268. data/lib/aws/elastic_transcoder/config.rb +18 -0
  269. data/lib/aws/elastic_transcoder/errors.rb +23 -0
  270. data/lib/aws/elastic_transcoder/request.rb +30 -0
  271. data/lib/aws/elasticache.rb +50 -0
  272. data/lib/aws/elasticache/client.rb +920 -0
  273. data/lib/aws/elasticache/config.rb +18 -0
  274. data/lib/aws/elasticache/errors.rb +22 -0
  275. data/lib/aws/elasticache/request.rb +23 -0
  276. data/lib/aws/elb.rb +67 -0
  277. data/lib/aws/elb/availability_zone_collection.rb +138 -0
  278. data/lib/aws/elb/backend_server_policy_collection.rb +139 -0
  279. data/lib/aws/elb/client.rb +500 -0
  280. data/lib/aws/elb/config.rb +18 -0
  281. data/lib/aws/elb/errors.rb +26 -0
  282. data/lib/aws/elb/instance_collection.rb +173 -0
  283. data/lib/aws/elb/listener.rb +190 -0
  284. data/lib/aws/elb/listener_collection.rb +113 -0
  285. data/lib/aws/elb/listener_opts.rb +45 -0
  286. data/lib/aws/elb/load_balancer.rb +281 -0
  287. data/lib/aws/elb/load_balancer_collection.rb +134 -0
  288. data/lib/aws/elb/load_balancer_policy.rb +93 -0
  289. data/lib/aws/elb/load_balancer_policy_collection.rb +208 -0
  290. data/lib/aws/elb/request.rb +29 -0
  291. data/lib/aws/emr.rb +86 -0
  292. data/lib/aws/emr/client.rb +330 -0
  293. data/lib/aws/emr/config.rb +18 -0
  294. data/lib/aws/emr/errors.rb +22 -0
  295. data/lib/aws/emr/instance_group.rb +138 -0
  296. data/lib/aws/emr/instance_group_collection.rb +82 -0
  297. data/lib/aws/emr/job_flow.rb +306 -0
  298. data/lib/aws/emr/job_flow_collection.rb +185 -0
  299. data/lib/aws/emr/request.rb +23 -0
  300. data/lib/aws/errors.rb +162 -0
  301. data/lib/aws/glacier.rb +80 -0
  302. data/lib/aws/glacier/archive.rb +56 -0
  303. data/lib/aws/glacier/archive_collection.rb +146 -0
  304. data/lib/aws/glacier/client.rb +286 -0
  305. data/lib/aws/glacier/config.rb +19 -0
  306. data/lib/aws/glacier/errors.rb +22 -0
  307. data/lib/aws/glacier/request.rb +34 -0
  308. data/lib/aws/glacier/resource.rb +30 -0
  309. data/lib/aws/glacier/vault.rb +145 -0
  310. data/lib/aws/glacier/vault_collection.rb +75 -0
  311. data/lib/aws/glacier/vault_notification_configuration.rb +29 -0
  312. data/lib/aws/iam.rb +420 -0
  313. data/lib/aws/iam/access_key.rb +180 -0
  314. data/lib/aws/iam/access_key_collection.rb +128 -0
  315. data/lib/aws/iam/account_alias_collection.rb +79 -0
  316. data/lib/aws/iam/client.rb +1092 -0
  317. data/lib/aws/iam/collection.rb +83 -0
  318. data/lib/aws/iam/config.rb +18 -0
  319. data/lib/aws/iam/errors.rb +22 -0
  320. data/lib/aws/iam/group.rb +111 -0
  321. data/lib/aws/iam/group_collection.rb +132 -0
  322. data/lib/aws/iam/group_policy_collection.rb +47 -0
  323. data/lib/aws/iam/group_user_collection.rb +84 -0
  324. data/lib/aws/iam/login_profile.rb +99 -0
  325. data/lib/aws/iam/mfa_device.rb +52 -0
  326. data/lib/aws/iam/mfa_device_collection.rb +127 -0
  327. data/lib/aws/iam/policy.rb +46 -0
  328. data/lib/aws/iam/policy_collection.rb +188 -0
  329. data/lib/aws/iam/request.rb +29 -0
  330. data/lib/aws/iam/resource.rb +62 -0
  331. data/lib/aws/iam/server_certificate.rb +141 -0
  332. data/lib/aws/iam/server_certificate_collection.rb +138 -0
  333. data/lib/aws/iam/signing_certificate.rb +169 -0
  334. data/lib/aws/iam/signing_certificate_collection.rb +131 -0
  335. data/lib/aws/iam/user.rb +205 -0
  336. data/lib/aws/iam/user_collection.rb +133 -0
  337. data/lib/aws/iam/user_group_collection.rb +98 -0
  338. data/lib/aws/iam/user_policy.rb +90 -0
  339. data/lib/aws/iam/user_policy_collection.rb +45 -0
  340. data/lib/aws/iam/virtual_mfa_device.rb +139 -0
  341. data/lib/aws/iam/virtual_mfa_device_collection.rb +73 -0
  342. data/lib/aws/import_export.rb +73 -0
  343. data/lib/aws/import_export/client.rb +109 -0
  344. data/lib/aws/import_export/config.rb +19 -0
  345. data/lib/aws/import_export/errors.rb +22 -0
  346. data/lib/aws/import_export/request.rb +23 -0
  347. data/lib/aws/ops_works.rb +30 -0
  348. data/lib/aws/ops_works/client.rb +713 -0
  349. data/lib/aws/ops_works/config.rb +18 -0
  350. data/lib/aws/ops_works/errors.rb +20 -0
  351. data/lib/aws/ops_works/request.rb +27 -0
  352. data/lib/aws/rails.rb +195 -0
  353. data/lib/aws/rds.rb +71 -0
  354. data/lib/aws/rds/client.rb +2228 -0
  355. data/lib/aws/rds/config.rb +18 -0
  356. data/lib/aws/rds/db_instance.rb +205 -0
  357. data/lib/aws/rds/db_instance_collection.rb +75 -0
  358. data/lib/aws/rds/db_snapshot.rb +163 -0
  359. data/lib/aws/rds/db_snapshot_collection.rb +89 -0
  360. data/lib/aws/rds/errors.rb +22 -0
  361. data/lib/aws/rds/request.rb +23 -0
  362. data/lib/aws/record.rb +116 -0
  363. data/lib/aws/record/abstract_base.rb +701 -0
  364. data/lib/aws/record/attributes.rb +384 -0
  365. data/lib/aws/record/conversion.rb +38 -0
  366. data/lib/aws/record/dirty_tracking.rb +285 -0
  367. data/lib/aws/record/errors.rb +143 -0
  368. data/lib/aws/record/exceptions.rb +48 -0
  369. data/lib/aws/record/hash_model.rb +161 -0
  370. data/lib/aws/record/hash_model/attributes.rb +197 -0
  371. data/lib/aws/record/hash_model/finder_methods.rb +172 -0
  372. data/lib/aws/record/hash_model/scope.rb +108 -0
  373. data/lib/aws/record/model.rb +427 -0
  374. data/lib/aws/record/model/attributes.rb +379 -0
  375. data/lib/aws/record/model/finder_methods.rb +232 -0
  376. data/lib/aws/record/model/scope.rb +213 -0
  377. data/lib/aws/record/naming.rb +31 -0
  378. data/lib/aws/record/scope.rb +199 -0
  379. data/lib/aws/record/validations.rb +712 -0
  380. data/lib/aws/record/validator.rb +246 -0
  381. data/lib/aws/record/validators/acceptance.rb +51 -0
  382. data/lib/aws/record/validators/block.rb +38 -0
  383. data/lib/aws/record/validators/confirmation.rb +43 -0
  384. data/lib/aws/record/validators/count.rb +108 -0
  385. data/lib/aws/record/validators/exclusion.rb +43 -0
  386. data/lib/aws/record/validators/format.rb +57 -0
  387. data/lib/aws/record/validators/inclusion.rb +56 -0
  388. data/lib/aws/record/validators/length.rb +107 -0
  389. data/lib/aws/record/validators/method.rb +33 -0
  390. data/lib/aws/record/validators/numericality.rb +138 -0
  391. data/lib/aws/record/validators/presence.rb +45 -0
  392. data/lib/aws/redshift.rb +52 -0
  393. data/lib/aws/redshift/client.rb +1291 -0
  394. data/lib/aws/redshift/config.rb +18 -0
  395. data/lib/aws/redshift/errors.rb +22 -0
  396. data/lib/aws/redshift/request.rb +29 -0
  397. data/lib/aws/route_53.rb +87 -0
  398. data/lib/aws/route_53/change_batch.rb +159 -0
  399. data/lib/aws/route_53/change_info.rb +72 -0
  400. data/lib/aws/route_53/client.rb +387 -0
  401. data/lib/aws/route_53/config.rb +18 -0
  402. data/lib/aws/route_53/errors.rb +22 -0
  403. data/lib/aws/route_53/hosted_zone.rb +111 -0
  404. data/lib/aws/route_53/hosted_zone_collection.rb +100 -0
  405. data/lib/aws/route_53/request.rb +23 -0
  406. data/lib/aws/route_53/resource_record_set.rb +237 -0
  407. data/lib/aws/route_53/resource_record_set_collection.rb +110 -0
  408. data/lib/aws/s3.rb +155 -0
  409. data/lib/aws/s3/access_control_list.rb +257 -0
  410. data/lib/aws/s3/acl_object.rb +264 -0
  411. data/lib/aws/s3/acl_options.rb +204 -0
  412. data/lib/aws/s3/bucket.rb +742 -0
  413. data/lib/aws/s3/bucket_collection.rb +160 -0
  414. data/lib/aws/s3/bucket_lifecycle_configuration.rb +458 -0
  415. data/lib/aws/s3/bucket_tag_collection.rb +109 -0
  416. data/lib/aws/s3/bucket_version_collection.rb +77 -0
  417. data/lib/aws/s3/cipher_io.rb +119 -0
  418. data/lib/aws/s3/client.rb +1700 -0
  419. data/lib/aws/s3/client/xml.rb +231 -0
  420. data/lib/aws/s3/config.rb +36 -0
  421. data/lib/aws/s3/cors_rule.rb +106 -0
  422. data/lib/aws/s3/cors_rule_collection.rb +192 -0
  423. data/lib/aws/s3/data_options.rb +185 -0
  424. data/lib/aws/s3/encryption_utils.rb +139 -0
  425. data/lib/aws/s3/errors.rb +94 -0
  426. data/lib/aws/s3/multipart_upload.rb +320 -0
  427. data/lib/aws/s3/multipart_upload_collection.rb +68 -0
  428. data/lib/aws/s3/object_collection.rb +355 -0
  429. data/lib/aws/s3/object_metadata.rb +96 -0
  430. data/lib/aws/s3/object_upload_collection.rb +77 -0
  431. data/lib/aws/s3/object_version.rb +148 -0
  432. data/lib/aws/s3/object_version_collection.rb +89 -0
  433. data/lib/aws/s3/paginated_collection.rb +75 -0
  434. data/lib/aws/s3/policy.rb +74 -0
  435. data/lib/aws/s3/prefix_and_delimiter_collection.rb +47 -0
  436. data/lib/aws/s3/prefixed_collection.rb +81 -0
  437. data/lib/aws/s3/presigned_post.rb +555 -0
  438. data/lib/aws/s3/request.rb +201 -0
  439. data/lib/aws/s3/s3_object.rb +1690 -0
  440. data/lib/aws/s3/tree.rb +118 -0
  441. data/lib/aws/s3/tree/branch_node.rb +68 -0
  442. data/lib/aws/s3/tree/child_collection.rb +104 -0
  443. data/lib/aws/s3/tree/leaf_node.rb +94 -0
  444. data/lib/aws/s3/tree/node.rb +22 -0
  445. data/lib/aws/s3/tree/parent.rb +87 -0
  446. data/lib/aws/s3/uploaded_part.rb +80 -0
  447. data/lib/aws/s3/uploaded_part_collection.rb +84 -0
  448. data/lib/aws/s3/website_configuration.rb +102 -0
  449. data/lib/aws/simple_db.rb +219 -0
  450. data/lib/aws/simple_db/attribute.rb +154 -0
  451. data/lib/aws/simple_db/attribute_collection.rb +231 -0
  452. data/lib/aws/simple_db/client.rb +287 -0
  453. data/lib/aws/simple_db/config.rb +20 -0
  454. data/lib/aws/simple_db/consistent_read_option.rb +42 -0
  455. data/lib/aws/simple_db/delete_attributes.rb +62 -0
  456. data/lib/aws/simple_db/domain.rb +121 -0
  457. data/lib/aws/simple_db/domain_collection.rb +86 -0
  458. data/lib/aws/simple_db/domain_metadata.rb +110 -0
  459. data/lib/aws/simple_db/errors.rb +55 -0
  460. data/lib/aws/simple_db/expect_condition_option.rb +45 -0
  461. data/lib/aws/simple_db/item.rb +93 -0
  462. data/lib/aws/simple_db/item_collection.rb +649 -0
  463. data/lib/aws/simple_db/item_data.rb +73 -0
  464. data/lib/aws/simple_db/put_attributes.rb +60 -0
  465. data/lib/aws/simple_db/request.rb +23 -0
  466. data/lib/aws/simple_email_service.rb +428 -0
  467. data/lib/aws/simple_email_service/client.rb +276 -0
  468. data/lib/aws/simple_email_service/config.rb +19 -0
  469. data/lib/aws/simple_email_service/email_address_collection.rb +69 -0
  470. data/lib/aws/simple_email_service/errors.rb +22 -0
  471. data/lib/aws/simple_email_service/identity.rb +209 -0
  472. data/lib/aws/simple_email_service/identity_collection.rb +81 -0
  473. data/lib/aws/simple_email_service/quotas.rb +64 -0
  474. data/lib/aws/simple_email_service/request.rb +27 -0
  475. data/lib/aws/simple_workflow.rb +228 -0
  476. data/lib/aws/simple_workflow/activity_task.rb +173 -0
  477. data/lib/aws/simple_workflow/activity_task_collection.rb +123 -0
  478. data/lib/aws/simple_workflow/activity_type.rb +131 -0
  479. data/lib/aws/simple_workflow/activity_type_collection.rb +93 -0
  480. data/lib/aws/simple_workflow/client.rb +1204 -0
  481. data/lib/aws/simple_workflow/config.rb +18 -0
  482. data/lib/aws/simple_workflow/count.rb +49 -0
  483. data/lib/aws/simple_workflow/decision_task.rb +603 -0
  484. data/lib/aws/simple_workflow/decision_task_collection.rb +225 -0
  485. data/lib/aws/simple_workflow/domain.rb +122 -0
  486. data/lib/aws/simple_workflow/domain_collection.rb +169 -0
  487. data/lib/aws/simple_workflow/errors.rb +20 -0
  488. data/lib/aws/simple_workflow/history_event.rb +276 -0
  489. data/lib/aws/simple_workflow/history_event_collection.rb +76 -0
  490. data/lib/aws/simple_workflow/option_formatters.rb +82 -0
  491. data/lib/aws/simple_workflow/request.rb +33 -0
  492. data/lib/aws/simple_workflow/resource.rb +94 -0
  493. data/lib/aws/simple_workflow/type.rb +89 -0
  494. data/lib/aws/simple_workflow/type_collection.rb +140 -0
  495. data/lib/aws/simple_workflow/workflow_execution.rb +386 -0
  496. data/lib/aws/simple_workflow/workflow_execution_collection.rb +617 -0
  497. data/lib/aws/simple_workflow/workflow_type.rb +177 -0
  498. data/lib/aws/simple_workflow/workflow_type_collection.rb +91 -0
  499. data/lib/aws/sns.rb +76 -0
  500. data/lib/aws/sns/client.rb +266 -0
  501. data/lib/aws/sns/config.rb +18 -0
  502. data/lib/aws/sns/errors.rb +22 -0
  503. data/lib/aws/sns/has_delivery_policy.rb +68 -0
  504. data/lib/aws/sns/policy.rb +47 -0
  505. data/lib/aws/sns/request.rb +23 -0
  506. data/lib/aws/sns/subscription.rb +144 -0
  507. data/lib/aws/sns/subscription_collection.rb +78 -0
  508. data/lib/aws/sns/topic.rb +403 -0
  509. data/lib/aws/sns/topic_collection.rb +62 -0
  510. data/lib/aws/sns/topic_subscription_collection.rb +54 -0
  511. data/lib/aws/sqs.rb +81 -0
  512. data/lib/aws/sqs/client.rb +258 -0
  513. data/lib/aws/sqs/config.rb +18 -0
  514. data/lib/aws/sqs/errors.rb +101 -0
  515. data/lib/aws/sqs/policy.rb +48 -0
  516. data/lib/aws/sqs/queue.rb +764 -0
  517. data/lib/aws/sqs/queue_collection.rb +174 -0
  518. data/lib/aws/sqs/received_message.rb +181 -0
  519. data/lib/aws/sqs/received_sns_message.rb +116 -0
  520. data/lib/aws/sqs/request.rb +67 -0
  521. data/lib/aws/storage_gateway.rb +73 -0
  522. data/lib/aws/storage_gateway/client.rb +472 -0
  523. data/lib/aws/storage_gateway/config.rb +18 -0
  524. data/lib/aws/storage_gateway/errors.rb +22 -0
  525. data/lib/aws/storage_gateway/request.rb +28 -0
  526. data/lib/aws/sts.rb +163 -0
  527. data/lib/aws/sts/client.rb +157 -0
  528. data/lib/aws/sts/config.rb +18 -0
  529. data/lib/aws/sts/errors.rb +22 -0
  530. data/lib/aws/sts/federated_session.rb +56 -0
  531. data/lib/aws/sts/policy.rb +30 -0
  532. data/lib/aws/sts/request.rb +29 -0
  533. data/lib/aws/sts/session.rb +48 -0
  534. data/lib/aws/version.rb +18 -0
  535. data/lib/net/http/connection_pool.rb +226 -0
  536. data/lib/net/http/connection_pool/connection.rb +189 -0
  537. data/lib/net/http/connection_pool/session.rb +126 -0
  538. data/rails/init.rb +15 -0
  539. metadata +632 -0
@@ -0,0 +1,47 @@
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
+ 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-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
+ 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,555 @@
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 'uri'
15
+ require 'time'
16
+
17
+ module AWS
18
+ class S3
19
+
20
+ # Helper to generate form fields for presigned POST requests to
21
+ # a bucket. You can use this to create a form that can be used
22
+ # from a web browser to upload objects to S3 while specifying
23
+ # conditions on what can be uploaded and how it is processed and
24
+ # stored.
25
+ #
26
+ # @example Form fields for uploading by file name
27
+ #
28
+ # form = bucket.presigned_post(:key => "photos/${filename}")
29
+ # form.url.to_s # => "https://mybucket.s3.amazonaws.com/"
30
+ # form.fields # => { "AWSAccessKeyId" => "...", ... }
31
+ #
32
+ # @example Generating a minimal HTML form
33
+ #
34
+ # form = bucket.objects.myobj.presigned_post
35
+ # hidden_inputs = form.fields.map do |(name, value)|
36
+ # %(<input type="hidden" name="#{name}" value="#{value}" />)
37
+ # end
38
+ # <<-END
39
+ # <form action="#{form.url}" method="post" enctype="multipart/form-data">
40
+ # #{hidden_inputs}
41
+ # <input type="file" name="file" />
42
+ # </form>
43
+ # END
44
+ #
45
+ # @example Restricting the size of the uploaded object
46
+ # bucket.presigned_post(:content_length => 1..(10*1024))
47
+ #
48
+ # @example Restricting the key prefix
49
+ # bucket.presigned_post.where(:key).starts_with("photos/")
50
+ #
51
+ class PresignedPost
52
+
53
+ include Core::Model
54
+
55
+ # @return [Bucket] The bucket to which data can be uploaded
56
+ # using the form fields
57
+ attr_reader :bucket
58
+
59
+ # @return [String] The key of the object that will be
60
+ # uploaded. If this is nil, then the object can be uploaded
61
+ # with any key that satisfies the conditions specified for
62
+ # the upload (see {#where}).
63
+ attr_reader :key
64
+
65
+ # @return [Hash] A hash of the metadata fields included in the
66
+ # signed fields. Additional metadata fields may be provided
67
+ # with the upload as long as they satisfy the conditions
68
+ # specified for the upload (see {#where}).
69
+ attr_reader :metadata
70
+
71
+ # @return [Range] The range of acceptable object sizes for the
72
+ # upload. By default any size object may be uploaded.
73
+ attr_reader :content_length
74
+
75
+ # @private
76
+ SPECIAL_FIELDS = [:cache_control,
77
+ :content_type,
78
+ :content_disposition,
79
+ :content_encoding,
80
+ :expires_header,
81
+ :acl,
82
+ :server_side_encryption,
83
+ :success_action_redirect,
84
+ :success_action_status,
85
+ :filename]
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
+ secret = config.credential_provider.secret_access_key
346
+ signature = Core::Signer.sign(secret, policy, 'sha1')
347
+
348
+ fields = {
349
+ "AWSAccessKeyId" => config.credential_provider.access_key_id,
350
+ "key" => key,
351
+ "policy" => policy,
352
+ "signature" => signature
353
+ }.merge(optional_fields)
354
+
355
+ if token = config.credential_provider.session_token
356
+ fields["x-amz-security-token"] = token
357
+ end
358
+
359
+ fields.merge(optional_fields)
360
+
361
+ end
362
+
363
+ # @private
364
+ def with_equality_condition(option_name, value)
365
+ field_name = field_name(option_name)
366
+ with_condition(option_name, Hash[[[field_name, value]]])
367
+ end
368
+
369
+ # @private
370
+ def with_prefix_condition(option_name, prefix)
371
+ field_name = field_name(option_name)
372
+ with_condition(option_name,
373
+ ["starts-with", "$#{field_name}", prefix])
374
+ end
375
+
376
+ # @private
377
+ def refine(opts)
378
+ self.class.new(bucket, {
379
+ :conditions => conditions,
380
+ :key => key,
381
+ :metadata => metadata,
382
+ :secure => secure?,
383
+ :content_length => content_length,
384
+ :expires => expires,
385
+ :ignore => ignored_fields
386
+ }.merge(@fields).
387
+ merge(opts))
388
+ end
389
+
390
+ # @private
391
+ private
392
+ def with_condition(field, condition)
393
+ conditions = self.conditions.dup
394
+ (conditions[field] ||= []) << condition
395
+ refine(:conditions => conditions)
396
+ end
397
+
398
+ # @private
399
+ private
400
+ def format_expiration
401
+ time = expires || Time.now.utc + 60*60
402
+ time =
403
+ case time
404
+ when Time
405
+ time
406
+ when DateTime
407
+ Time.parse(time.to_s)
408
+ when Integer
409
+ (Time.now + time)
410
+ when String
411
+ Time.parse(time)
412
+ end
413
+ time.utc.iso8601
414
+ end
415
+
416
+ # @private
417
+ private
418
+ def range_value(range)
419
+ case range
420
+ when Integer
421
+ range..range
422
+ when Range
423
+ range
424
+ end
425
+ end
426
+
427
+ # @private
428
+ private
429
+ def split_range(range)
430
+ range = range_value(range)
431
+ [range.begin,
432
+ (range.exclude_end? ?
433
+ range.end-1 :
434
+ range.end)]
435
+ end
436
+
437
+ # @private
438
+ private
439
+ def optional_fields
440
+ fields = (SPECIAL_FIELDS &
441
+ @fields.keys).inject({}) do |fields, option_name|
442
+ fields[field_name(option_name)] =
443
+ field_value(option_name)
444
+ fields
445
+ end
446
+
447
+ @metadata.each do |key, value|
448
+ fields["x-amz-meta-#{key}"] = value.to_s
449
+ end
450
+
451
+ fields
452
+ end
453
+
454
+ # @private
455
+ private
456
+ def field_name(option_name)
457
+ case option_name
458
+ when :expires_header
459
+ "Expires"
460
+ when :server_side_encryption
461
+ "x-amz-server-side-encryption"
462
+ when :acl, :success_action_redirect, :success_action_status
463
+ option_name.to_s
464
+ else
465
+ # e.g. Cache-Control from cache_control
466
+ field_name = option_name.to_s.tr("_", "-").
467
+ gsub(/-(.)/) { |m| m.upcase }
468
+ field_name[0,1] = field_name[0,1].upcase
469
+ field_name
470
+ end
471
+ end
472
+
473
+ # @private
474
+ private
475
+ def field_value(option_name)
476
+ case option_name
477
+ when :acl
478
+ @fields[:acl].to_s.tr("_", "-")
479
+ when :server_side_encryption
480
+ value = @fields[:server_side_encryption]
481
+ if value.kind_of?(Symbol)
482
+ value.to_s.upcase
483
+ else
484
+ value.to_s
485
+ end
486
+ else
487
+ @fields[option_name].to_s
488
+ end
489
+ end
490
+
491
+ # @private
492
+ private
493
+ def generate_conditions
494
+
495
+ conditions = self.conditions.inject([]) do |list, (field, field_conds)|
496
+ list + field_conds
497
+ end
498
+
499
+ conditions << { "bucket" => bucket.name }
500
+ conditions += key_conditions
501
+ conditions += optional_fields.map { |(n, v)| Hash[[[n, v]]] }
502
+ conditions += range_conditions
503
+ conditions += ignored_conditions
504
+
505
+ if token = config.credential_provider.session_token
506
+ conditions << { "x-amz-security-token" => token }
507
+ end
508
+
509
+ conditions
510
+
511
+ end
512
+
513
+ # @private
514
+ private
515
+ def ignored_conditions
516
+ ignored_fields.map do |field|
517
+ ["starts-with", "$#{field}", ""]
518
+ end
519
+ end
520
+
521
+ # @private
522
+ private
523
+ def range_conditions
524
+ if content_length
525
+ [["content-length-range", *split_range(content_length)]]
526
+ else
527
+ []
528
+ end
529
+ end
530
+
531
+ # @private
532
+ private
533
+ def key_conditions
534
+ [if key && key.include?("${filename}")
535
+ ["starts-with", "$key", key[/^(.*)\$\{filename\}/, 1]]
536
+ elsif key
537
+ { "key" => key }
538
+ else
539
+ ["starts-with", "$key", ""]
540
+ end]
541
+ end
542
+
543
+ # @private
544
+ private
545
+ def build_uri(request)
546
+ uri_class = secure? ? URI::HTTPS : URI::HTTP
547
+ uri_class.build(:host => request.host,
548
+ :path => request.path,
549
+ :query => request.querystring)
550
+ end
551
+
552
+ end
553
+
554
+ end
555
+ end