aws-sdk-v1 1.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (560) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +7 -0
  3. data/LICENSE.txt +12 -0
  4. data/README.md +337 -0
  5. data/bin/aws-rb +179 -0
  6. data/ca-bundle.crt +3554 -0
  7. data/endpoints.json +1671 -0
  8. data/lib/aws-sdk-v1.rb +2 -0
  9. data/lib/aws-sdk.rb +1 -0
  10. data/lib/aws.rb +14 -0
  11. data/lib/aws/api_config/AutoScaling-2011-01-01.yml +1070 -0
  12. data/lib/aws/api_config/CloudFormation-2010-05-15.yml +372 -0
  13. data/lib/aws/api_config/CloudFront-2013-05-12.yml +2448 -0
  14. data/lib/aws/api_config/CloudFront-2013-08-26.yml +2599 -0
  15. data/lib/aws/api_config/CloudFront-2013-09-27.yml +2765 -0
  16. data/lib/aws/api_config/CloudFront-2013-11-11.yml +2886 -0
  17. data/lib/aws/api_config/CloudFront-2013-11-22.yml +2918 -0
  18. data/lib/aws/api_config/CloudFront-2014-01-31.yml +2934 -0
  19. data/lib/aws/api_config/CloudFront-2014-05-31.yml +3100 -0
  20. data/lib/aws/api_config/CloudSearch-2011-02-01.yml +681 -0
  21. data/lib/aws/api_config/CloudSearch-2013-01-01.yml +1164 -0
  22. data/lib/aws/api_config/CloudTrail-2013-11-01.yml +130 -0
  23. data/lib/aws/api_config/CloudWatch-2010-08-01.yml +433 -0
  24. data/lib/aws/api_config/DataPipeline-2012-10-29.yml +422 -0
  25. data/lib/aws/api_config/DirectConnect-2012-10-25.yml +735 -0
  26. data/lib/aws/api_config/DynamoDB-2011-12-05.yml +1168 -0
  27. data/lib/aws/api_config/DynamoDB-2012-08-10.yml +2105 -0
  28. data/lib/aws/api_config/EC2-2013-08-15.yml +4708 -0
  29. data/lib/aws/api_config/EC2-2013-10-01.yml +4726 -0
  30. data/lib/aws/api_config/EC2-2013-10-15.yml +4651 -0
  31. data/lib/aws/api_config/EC2-2014-02-01.yml +4755 -0
  32. data/lib/aws/api_config/EC2-2014-05-01.yml +4812 -0
  33. data/lib/aws/api_config/ELB-2012-06-01.yml +766 -0
  34. data/lib/aws/api_config/EMR-2009-03-31.yml +972 -0
  35. data/lib/aws/api_config/ElastiCache-2013-06-15.yml +1188 -0
  36. data/lib/aws/api_config/ElastiCache-2014-03-24.yml +1375 -0
  37. data/lib/aws/api_config/ElastiCache-2014-07-15.yml +1385 -0
  38. data/lib/aws/api_config/ElasticBeanstalk-2010-12-01.yml +854 -0
  39. data/lib/aws/api_config/ElasticTranscoder-2012-09-25.yml +3082 -0
  40. data/lib/aws/api_config/Glacier-2012-06-01.yml +649 -0
  41. data/lib/aws/api_config/IAM-2010-05-08.yml +1339 -0
  42. data/lib/aws/api_config/ImportExport-2010-06-01.yml +109 -0
  43. data/lib/aws/api_config/Kinesis-2013-12-02.yml +201 -0
  44. data/lib/aws/api_config/OpsWorks-2013-02-18.yml +2025 -0
  45. data/lib/aws/api_config/RDS-2013-05-15.yml +2464 -0
  46. data/lib/aws/api_config/RDS-2013-09-09.yml +2640 -0
  47. data/lib/aws/api_config/Redshift-2012-12-01.yml +2161 -0
  48. data/lib/aws/api_config/Route53-2012-12-12.yml +547 -0
  49. data/lib/aws/api_config/Route53-2013-04-01.yml +889 -0
  50. data/lib/aws/api_config/SNS-2010-03-31.yml +448 -0
  51. data/lib/aws/api_config/SQS-2012-11-05.yml +404 -0
  52. data/lib/aws/api_config/STS-2011-06-15.yml +151 -0
  53. data/lib/aws/api_config/SimpleDB-2009-04-15.yml +306 -0
  54. data/lib/aws/api_config/SimpleEmailService-2010-12-01.yml +346 -0
  55. data/lib/aws/api_config/SimpleWorkflow-2012-01-25.yml +2388 -0
  56. data/lib/aws/api_config/StorageGateway-2012-06-30.yml +748 -0
  57. data/lib/aws/api_config/StorageGateway-2013-06-30.yml +1025 -0
  58. data/lib/aws/api_config/Support-2013-04-15.yml +489 -0
  59. data/lib/aws/auto_scaling.rb +163 -0
  60. data/lib/aws/auto_scaling/activity.rb +102 -0
  61. data/lib/aws/auto_scaling/activity_collection.rb +81 -0
  62. data/lib/aws/auto_scaling/client.rb +48 -0
  63. data/lib/aws/auto_scaling/config.rb +18 -0
  64. data/lib/aws/auto_scaling/errors.rb +22 -0
  65. data/lib/aws/auto_scaling/group.rb +421 -0
  66. data/lib/aws/auto_scaling/group_collection.rb +96 -0
  67. data/lib/aws/auto_scaling/group_options.rb +155 -0
  68. data/lib/aws/auto_scaling/instance.rb +192 -0
  69. data/lib/aws/auto_scaling/instance_collection.rb +63 -0
  70. data/lib/aws/auto_scaling/launch_configuration.rb +162 -0
  71. data/lib/aws/auto_scaling/launch_configuration_collection.rb +160 -0
  72. data/lib/aws/auto_scaling/notification_configuration.rb +89 -0
  73. data/lib/aws/auto_scaling/notification_configuration_collection.rb +183 -0
  74. data/lib/aws/auto_scaling/scaling_policy.rb +142 -0
  75. data/lib/aws/auto_scaling/scaling_policy_collection.rb +72 -0
  76. data/lib/aws/auto_scaling/scaling_policy_options.rb +65 -0
  77. data/lib/aws/auto_scaling/scheduled_action.rb +141 -0
  78. data/lib/aws/auto_scaling/scheduled_action_collection.rb +202 -0
  79. data/lib/aws/auto_scaling/tag.rb +59 -0
  80. data/lib/aws/auto_scaling/tag_collection.rb +114 -0
  81. data/lib/aws/cloud_formation.rb +272 -0
  82. data/lib/aws/cloud_formation/client.rb +48 -0
  83. data/lib/aws/cloud_formation/config.rb +18 -0
  84. data/lib/aws/cloud_formation/errors.rb +22 -0
  85. data/lib/aws/cloud_formation/stack.rb +266 -0
  86. data/lib/aws/cloud_formation/stack_collection.rb +232 -0
  87. data/lib/aws/cloud_formation/stack_event.rb +73 -0
  88. data/lib/aws/cloud_formation/stack_event_collection.rb +47 -0
  89. data/lib/aws/cloud_formation/stack_options.rb +72 -0
  90. data/lib/aws/cloud_formation/stack_output.rb +53 -0
  91. data/lib/aws/cloud_formation/stack_resource.rb +117 -0
  92. data/lib/aws/cloud_formation/stack_resource_collection.rb +83 -0
  93. data/lib/aws/cloud_formation/stack_resource_summary_collection.rb +64 -0
  94. data/lib/aws/cloud_formation/stack_summary_collection.rb +123 -0
  95. data/lib/aws/cloud_front.rb +72 -0
  96. data/lib/aws/cloud_front/client.rb +57 -0
  97. data/lib/aws/cloud_front/config.rb +18 -0
  98. data/lib/aws/cloud_front/errors.rb +22 -0
  99. data/lib/aws/cloud_search.rb +73 -0
  100. data/lib/aws/cloud_search/client.rb +40 -0
  101. data/lib/aws/cloud_search/config.rb +18 -0
  102. data/lib/aws/cloud_search/errors.rb +22 -0
  103. data/lib/aws/cloud_trail.rb +72 -0
  104. data/lib/aws/cloud_trail/client.rb +35 -0
  105. data/lib/aws/cloud_trail/config.rb +18 -0
  106. data/lib/aws/cloud_trail/errors.rb +22 -0
  107. data/lib/aws/cloud_watch.rb +118 -0
  108. data/lib/aws/cloud_watch/alarm.rb +293 -0
  109. data/lib/aws/cloud_watch/alarm_collection.rb +153 -0
  110. data/lib/aws/cloud_watch/alarm_history_item.rb +50 -0
  111. data/lib/aws/cloud_watch/alarm_history_item_collection.rb +84 -0
  112. data/lib/aws/cloud_watch/client.rb +40 -0
  113. data/lib/aws/cloud_watch/config.rb +18 -0
  114. data/lib/aws/cloud_watch/errors.rb +22 -0
  115. data/lib/aws/cloud_watch/metric.rb +135 -0
  116. data/lib/aws/cloud_watch/metric_alarm_collection.rb +160 -0
  117. data/lib/aws/cloud_watch/metric_collection.rb +129 -0
  118. data/lib/aws/cloud_watch/metric_statistics.rb +69 -0
  119. data/lib/aws/core.rb +716 -0
  120. data/lib/aws/core/async_handle.rb +90 -0
  121. data/lib/aws/core/cacheable.rb +77 -0
  122. data/lib/aws/core/client.rb +787 -0
  123. data/lib/aws/core/collection.rb +263 -0
  124. data/lib/aws/core/collection/simple.rb +82 -0
  125. data/lib/aws/core/collection/with_limit_and_next_token.rb +71 -0
  126. data/lib/aws/core/collection/with_next_token.rb +97 -0
  127. data/lib/aws/core/configuration.rb +542 -0
  128. data/lib/aws/core/credential_providers.rb +639 -0
  129. data/lib/aws/core/data.rb +247 -0
  130. data/lib/aws/core/deprecations.rb +84 -0
  131. data/lib/aws/core/endpoints.rb +37 -0
  132. data/lib/aws/core/http/connection_pool.rb +369 -0
  133. data/lib/aws/core/http/curb_handler.rb +148 -0
  134. data/lib/aws/core/http/handler.rb +89 -0
  135. data/lib/aws/core/http/net_http_handler.rb +144 -0
  136. data/lib/aws/core/http/patch.rb +102 -0
  137. data/lib/aws/core/http/request.rb +259 -0
  138. data/lib/aws/core/http/response.rb +81 -0
  139. data/lib/aws/core/indifferent_hash.rb +88 -0
  140. data/lib/aws/core/inflection.rb +56 -0
  141. data/lib/aws/core/ini_parser.rb +42 -0
  142. data/lib/aws/core/json_client.rb +47 -0
  143. data/lib/aws/core/json_parser.rb +76 -0
  144. data/lib/aws/core/json_request_builder.rb +35 -0
  145. data/lib/aws/core/json_response_parser.rb +79 -0
  146. data/lib/aws/core/lazy_error_classes.rb +108 -0
  147. data/lib/aws/core/log_formatter.rb +428 -0
  148. data/lib/aws/core/managed_file.rb +32 -0
  149. data/lib/aws/core/meta_utils.rb +45 -0
  150. data/lib/aws/core/model.rb +62 -0
  151. data/lib/aws/core/naming.rb +30 -0
  152. data/lib/aws/core/option_grammar.rb +738 -0
  153. data/lib/aws/core/options/json_serializer.rb +82 -0
  154. data/lib/aws/core/options/validator.rb +155 -0
  155. data/lib/aws/core/options/xml_serializer.rb +118 -0
  156. data/lib/aws/core/page_result.rb +75 -0
  157. data/lib/aws/core/policy.rb +941 -0
  158. data/lib/aws/core/query_client.rb +41 -0
  159. data/lib/aws/core/query_error_parser.rb +24 -0
  160. data/lib/aws/core/query_request_builder.rb +47 -0
  161. data/lib/aws/core/query_response_parser.rb +35 -0
  162. data/lib/aws/core/region.rb +85 -0
  163. data/lib/aws/core/region_collection.rb +80 -0
  164. data/lib/aws/core/resource.rb +413 -0
  165. data/lib/aws/core/resource_cache.rb +40 -0
  166. data/lib/aws/core/response.rb +215 -0
  167. data/lib/aws/core/response_cache.rb +50 -0
  168. data/lib/aws/core/rest_error_parser.rb +24 -0
  169. data/lib/aws/core/rest_json_client.rb +40 -0
  170. data/lib/aws/core/rest_request_builder.rb +154 -0
  171. data/lib/aws/core/rest_response_parser.rb +66 -0
  172. data/lib/aws/core/rest_xml_client.rb +47 -0
  173. data/lib/aws/core/service_interface.rb +83 -0
  174. data/lib/aws/core/signers/base.rb +46 -0
  175. data/lib/aws/core/signers/cloud_front.rb +56 -0
  176. data/lib/aws/core/signers/s3.rb +159 -0
  177. data/lib/aws/core/signers/version_2.rb +72 -0
  178. data/lib/aws/core/signers/version_3.rb +86 -0
  179. data/lib/aws/core/signers/version_3_https.rb +61 -0
  180. data/lib/aws/core/signers/version_4.rb +228 -0
  181. data/lib/aws/core/signers/version_4/chunk_signed_stream.rb +191 -0
  182. data/lib/aws/core/uri_escape.rb +44 -0
  183. data/lib/aws/core/xml/frame.rb +245 -0
  184. data/lib/aws/core/xml/frame_stack.rb +85 -0
  185. data/lib/aws/core/xml/grammar.rb +307 -0
  186. data/lib/aws/core/xml/parser.rb +70 -0
  187. data/lib/aws/core/xml/root_frame.rb +65 -0
  188. data/lib/aws/core/xml/sax_handlers/libxml.rb +47 -0
  189. data/lib/aws/core/xml/sax_handlers/nokogiri.rb +56 -0
  190. data/lib/aws/core/xml/sax_handlers/ox.rb +41 -0
  191. data/lib/aws/core/xml/sax_handlers/rexml.rb +47 -0
  192. data/lib/aws/core/xml/stub.rb +123 -0
  193. data/lib/aws/data_pipeline.rb +72 -0
  194. data/lib/aws/data_pipeline/client.rb +36 -0
  195. data/lib/aws/data_pipeline/config.rb +18 -0
  196. data/lib/aws/data_pipeline/errors.rb +20 -0
  197. data/lib/aws/direct_connect.rb +73 -0
  198. data/lib/aws/direct_connect/client.rb +36 -0
  199. data/lib/aws/direct_connect/config.rb +18 -0
  200. data/lib/aws/direct_connect/errors.rb +22 -0
  201. data/lib/aws/dynamo_db.rb +230 -0
  202. data/lib/aws/dynamo_db/attribute_collection.rb +456 -0
  203. data/lib/aws/dynamo_db/batch_get.rb +213 -0
  204. data/lib/aws/dynamo_db/batch_write.rb +254 -0
  205. data/lib/aws/dynamo_db/binary.rb +35 -0
  206. data/lib/aws/dynamo_db/client.rb +129 -0
  207. data/lib/aws/dynamo_db/client/v20111205.rb +1266 -0
  208. data/lib/aws/dynamo_db/client/v20120810.rb +1409 -0
  209. data/lib/aws/dynamo_db/client_v2.rb +44 -0
  210. data/lib/aws/dynamo_db/config.rb +24 -0
  211. data/lib/aws/dynamo_db/errors.rb +20 -0
  212. data/lib/aws/dynamo_db/expectations.rb +40 -0
  213. data/lib/aws/dynamo_db/item.rb +133 -0
  214. data/lib/aws/dynamo_db/item_collection.rb +856 -0
  215. data/lib/aws/dynamo_db/item_data.rb +31 -0
  216. data/lib/aws/dynamo_db/keys.rb +41 -0
  217. data/lib/aws/dynamo_db/primary_key_element.rb +48 -0
  218. data/lib/aws/dynamo_db/resource.rb +33 -0
  219. data/lib/aws/dynamo_db/table.rb +492 -0
  220. data/lib/aws/dynamo_db/table_collection.rb +165 -0
  221. data/lib/aws/dynamo_db/types.rb +111 -0
  222. data/lib/aws/ec2.rb +428 -0
  223. data/lib/aws/ec2/attachment.rb +135 -0
  224. data/lib/aws/ec2/attachment_collection.rb +54 -0
  225. data/lib/aws/ec2/availability_zone.rb +86 -0
  226. data/lib/aws/ec2/availability_zone_collection.rb +43 -0
  227. data/lib/aws/ec2/block_device_mappings.rb +53 -0
  228. data/lib/aws/ec2/client.rb +154 -0
  229. data/lib/aws/ec2/collection.rb +36 -0
  230. data/lib/aws/ec2/config.rb +21 -0
  231. data/lib/aws/ec2/customer_gateway.rb +90 -0
  232. data/lib/aws/ec2/customer_gateway_collection.rb +73 -0
  233. data/lib/aws/ec2/dhcp_options.rb +106 -0
  234. data/lib/aws/ec2/dhcp_options_collection.rb +87 -0
  235. data/lib/aws/ec2/elastic_ip.rb +209 -0
  236. data/lib/aws/ec2/elastic_ip_collection.rb +93 -0
  237. data/lib/aws/ec2/errors.rb +32 -0
  238. data/lib/aws/ec2/export_task.rb +120 -0
  239. data/lib/aws/ec2/export_task_collection.rb +67 -0
  240. data/lib/aws/ec2/filtered_collection.rb +87 -0
  241. data/lib/aws/ec2/has_permissions.rb +44 -0
  242. data/lib/aws/ec2/image.rb +270 -0
  243. data/lib/aws/ec2/image_collection.rb +219 -0
  244. data/lib/aws/ec2/instance.rb +803 -0
  245. data/lib/aws/ec2/instance_collection.rb +402 -0
  246. data/lib/aws/ec2/internet_gateway.rb +122 -0
  247. data/lib/aws/ec2/internet_gateway/attachment.rb +78 -0
  248. data/lib/aws/ec2/internet_gateway_collection.rb +54 -0
  249. data/lib/aws/ec2/key_pair.rb +82 -0
  250. data/lib/aws/ec2/key_pair_collection.rb +99 -0
  251. data/lib/aws/ec2/network_acl.rb +256 -0
  252. data/lib/aws/ec2/network_acl/association.rb +56 -0
  253. data/lib/aws/ec2/network_acl/entry.rb +147 -0
  254. data/lib/aws/ec2/network_acl_collection.rb +64 -0
  255. data/lib/aws/ec2/network_interface.rb +237 -0
  256. data/lib/aws/ec2/network_interface/attachment.rb +100 -0
  257. data/lib/aws/ec2/network_interface_collection.rb +103 -0
  258. data/lib/aws/ec2/permission_collection.rb +174 -0
  259. data/lib/aws/ec2/region.rb +106 -0
  260. data/lib/aws/ec2/region_collection.rb +51 -0
  261. data/lib/aws/ec2/reserved_instances.rb +57 -0
  262. data/lib/aws/ec2/reserved_instances_collection.rb +40 -0
  263. data/lib/aws/ec2/reserved_instances_offering.rb +60 -0
  264. data/lib/aws/ec2/reserved_instances_offering_collection.rb +45 -0
  265. data/lib/aws/ec2/resource.rb +161 -0
  266. data/lib/aws/ec2/resource_tag_collection.rb +211 -0
  267. data/lib/aws/ec2/route_table.rb +205 -0
  268. data/lib/aws/ec2/route_table/association.rb +119 -0
  269. data/lib/aws/ec2/route_table/route.rb +119 -0
  270. data/lib/aws/ec2/route_table_collection.rb +72 -0
  271. data/lib/aws/ec2/security_group.rb +482 -0
  272. data/lib/aws/ec2/security_group/ip_permission.rb +135 -0
  273. data/lib/aws/ec2/security_group/ip_permission_collection.rb +82 -0
  274. data/lib/aws/ec2/security_group_collection.rb +133 -0
  275. data/lib/aws/ec2/snapshot.rb +143 -0
  276. data/lib/aws/ec2/snapshot_collection.rb +131 -0
  277. data/lib/aws/ec2/subnet.rb +161 -0
  278. data/lib/aws/ec2/subnet_collection.rb +119 -0
  279. data/lib/aws/ec2/tag.rb +81 -0
  280. data/lib/aws/ec2/tag_collection.rb +107 -0
  281. data/lib/aws/ec2/tagged_collection.rb +67 -0
  282. data/lib/aws/ec2/tagged_item.rb +85 -0
  283. data/lib/aws/ec2/volume.rb +185 -0
  284. data/lib/aws/ec2/volume_collection.rb +102 -0
  285. data/lib/aws/ec2/vpc.rb +174 -0
  286. data/lib/aws/ec2/vpc_collection.rb +70 -0
  287. data/lib/aws/ec2/vpn_connection.rb +99 -0
  288. data/lib/aws/ec2/vpn_connection/telemetry.rb +49 -0
  289. data/lib/aws/ec2/vpn_connection_collection.rb +96 -0
  290. data/lib/aws/ec2/vpn_gateway.rb +123 -0
  291. data/lib/aws/ec2/vpn_gateway/attachment.rb +45 -0
  292. data/lib/aws/ec2/vpn_gateway_collection.rb +77 -0
  293. data/lib/aws/elastic_beanstalk.rb +49 -0
  294. data/lib/aws/elastic_beanstalk/client.rb +36 -0
  295. data/lib/aws/elastic_beanstalk/config.rb +18 -0
  296. data/lib/aws/elastic_beanstalk/errors.rb +22 -0
  297. data/lib/aws/elastic_transcoder.rb +29 -0
  298. data/lib/aws/elastic_transcoder/client.rb +48 -0
  299. data/lib/aws/elastic_transcoder/config.rb +18 -0
  300. data/lib/aws/elastic_transcoder/errors.rb +23 -0
  301. data/lib/aws/elasticache.rb +49 -0
  302. data/lib/aws/elasticache/client.rb +41 -0
  303. data/lib/aws/elasticache/config.rb +18 -0
  304. data/lib/aws/elasticache/errors.rb +22 -0
  305. data/lib/aws/elb.rb +66 -0
  306. data/lib/aws/elb/availability_zone_collection.rb +138 -0
  307. data/lib/aws/elb/backend_server_policy_collection.rb +139 -0
  308. data/lib/aws/elb/client.rb +35 -0
  309. data/lib/aws/elb/config.rb +18 -0
  310. data/lib/aws/elb/errors.rb +26 -0
  311. data/lib/aws/elb/instance_collection.rb +168 -0
  312. data/lib/aws/elb/listener.rb +190 -0
  313. data/lib/aws/elb/listener_collection.rb +113 -0
  314. data/lib/aws/elb/listener_opts.rb +45 -0
  315. data/lib/aws/elb/load_balancer.rb +280 -0
  316. data/lib/aws/elb/load_balancer_collection.rb +146 -0
  317. data/lib/aws/elb/load_balancer_policy.rb +93 -0
  318. data/lib/aws/elb/load_balancer_policy_collection.rb +208 -0
  319. data/lib/aws/emr.rb +87 -0
  320. data/lib/aws/emr/client.rb +35 -0
  321. data/lib/aws/emr/config.rb +18 -0
  322. data/lib/aws/emr/errors.rb +22 -0
  323. data/lib/aws/emr/instance_group.rb +138 -0
  324. data/lib/aws/emr/instance_group_collection.rb +82 -0
  325. data/lib/aws/emr/job_flow.rb +307 -0
  326. data/lib/aws/emr/job_flow_collection.rb +183 -0
  327. data/lib/aws/errors.rb +162 -0
  328. data/lib/aws/glacier.rb +79 -0
  329. data/lib/aws/glacier/archive.rb +56 -0
  330. data/lib/aws/glacier/archive_collection.rb +146 -0
  331. data/lib/aws/glacier/client.rb +49 -0
  332. data/lib/aws/glacier/config.rb +19 -0
  333. data/lib/aws/glacier/errors.rb +22 -0
  334. data/lib/aws/glacier/resource.rb +30 -0
  335. data/lib/aws/glacier/vault.rb +145 -0
  336. data/lib/aws/glacier/vault_collection.rb +75 -0
  337. data/lib/aws/glacier/vault_notification_configuration.rb +29 -0
  338. data/lib/aws/iam.rb +408 -0
  339. data/lib/aws/iam/access_key.rb +185 -0
  340. data/lib/aws/iam/access_key_collection.rb +128 -0
  341. data/lib/aws/iam/account_alias_collection.rb +79 -0
  342. data/lib/aws/iam/client.rb +49 -0
  343. data/lib/aws/iam/collection.rb +83 -0
  344. data/lib/aws/iam/config.rb +18 -0
  345. data/lib/aws/iam/errors.rb +22 -0
  346. data/lib/aws/iam/group.rb +111 -0
  347. data/lib/aws/iam/group_collection.rb +132 -0
  348. data/lib/aws/iam/group_policy_collection.rb +47 -0
  349. data/lib/aws/iam/group_user_collection.rb +84 -0
  350. data/lib/aws/iam/login_profile.rb +111 -0
  351. data/lib/aws/iam/mfa_device.rb +52 -0
  352. data/lib/aws/iam/mfa_device_collection.rb +127 -0
  353. data/lib/aws/iam/policy.rb +46 -0
  354. data/lib/aws/iam/policy_collection.rb +188 -0
  355. data/lib/aws/iam/resource.rb +62 -0
  356. data/lib/aws/iam/server_certificate.rb +148 -0
  357. data/lib/aws/iam/server_certificate_collection.rb +138 -0
  358. data/lib/aws/iam/signing_certificate.rb +186 -0
  359. data/lib/aws/iam/signing_certificate_collection.rb +131 -0
  360. data/lib/aws/iam/user.rb +200 -0
  361. data/lib/aws/iam/user_collection.rb +133 -0
  362. data/lib/aws/iam/user_group_collection.rb +98 -0
  363. data/lib/aws/iam/user_policy.rb +90 -0
  364. data/lib/aws/iam/user_policy_collection.rb +45 -0
  365. data/lib/aws/iam/virtual_mfa_device.rb +139 -0
  366. data/lib/aws/iam/virtual_mfa_device_collection.rb +73 -0
  367. data/lib/aws/import_export.rb +73 -0
  368. data/lib/aws/import_export/client.rb +35 -0
  369. data/lib/aws/import_export/config.rb +19 -0
  370. data/lib/aws/import_export/errors.rb +22 -0
  371. data/lib/aws/kinesis.rb +53 -0
  372. data/lib/aws/kinesis/client.rb +35 -0
  373. data/lib/aws/kinesis/config.rb +18 -0
  374. data/lib/aws/kinesis/errors.rb +20 -0
  375. data/lib/aws/ops_works.rb +29 -0
  376. data/lib/aws/ops_works/client.rb +35 -0
  377. data/lib/aws/ops_works/config.rb +18 -0
  378. data/lib/aws/ops_works/errors.rb +20 -0
  379. data/lib/aws/rails.rb +195 -0
  380. data/lib/aws/rds.rb +70 -0
  381. data/lib/aws/rds/client.rb +42 -0
  382. data/lib/aws/rds/config.rb +18 -0
  383. data/lib/aws/rds/db_instance.rb +215 -0
  384. data/lib/aws/rds/db_instance_collection.rb +75 -0
  385. data/lib/aws/rds/db_snapshot.rb +163 -0
  386. data/lib/aws/rds/db_snapshot_collection.rb +89 -0
  387. data/lib/aws/rds/errors.rb +22 -0
  388. data/lib/aws/record.rb +139 -0
  389. data/lib/aws/record/abstract_base.rb +689 -0
  390. data/lib/aws/record/attributes.rb +388 -0
  391. data/lib/aws/record/conversion.rb +38 -0
  392. data/lib/aws/record/dirty_tracking.rb +287 -0
  393. data/lib/aws/record/errors.rb +143 -0
  394. data/lib/aws/record/exceptions.rb +51 -0
  395. data/lib/aws/record/hash_model.rb +204 -0
  396. data/lib/aws/record/hash_model/attributes.rb +195 -0
  397. data/lib/aws/record/hash_model/finder_methods.rb +172 -0
  398. data/lib/aws/record/hash_model/scope.rb +108 -0
  399. data/lib/aws/record/model.rb +453 -0
  400. data/lib/aws/record/model/attributes.rb +377 -0
  401. data/lib/aws/record/model/finder_methods.rb +232 -0
  402. data/lib/aws/record/model/scope.rb +212 -0
  403. data/lib/aws/record/naming.rb +31 -0
  404. data/lib/aws/record/scope.rb +203 -0
  405. data/lib/aws/record/validations.rb +694 -0
  406. data/lib/aws/record/validator.rb +246 -0
  407. data/lib/aws/record/validators/acceptance.rb +49 -0
  408. data/lib/aws/record/validators/block.rb +36 -0
  409. data/lib/aws/record/validators/confirmation.rb +41 -0
  410. data/lib/aws/record/validators/count.rb +106 -0
  411. data/lib/aws/record/validators/exclusion.rb +41 -0
  412. data/lib/aws/record/validators/format.rb +55 -0
  413. data/lib/aws/record/validators/inclusion.rb +54 -0
  414. data/lib/aws/record/validators/length.rb +105 -0
  415. data/lib/aws/record/validators/method.rb +31 -0
  416. data/lib/aws/record/validators/numericality.rb +136 -0
  417. data/lib/aws/record/validators/presence.rb +43 -0
  418. data/lib/aws/redshift.rb +51 -0
  419. data/lib/aws/redshift/client.rb +35 -0
  420. data/lib/aws/redshift/config.rb +18 -0
  421. data/lib/aws/redshift/errors.rb +22 -0
  422. data/lib/aws/route_53.rb +86 -0
  423. data/lib/aws/route_53/change_batch.rb +161 -0
  424. data/lib/aws/route_53/change_info.rb +72 -0
  425. data/lib/aws/route_53/client.rb +38 -0
  426. data/lib/aws/route_53/config.rb +18 -0
  427. data/lib/aws/route_53/errors.rb +22 -0
  428. data/lib/aws/route_53/hosted_zone.rb +134 -0
  429. data/lib/aws/route_53/hosted_zone_collection.rb +101 -0
  430. data/lib/aws/route_53/resource_record_set.rb +251 -0
  431. data/lib/aws/route_53/resource_record_set_collection.rb +110 -0
  432. data/lib/aws/s3.rb +156 -0
  433. data/lib/aws/s3/access_control_list.rb +265 -0
  434. data/lib/aws/s3/acl_object.rb +264 -0
  435. data/lib/aws/s3/acl_options.rb +204 -0
  436. data/lib/aws/s3/bucket.rb +742 -0
  437. data/lib/aws/s3/bucket_collection.rb +162 -0
  438. data/lib/aws/s3/bucket_lifecycle_configuration.rb +473 -0
  439. data/lib/aws/s3/bucket_tag_collection.rb +111 -0
  440. data/lib/aws/s3/bucket_version_collection.rb +79 -0
  441. data/lib/aws/s3/cipher_io.rb +120 -0
  442. data/lib/aws/s3/client.rb +2067 -0
  443. data/lib/aws/s3/client/xml.rb +266 -0
  444. data/lib/aws/s3/config.rb +48 -0
  445. data/lib/aws/s3/cors_rule.rb +108 -0
  446. data/lib/aws/s3/cors_rule_collection.rb +194 -0
  447. data/lib/aws/s3/data_options.rb +191 -0
  448. data/lib/aws/s3/encryption_utils.rb +146 -0
  449. data/lib/aws/s3/errors.rb +94 -0
  450. data/lib/aws/s3/multipart_upload.rb +353 -0
  451. data/lib/aws/s3/multipart_upload_collection.rb +76 -0
  452. data/lib/aws/s3/object_collection.rb +353 -0
  453. data/lib/aws/s3/object_metadata.rb +103 -0
  454. data/lib/aws/s3/object_upload_collection.rb +77 -0
  455. data/lib/aws/s3/object_version.rb +154 -0
  456. data/lib/aws/s3/object_version_collection.rb +89 -0
  457. data/lib/aws/s3/paginated_collection.rb +75 -0
  458. data/lib/aws/s3/policy.rb +74 -0
  459. data/lib/aws/s3/prefix_and_delimiter_collection.rb +47 -0
  460. data/lib/aws/s3/prefixed_collection.rb +85 -0
  461. data/lib/aws/s3/presign_v4.rb +136 -0
  462. data/lib/aws/s3/presigned_post.rb +554 -0
  463. data/lib/aws/s3/request.rb +62 -0
  464. data/lib/aws/s3/s3_object.rb +1784 -0
  465. data/lib/aws/s3/tree.rb +116 -0
  466. data/lib/aws/s3/tree/branch_node.rb +68 -0
  467. data/lib/aws/s3/tree/child_collection.rb +104 -0
  468. data/lib/aws/s3/tree/leaf_node.rb +94 -0
  469. data/lib/aws/s3/tree/node.rb +22 -0
  470. data/lib/aws/s3/tree/parent.rb +87 -0
  471. data/lib/aws/s3/uploaded_part.rb +82 -0
  472. data/lib/aws/s3/uploaded_part_collection.rb +84 -0
  473. data/lib/aws/s3/website_configuration.rb +102 -0
  474. data/lib/aws/simple_db.rb +218 -0
  475. data/lib/aws/simple_db/attribute.rb +156 -0
  476. data/lib/aws/simple_db/attribute_collection.rb +240 -0
  477. data/lib/aws/simple_db/client.rb +67 -0
  478. data/lib/aws/simple_db/config.rb +20 -0
  479. data/lib/aws/simple_db/consistent_read_option.rb +42 -0
  480. data/lib/aws/simple_db/delete_attributes.rb +62 -0
  481. data/lib/aws/simple_db/domain.rb +123 -0
  482. data/lib/aws/simple_db/domain_collection.rb +86 -0
  483. data/lib/aws/simple_db/domain_metadata.rb +110 -0
  484. data/lib/aws/simple_db/errors.rb +55 -0
  485. data/lib/aws/simple_db/expect_condition_option.rb +45 -0
  486. data/lib/aws/simple_db/item.rb +93 -0
  487. data/lib/aws/simple_db/item_collection.rb +654 -0
  488. data/lib/aws/simple_db/item_data.rb +73 -0
  489. data/lib/aws/simple_db/put_attributes.rb +60 -0
  490. data/lib/aws/simple_email_service.rb +443 -0
  491. data/lib/aws/simple_email_service/client.rb +37 -0
  492. data/lib/aws/simple_email_service/config.rb +18 -0
  493. data/lib/aws/simple_email_service/email_address_collection.rb +69 -0
  494. data/lib/aws/simple_email_service/errors.rb +22 -0
  495. data/lib/aws/simple_email_service/identity.rb +230 -0
  496. data/lib/aws/simple_email_service/identity_collection.rb +81 -0
  497. data/lib/aws/simple_email_service/quotas.rb +66 -0
  498. data/lib/aws/simple_workflow.rb +227 -0
  499. data/lib/aws/simple_workflow/activity_task.rb +178 -0
  500. data/lib/aws/simple_workflow/activity_task_collection.rb +123 -0
  501. data/lib/aws/simple_workflow/activity_type.rb +131 -0
  502. data/lib/aws/simple_workflow/activity_type_collection.rb +93 -0
  503. data/lib/aws/simple_workflow/client.rb +69 -0
  504. data/lib/aws/simple_workflow/config.rb +18 -0
  505. data/lib/aws/simple_workflow/count.rb +49 -0
  506. data/lib/aws/simple_workflow/decision_task.rb +603 -0
  507. data/lib/aws/simple_workflow/decision_task_collection.rb +223 -0
  508. data/lib/aws/simple_workflow/domain.rb +122 -0
  509. data/lib/aws/simple_workflow/domain_collection.rb +169 -0
  510. data/lib/aws/simple_workflow/errors.rb +20 -0
  511. data/lib/aws/simple_workflow/history_event.rb +276 -0
  512. data/lib/aws/simple_workflow/history_event_collection.rb +76 -0
  513. data/lib/aws/simple_workflow/option_formatters.rb +82 -0
  514. data/lib/aws/simple_workflow/resource.rb +94 -0
  515. data/lib/aws/simple_workflow/type.rb +89 -0
  516. data/lib/aws/simple_workflow/type_collection.rb +140 -0
  517. data/lib/aws/simple_workflow/workflow_execution.rb +384 -0
  518. data/lib/aws/simple_workflow/workflow_execution_collection.rb +617 -0
  519. data/lib/aws/simple_workflow/workflow_type.rb +177 -0
  520. data/lib/aws/simple_workflow/workflow_type_collection.rb +91 -0
  521. data/lib/aws/sns.rb +76 -0
  522. data/lib/aws/sns/client.rb +35 -0
  523. data/lib/aws/sns/config.rb +18 -0
  524. data/lib/aws/sns/errors.rb +22 -0
  525. data/lib/aws/sns/has_delivery_policy.rb +68 -0
  526. data/lib/aws/sns/message.rb +204 -0
  527. data/lib/aws/sns/originators/from_auto_scaling.rb +68 -0
  528. data/lib/aws/sns/policy.rb +47 -0
  529. data/lib/aws/sns/subscription.rb +165 -0
  530. data/lib/aws/sns/subscription_collection.rb +78 -0
  531. data/lib/aws/sns/topic.rb +403 -0
  532. data/lib/aws/sns/topic_collection.rb +62 -0
  533. data/lib/aws/sns/topic_subscription_collection.rb +54 -0
  534. data/lib/aws/sqs.rb +80 -0
  535. data/lib/aws/sqs/client.rb +53 -0
  536. data/lib/aws/sqs/config.rb +20 -0
  537. data/lib/aws/sqs/errors.rb +125 -0
  538. data/lib/aws/sqs/policy.rb +48 -0
  539. data/lib/aws/sqs/queue.rb +856 -0
  540. data/lib/aws/sqs/queue_collection.rb +186 -0
  541. data/lib/aws/sqs/received_message.rb +190 -0
  542. data/lib/aws/sqs/received_sns_message.rb +116 -0
  543. data/lib/aws/storage_gateway.rb +72 -0
  544. data/lib/aws/storage_gateway/client.rb +42 -0
  545. data/lib/aws/storage_gateway/config.rb +18 -0
  546. data/lib/aws/storage_gateway/errors.rb +22 -0
  547. data/lib/aws/sts.rb +164 -0
  548. data/lib/aws/sts/client.rb +55 -0
  549. data/lib/aws/sts/config.rb +18 -0
  550. data/lib/aws/sts/errors.rb +22 -0
  551. data/lib/aws/sts/federated_session.rb +56 -0
  552. data/lib/aws/sts/policy.rb +30 -0
  553. data/lib/aws/sts/session.rb +48 -0
  554. data/lib/aws/support.rb +29 -0
  555. data/lib/aws/support/client.rb +35 -0
  556. data/lib/aws/support/config.rb +18 -0
  557. data/lib/aws/support/errors.rb +20 -0
  558. data/lib/aws/version.rb +17 -0
  559. data/rails/init.rb +15 -0
  560. metadata +634 -0
@@ -0,0 +1,162 @@
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
+ # Represents a collection of buckets.
18
+ #
19
+ # You can use this to create a bucket:
20
+ #
21
+ # s3.buckets.create("mybucket")
22
+ #
23
+ # You can get a handle for a specific bucket with indifferent
24
+ # access:
25
+ #
26
+ # bucket = s3.buckets[:mybucket]
27
+ # bucket = s3.buckets['mybucket']
28
+ #
29
+ # You can also use it to find out which buckets are in your account:
30
+ #
31
+ # s3.buckets.collect(&:name)
32
+ # #=> ['bucket1', 'bucket2', ...]
33
+ #
34
+ class BucketCollection
35
+
36
+ include Core::Model
37
+ include Enumerable
38
+
39
+ # Creates and returns a new Bucket. For example:
40
+ #
41
+ # @note If your bucket name contains one or more periods and it
42
+ # is hosted in a non-US region, you should make requests
43
+ # against the bucket using the S3 endpoint specific to the
44
+ # region in which your bucket resides. For example:
45
+ #
46
+ # s3 = AWS::S3.new(:region => "eu-west-1")
47
+ # bucket = s3.buckets.create("my.eu.bucket")
48
+ #
49
+ # For a full list of endpoints and regions, see
50
+ # {http://docs.amazonwebservices.com/general/latest/gr/index.html?rande.html
51
+ # Regions and Endpoints} in the Amazon Web Services General
52
+ # Reference.
53
+ #
54
+ # @example
55
+ #
56
+ # bucket = s3.buckets.create('my-bucket')
57
+ # bucket.name #=> "my-bucket"
58
+ # bucket.exists? #=> true
59
+ #
60
+ # @param [String] bucket_name
61
+ #
62
+ # @param [Hash] options
63
+ #
64
+ # @option options [String] :location_constraint (nil) The
65
+ # location where the bucket should be created. Defaults to
66
+ # the classic US region; however, if you configure a regional
67
+ # endpoint for Amazon S3 this option will default to the
68
+ # appropriate location constraint for the endpoint. For
69
+ # example:
70
+ #
71
+ # s3 = AWS::S3.new(:region => "us-west-1")
72
+ # bucket = s3.buckets.create("my-us-west-bucket")
73
+ # bucket.location_constraint # => "us-west-1"
74
+ #
75
+ # @option options [Symbol,String] :acl (:private) Sets the ACL of the
76
+ # bucket you are creating. Valid Values include:
77
+ # * `:private`
78
+ # * `:public_read`
79
+ # * `:public_read_write`
80
+ # * `:authenticated_read`
81
+ # * `:log_delivery_write`
82
+ #
83
+ # @option options [String] :grant_read
84
+ # @option options [String] :grant_write
85
+ # @option options [String] :grant_read_acp
86
+ # @option options [String] :grant_write_acp
87
+ # @option options [String] :grant_full_control
88
+ #
89
+ # @return [Bucket]
90
+ #
91
+ def create bucket_name, options = {}
92
+
93
+ # convert the symbolized-canned acl into the string version
94
+ if acl = options[:acl]
95
+ options[:acl] = acl.to_s.tr('_', '-')
96
+ end
97
+
98
+ # auto set the location constraint for the user if it is not
99
+ # passed in and the endpoint is not the us-standard region. don't
100
+ # override the location constraint though, even it is wrong,
101
+ unless
102
+ config.s3_endpoint == 's3.amazonaws.com' or
103
+ options[:location_constraint]
104
+ then
105
+ constraint = guess_constraint
106
+ options[:location_constraint] = constraint if constraint
107
+ end
108
+
109
+ client.create_bucket(options.merge(:bucket_name => bucket_name))
110
+ bucket_named(bucket_name)
111
+
112
+ end
113
+
114
+ # Returns the Bucket with the given name.
115
+ #
116
+ # Makes no requests. The returned bucket object can
117
+ # be used to make requets for the bucket and its objects.
118
+ #
119
+ # @example
120
+ #
121
+ # bucket = s3.buckets[:mybucket],
122
+ # bucket = s3.buckets['mybucket'],
123
+ #
124
+ # @param [String] bucket_name
125
+ # @return [Bucket]
126
+ def [] bucket_name
127
+ bucket_named(bucket_name)
128
+ end
129
+
130
+ # Iterates the buckets in this collection.
131
+ #
132
+ # @example
133
+ #
134
+ # s3.buckets.each do |bucket|
135
+ # puts bucket.name
136
+ # end
137
+ #
138
+ # @return [nil]
139
+ def each &block
140
+ response = client.list_buckets
141
+ response.buckets.each do |b|
142
+ yield(bucket_named(b.name, response.owner))
143
+ end
144
+ nil
145
+ end
146
+
147
+ private
148
+
149
+ def bucket_named name, owner = nil
150
+ S3::Bucket.new(name.to_s, :owner => owner, :config => config)
151
+ end
152
+
153
+ def guess_constraint
154
+ case config.s3_endpoint
155
+ when 's3-eu-west-1.amazonaws.com' then 'EU'
156
+ when /^s3[.-](.*)\.amazonaws\.com/ then $1
157
+ end
158
+ end
159
+
160
+ end
161
+ end
162
+ end
@@ -0,0 +1,473 @@
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 'nokogiri'
15
+
16
+ module AWS
17
+ class S3
18
+
19
+ # A lifecycle configuration specify {Rule rules} that manage the way
20
+ # Amazon S3 stores objects. The rules apply to objects whose keys match
21
+ # the rule's prefix.
22
+ #
23
+ # ## Rules
24
+ #
25
+ # A rule is comprised primarily of an id, prefix and set of
26
+ # configuration options. Configuration options on the rules can specify:
27
+ #
28
+ # * When to expire an object
29
+ # * When to transition an object to Glacier
30
+ # * Whether the rule is enabled or disabled
31
+ #
32
+ # See {Rule} for more information on all of the attributes and methods
33
+ # available for rules.
34
+ #
35
+ # ## Expiring Objects
36
+ #
37
+ # You can add a rule to a bucket lifecycle configuration using {#add_rule}
38
+ # inside of an {#update} block that will expire an object after a given
39
+ # number of days:
40
+ #
41
+ # # delete backups after they are 1 year old
42
+ # bucket.lifecycle_configuration.update do
43
+ # add_rule('backups/', :expiration_time => 365)
44
+ # end
45
+ #
46
+ # You can also define the rule to expire objects at a specific date:
47
+ #
48
+ # # delete backups on January 1st of next year
49
+ # bucket.lifecycle_configuration.update do
50
+ # date = Date.new(Time.now.year + 1, 01, 01)
51
+ # add_rule('backups/', :expiration_time => date)
52
+ # end
53
+ #
54
+ # ## Transitioning Objects to Glacier
55
+ #
56
+ # You can add a rule to a bucket lifecycle configuration using {#add_rule}
57
+ # inside of an {#update} block that will transition objects to Glacier
58
+ # after a given number of days:
59
+ #
60
+ # # move backups to Glacier after 3 days
61
+ # bucket.lifecycle_configuration.update do
62
+ # add_rule('backups/', :glacier_transition_time => 3)
63
+ # end
64
+ #
65
+ # You can also define the rule to transition objects at a specific date:
66
+ #
67
+ # # transition all backups on January 1st of next year
68
+ # bucket.lifecycle_configuration.update do
69
+ # date = Date.new(Time.now.year + 1, 01, 01)
70
+ # add_rule('backups/', :glacier_transition_time => date)
71
+ # end
72
+ #
73
+ # ## Replacing Rules
74
+ #
75
+ # If you prefer to completely replace a lifecycle configuration, call
76
+ # {#add_rule} inside a {#replace} block instead of an `#update` block:
77
+ #
78
+ # # replace all existing rules with the following
79
+ # bucket.lifecycle_configuration.replace do
80
+ # add_rule('backups/', :glacier_transition_time => 10)
81
+ # add_rule('temp/', :expiration_time => 30)
82
+ # end
83
+ #
84
+ # ## Removing Rules
85
+ #
86
+ # You can delete specific rules with {#remove_rule}.
87
+ #
88
+ # # delete all disabled rules
89
+ # bucket.lifecycle_configuration.update do
90
+ # rules.each do |rule|
91
+ # remove_rule(rule) if rule.disabled?
92
+ # end
93
+ # end
94
+ #
95
+ # You can also remove all rules in a single call with {#clear}:
96
+ #
97
+ # # remove all rules from this lifecycle configuration
98
+ # bucket.lifecycle_configuration.clear
99
+ #
100
+ # ## Editing Existing Rules
101
+ #
102
+ # You can also make changes to existing rules.
103
+ #
104
+ # # change the expiration days to 10 for EVERY rule
105
+ # bucket.lifecycle_configuration.update do
106
+ # rules.each do |rule|
107
+ # rule.expiration_time = 10
108
+ # end
109
+ # end
110
+ #
111
+ # Please be aware, if you add, remove or edit rules outside of an
112
+ # {#update} or {#replace} block, then you must call `#update` yourself
113
+ # or the changes will not be persisted.
114
+ #
115
+ class BucketLifecycleConfiguration
116
+
117
+ # @api private
118
+ def initialize bucket, options = {}
119
+ @bucket = bucket
120
+ @rules = parse_xml(options[:xml]) if options[:xml]
121
+ @rules = [] if options[:empty] == true
122
+ end
123
+
124
+ # @return [Bucket] Returns the bucket this lifecycle configuration
125
+ # belongs to.
126
+ attr_reader :bucket
127
+
128
+ # @return [Array<Hash>] Returns an array of rules.
129
+ def rules
130
+ @rules ||= begin
131
+ begin
132
+ opts = { :bucket_name => bucket.name }
133
+ response = bucket.client.get_bucket_lifecycle_configuration(opts)
134
+ parse_xml(response.http_response.body)
135
+ rescue Errors::NoSuchLifecycleConfiguration
136
+ []
137
+ end
138
+ end
139
+ end
140
+
141
+ # @overload add_rule(prefix, options = {})
142
+ # @param [String] prefix objects whose keys begin with this prefix
143
+ # will be affected by the rule.
144
+ #
145
+ # @option options [String] :id A unique ID for this rule. If an ID
146
+ # is not provided, one will be generated.
147
+ #
148
+ # @option options [Boolean] :disabled (false) By default, all rules
149
+ # will have the status of enabled. You can override this default
150
+ # by passing `:disabled` => true.
151
+ #
152
+ # @option options [Date, Integer] :expiration_time (nil) Indicates
153
+ # the lifetime for objects matching the given prefix.
154
+ #
155
+ # @option options [Date, Integer] :glacier_transition_time (nil)
156
+ # Indicates the time before objects matching the given prefix will
157
+ # be transitioned into the Amazon Glacier storage tier.
158
+ #
159
+ # @return [Rule] Returns the rule that was added, as a {Rule} object.
160
+ def add_rule prefix, expiration_time = nil, options = {}
161
+ if Hash === expiration_time
162
+ options = expiration_time
163
+ else
164
+ options[:expiration_time] = expiration_time
165
+ end
166
+
167
+ id = options[:id] || SecureRandom.uuid
168
+ opts = {
169
+ :status => options[:disabled] == true ? 'Disabled' : 'Enabled',
170
+ :expiration_time => options[:expiration_time],
171
+ :glacier_transition_time => options[:glacier_transition_time],
172
+ :noncurrent_version_transition_days => options[:noncurrent_version_transition_days],
173
+ :noncurrent_version_expiration_days => options[:noncurrent_version_expiration_days]
174
+ }
175
+ rule = Rule.new(self, id, prefix, opts)
176
+ self.rules << rule
177
+ rule
178
+ end
179
+
180
+ # Removes a single rule. You can pass a rule id or a {Rule}
181
+ # object.
182
+ #
183
+ # # remove a single rule by its ID
184
+ # bucket.lifecycle_configuration.update do
185
+ # remove_rule('rule-id')
186
+ # end
187
+ #
188
+ # # remove all disabled rules
189
+ # bucket.lifecycle_configuration.update do
190
+ # rules.each do |rule|
191
+ # remove_rule(rule) if rule.disabled?
192
+ # end
193
+ # end
194
+ #
195
+ # If you call #remove_rule outside an update block
196
+ # you need to call #update to save the changes.
197
+ #
198
+ # @param [Rule,String] rule_or_rule_id
199
+ #
200
+ # @return [nil]
201
+ #
202
+ def remove_rule rule_or_rule_id
203
+ rule_id = rule_or_rule_id
204
+ if rule_id.nil?
205
+ raise ArgumentError, "expected a rule or rule id, got nil"
206
+ end
207
+ rule_id = rule_id.id unless rule_id.is_a?(String)
208
+ @rules = rules.select{|r| r.id != rule_id }
209
+ nil
210
+ end
211
+
212
+ # Saves changes made to this lifecycle configuration.
213
+ #
214
+ # # set the number of days before expiration for all rules to 10
215
+ # config = bucket.lifecycle_configuration
216
+ # config.rules.each do |rule|
217
+ # rule.expiration_time = 10
218
+ # end
219
+ # config.update
220
+ #
221
+ # You can call #update with a block. Changes are persisted at the
222
+ # end of the block.
223
+ #
224
+ # # shorter version of the example above
225
+ # bucket.lifecycle_configuration.update do
226
+ # rules.each {|rule| rule.expiration_time = 10 }
227
+ # end
228
+ #
229
+ # A block method for updating a BucketLifecycleConfiguration.
230
+ # All modifications made inside the block are persisted at the end of
231
+ # the block.
232
+ #
233
+ # # 1 request
234
+ # bucket.lifecycle_configuration.update do
235
+ # add_rule 'prefix/a', 10
236
+ # add_rule 'prefix/b', 5
237
+ # end
238
+ #
239
+ # # 2 requests
240
+ # bucket.lifecycle_configuration.add_rule 'prefix/a', 10
241
+ # bucket.lifecycle_configuration.add_rule 'prefix/b', 5
242
+ #
243
+ # @return [nil]
244
+ #
245
+ def update arg = {}, &block
246
+ begin
247
+ @batching = true
248
+ instance_exec(arg, &block) if block_given?
249
+ persist(true)
250
+ ensure
251
+ @batching = false
252
+ end
253
+ nil
254
+ end
255
+
256
+ # Yields to the given block. Before yielding, the current
257
+ # rules will be blanked out. This allows you to provide all
258
+ # new rules.
259
+ #
260
+ # When the block is complete, a single call will be made to save
261
+ # the new rules.
262
+ #
263
+ # bucket.lifecycle_configuration.rules.size #=> 3
264
+ #
265
+ # # replace the existing 3 rules with a single rule
266
+ # bucket.lifecycle_configuration.replace
267
+ # add_rule 'temp/', 10
268
+ # end
269
+ #
270
+ # bucket.lifecycle_configuration.rules.size #=> 1
271
+ def replace &block
272
+ @rules = []
273
+ update(&block)
274
+ end
275
+
276
+ def clear
277
+ @rules = []
278
+ bucket.lifecycle_configuration = nil
279
+ end
280
+ alias_method :remove, :clear
281
+
282
+ # @return [String] Returns an xml string representation of this
283
+ # bucket lifecycle configuration.
284
+ def to_xml
285
+ Nokogiri::XML::Builder.new do |xml|
286
+ xml.LifecycleConfiguration do
287
+ rules.each do |rule|
288
+ xml.Rule do
289
+ xml.ID rule.id
290
+ xml.Prefix rule.prefix
291
+ xml.Status rule.status
292
+ xml.Expiration do
293
+ if Integer === rule.expiration_time
294
+ xml.Days rule.expiration_time
295
+ else
296
+ date = rule.expiration_time.to_s
297
+ xml.Date "#{date}T00:00:00Z"
298
+ end
299
+ end if rule.expiration_time
300
+ xml.Transition do
301
+ xml.StorageClass 'GLACIER'
302
+ if Integer === rule.glacier_transition_time
303
+ xml.Days rule.glacier_transition_time
304
+ else
305
+ date = rule.glacier_transition_time.to_s
306
+ xml.Date "#{date}T00:00:00Z"
307
+ end
308
+ end if rule.glacier_transition_time
309
+ xml.NoncurrentVersionTransition do
310
+ xml.StorageClass 'GLACIER'
311
+ xml.NoncurrentDays rule.noncurrent_version_transition_days
312
+ end if rule.noncurrent_version_transition_days
313
+ xml.NoncurrentVersionExpiration do
314
+ xml.NoncurrentDays rule.noncurrent_version_expiration_days
315
+ end if rule.noncurrent_version_expiration_days
316
+ end
317
+ end
318
+ end
319
+ end.doc.root.to_xml
320
+ end
321
+
322
+ protected
323
+ def persist force = false
324
+ unless @batching and force == false
325
+ if rules.empty?
326
+ bucket.lifecycle_configuration = nil
327
+ else
328
+ bucket.lifecycle_configuration = self
329
+ end
330
+ end
331
+ end
332
+
333
+ # Represents a single rule from an Amazon S3 bucket lifecycle
334
+ # configuration.
335
+ #
336
+ # # delete all objects with the prefix 'temporary/' after 10 days
337
+ # bucket.lifecycle_configuration.add_rule 'temporary/', 10
338
+ #
339
+ # # remove the rule created above
340
+ # bucket.lifecycle_configuration.remove_rule 'temporary/'
341
+ #
342
+ #
343
+ class Rule
344
+
345
+ # @api private
346
+ def initialize configuration, id, prefix, expiration_time = nil, status = nil
347
+ @configuration = configuration
348
+ @id = id
349
+ @prefix = prefix
350
+
351
+ if Hash === expiration_time
352
+ options = expiration_time
353
+ options.each do |key, value|
354
+ send("#{key}=", value) if respond_to?("#{key}=")
355
+ end
356
+ else
357
+ self.expiration_time = expiration_time
358
+ self.status = status
359
+ end
360
+ end
361
+
362
+ # @return [BucketLifecycleConfiguration]
363
+ attr_reader :configuration
364
+
365
+ # @return [String]
366
+ attr_reader :id
367
+
368
+ # @return [String]
369
+ attr_accessor :prefix
370
+
371
+ # @return [Date] the date the objects will expire
372
+ # @return [Integer] if the value is an integer, returns the number
373
+ # of days before the object will expire.
374
+ attr_reader :expiration_time
375
+
376
+ # Converts any time values to Date objects
377
+ def expiration_time=(value)
378
+ @expiration_time = convert_time_value(value)
379
+ end
380
+
381
+ alias expiration_days expiration_time
382
+ alias expiration_days= expiration_time=
383
+
384
+ # @return [Date] the date the objects will be
385
+ # transitioned into the Amazon Glacier storage tier.
386
+ # @return [Integer] if the value is an integer, returns the number
387
+ # of days before the object is transitioned into the Amazon Glacier
388
+ # storage tier.
389
+ attr_reader :glacier_transition_time
390
+
391
+ # Converts any time values to Date objects
392
+ def glacier_transition_time=(value)
393
+ @glacier_transition_time = convert_time_value(value)
394
+ end
395
+
396
+ # @return [Integer]
397
+ attr_accessor :noncurrent_version_transition_days
398
+
399
+ # @return [Integer]
400
+ attr_accessor :noncurrent_version_expiration_days
401
+
402
+ # @return [String] Returns the rule status, 'Enabled' or 'Disabled'
403
+ attr_accessor :status
404
+
405
+ def enabled?
406
+ status == 'Enabled'
407
+ end
408
+
409
+ def enable!
410
+ self.status = 'Enabled'
411
+ end
412
+
413
+ def disabled?
414
+ status == 'Disabled'
415
+ end
416
+
417
+ def disabled!
418
+ self.status = 'Disabled'
419
+ end
420
+
421
+ # @api private
422
+ def eql? other
423
+ other.is_a?(Rule) and
424
+ other.configuration.bucket == configuration.bucket and
425
+ other.id == id and
426
+ other.prefix == prefix and
427
+ other.expiration_time == expiration_time and
428
+ other.glacier_transition_time == glacier_transition_time and
429
+ other.status == status and
430
+ other.noncurrent_version_transition_days == noncurrent_version_transition_days and
431
+ other.noncurrent_version_expiration_days == noncurrent_version_expiration_days
432
+ end
433
+ alias_method :==, :eql?
434
+
435
+ private
436
+
437
+ # If an integer, returns the integer as days, otherwise
438
+ # converts any time-like values into Date objects
439
+ # @return [Integer] if the value is an integer
440
+ # @return [Date] if the value is a time-like object
441
+ # @return [nil] if the value is nil
442
+ def convert_time_value(value)
443
+ return nil if value.nil?
444
+ return value if value.is_a?(Integer)
445
+ Date.parse(value.to_s)
446
+ end
447
+
448
+ end
449
+
450
+ protected
451
+
452
+ def parse_xml xml
453
+ Client::XML::GetBucketLifecycleConfiguration.parse(xml).rules.map do |r|
454
+ opts = { :status => r[:status] }
455
+
456
+ if r[:expiration]
457
+ opts[:expiration_time] =
458
+ r[:expiration][:days] || r[:expiration][:date]
459
+ end
460
+
461
+ if r[:transition]
462
+ opts[:glacier_transition_time] =
463
+ r[:transition][:days] || r[:transition][:date]
464
+ end
465
+
466
+ Rule.new(self, r[:id], r[:prefix], opts)
467
+ end
468
+ end
469
+
470
+ end
471
+
472
+ end
473
+ end