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,18 @@
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
+ AWS::Core::Configuration.module_eval do
15
+
16
+ add_service 'SNS', 'sns', 'sns.us-east-1.amazonaws.com'
17
+
18
+ end
@@ -0,0 +1,22 @@
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 SNS
16
+ module Errors
17
+
18
+ extend Core::LazyErrorClasses
19
+
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,68 @@
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 SNS
16
+
17
+ # A module shared between {Topic} and {Subscription}. Provides methods
18
+ # for getting and setting the delivery policy and for getting the
19
+ # effective delivery policy.
20
+ module HasDeliveryPolicy
21
+
22
+ # @return [nil,Hash] Returns the delivery policy.
23
+ def delivery_policy
24
+ parse_delivery_policy(delivery_policy_json)
25
+ end
26
+
27
+ # @return [Hash] Returns the effective delivery policy.
28
+ def effective_delivery_policy
29
+ parse_delivery_policy(effective_delivery_policy_json)
30
+ end
31
+
32
+ # @param [nil,Hash,String<JSON>] policy A delivery policy. You can
33
+ # pass a JSON string, A policy hash or nil.
34
+ def delivery_policy= policy
35
+
36
+ policy_json = case policy
37
+ when nil then ''
38
+ when String then policy
39
+ else policy.to_json
40
+ end
41
+
42
+ update_delivery_policy(policy_json)
43
+
44
+ end
45
+
46
+ # @return [nil,String] Returns the delivery policy JSON string.
47
+ def delivery_policy_json
48
+ raise NotImplementedError
49
+ end
50
+
51
+ # @return [String] Returns the effective delivery policy JSON string.
52
+ def effective_delivery_policy_json
53
+ raise NotImplementedError
54
+ end
55
+
56
+ protected
57
+ def parse_delivery_policy policy_json
58
+ policy_json.nil? ? nil : JSON.parse(policy_json)
59
+ end
60
+
61
+ protected
62
+ def update_delivery_policy policy_json
63
+ raise NotImplementedError
64
+ end
65
+
66
+ end
67
+ end
68
+ end
@@ -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 SNS
16
+
17
+ # (see Core::Policy)
18
+ class Policy < Core::Policy
19
+
20
+ class Statement < Core::Policy::Statement
21
+
22
+ ACTION_MAPPING = {
23
+ :add_permission => 'sns:AddPermission',
24
+ :delete_topic => 'sns:DeleteTopic',
25
+ :get_topic_attributes => 'sns:GetTopicAttributes',
26
+ :list_subscriptions_by_topic => 'sns:ListSubscriptionsByTopic',
27
+ :publish => 'sns:Publish',
28
+ :receive => 'sns:Receive',
29
+ :remove_permission => 'sns:RemovePermission',
30
+ :set_topic_attributes => 'sns:SetTopicAttributes',
31
+ :subscribe => 'sns:Subscribe',
32
+ }
33
+
34
+ protected
35
+ def resource_arn resource
36
+ case resource
37
+ when Topic then resource.arn
38
+ #when Subscription then resource.arn
39
+ else super(resource)
40
+ end
41
+ end
42
+
43
+ end
44
+
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,23 @@
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 SNS
16
+
17
+ # @private
18
+ class Request < Core::Http::Request
19
+ include Core::Signature::Version2
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,144 @@
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 SNS
16
+
17
+ # Represents a subscription of a single endpoint to an SNS topic.
18
+ # To create a subscription, use the {Topic#subscribe} method.
19
+ # Depending on the endpoint type, you may also need to use
20
+ # {Topic#confirm_subscription}.
21
+ class Subscription
22
+
23
+ include Core::Model
24
+ include HasDeliveryPolicy
25
+
26
+ # @private
27
+ def initialize(arn, opts = {})
28
+ @arn = arn
29
+ @topic_arn = opts[:topic_arn]
30
+ @endpoint = opts[:endpoint]
31
+ @protocol = opts[:protocol]
32
+ @owner_id = opts[:owner_id]
33
+ super
34
+ end
35
+
36
+ # @return [String] The ARN of the subscription.
37
+ attr_reader :arn
38
+
39
+ # @return [String] The endpoint. This can be an HTTP or HTTPS
40
+ # URL, an e-mail address, or a queue ARN.
41
+ attr_reader :endpoint
42
+
43
+ # @return [String] The protocol. Possible values:
44
+ #
45
+ # * +:http+
46
+ # * +:https+
47
+ # * +:email+
48
+ # * +:email_json+
49
+ # * +:sqs+
50
+ attr_reader :protocol
51
+
52
+ # @return [String] The AWS account ID of the subscription owner.
53
+ def owner_id
54
+ @owner_id ||= get_attributes['Owner']
55
+ end
56
+
57
+ # @return [String]
58
+ def topic_arn
59
+ @topic_arn ||= get_attributes['TopicArn']
60
+ end
61
+
62
+ # @return [Topic]
63
+ def topic
64
+ Topic.new(topic_arn, :config => config)
65
+ end
66
+
67
+ # Deletes this subscription.
68
+ # @return [nil]
69
+ def unsubscribe
70
+ client.unsubscribe(:subscription_arn => arn)
71
+ nil
72
+ end
73
+
74
+ # @return [Boolean] Returns true if the subscription confirmation
75
+ # request was authenticated.
76
+ def confirmation_authenticated?
77
+
78
+ return true if @authenticated
79
+
80
+ if authenticated = get_attributes['ConfirmationWasAuthenticated']
81
+ @authenticated = true
82
+ else
83
+ false
84
+ end
85
+
86
+ end
87
+
88
+ # You can get the parsed JSON hash from {#delivery_policy}.
89
+ # @return [nil,String] Returns the delivery policy JSON string.
90
+ def delivery_policy_json
91
+ get_attributes['DeliveryPolicy']
92
+ end
93
+
94
+ # You can get the parsed JSON hash from {#effective_delivery_policy}.
95
+ # @return [nil,String] Returns the effective delivery policy JSON string.
96
+ def effective_delivery_policy_json
97
+ get_attributes['EffectiveDeliveryPolicy']
98
+ end
99
+
100
+ # @note This method requests the entire list of subscriptions
101
+ # for the topic (if known) or the account (if the topic is not
102
+ # known). It can be expensive if the number of subscriptions
103
+ # is high.
104
+ #
105
+ # @return [Boolean] Returns true if the subscription exists.
106
+ def exists?
107
+ begin
108
+ get_attributes
109
+ true
110
+ rescue Errors::NotFound, Errors::InvalidParameter
111
+ false
112
+ end
113
+ end
114
+
115
+ # @private
116
+ def inspect
117
+ "<#{self.class} arn:#{arn}>"
118
+ end
119
+
120
+ # @return [Boolean] Returns true if the subscriptions have the same
121
+ # resource ARN.
122
+ def eql? other
123
+ other.kind_of?(Subscription) and other.arn == arn
124
+ end
125
+ alias_method :==, :eql?
126
+
127
+ protected
128
+ def update_delivery_policy policy_json
129
+ client_opts = {}
130
+ client_opts[:subscription_arn] = arn
131
+ client_opts[:attribute_name] = 'DeliveryPolicy'
132
+ client_opts[:attribute_value] = policy_json
133
+ client.set_subscription_attributes(client_opts)
134
+ end
135
+
136
+ protected
137
+ def get_attributes
138
+ client.get_subscription_attributes(:subscription_arn => arn).attributes
139
+ end
140
+
141
+ end
142
+
143
+ end
144
+ end
@@ -0,0 +1,78 @@
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 SNS
16
+
17
+ # Represents the collection of all subscriptions for the AWS
18
+ # account. For example:
19
+ #
20
+ # # get the ARNs of all SQS queues with subscriptions to topics
21
+ # # owned by this account
22
+ # topic.subscriptions.
23
+ # select { |s| s.protocol == :sqs }.
24
+ # collect(&:endpoint)
25
+ #
26
+ class SubscriptionCollection
27
+
28
+ include Core::Collection::WithNextToken
29
+
30
+ # Returns a subscription with the given ARN. This does not make
31
+ # a request to AWS.
32
+ # @param [String] arn The subscription ARN.
33
+ # @return [Subscription]
34
+ def [] arn
35
+ Subscription.new(arn, :config => config)
36
+ end
37
+
38
+ protected
39
+
40
+ # Yield each subscription belonging to this account.
41
+ # @yieldparam [Subscription] subscription Each of the
42
+ # subscriptions in the account.
43
+ # @return [nil]
44
+ def _each_item next_token, options, &block
45
+
46
+ options[:next_token] = next_token if next_token
47
+
48
+ resp = client.send(client_method, options.merge(request_options))
49
+ resp.data[:subscriptions].each do |sub|
50
+
51
+ subscription = Subscription.new(
52
+ sub[:subscription_arn],
53
+ :endpoint => sub[:endpoint],
54
+ :protocol => sub[:protocol].tr('-','_').to_sym,
55
+ :owner_id => sub[:owner],
56
+ :topic_arn => sub[:topic_arn],
57
+ :config => config)
58
+
59
+ yield(subscription)
60
+
61
+ end
62
+
63
+ resp.data[:next_token]
64
+
65
+ end
66
+
67
+ def client_method
68
+ :list_subscriptions
69
+ end
70
+
71
+ def request_options
72
+ {}
73
+ end
74
+
75
+ end
76
+
77
+ end
78
+ end
@@ -0,0 +1,403 @@
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 'json'
15
+
16
+ module AWS
17
+ class SNS
18
+
19
+ class Topic
20
+
21
+ include Core::Model
22
+ include HasDeliveryPolicy
23
+
24
+ # @param [String] arn The topic ARN.
25
+ def initialize arn, options = {}
26
+ @arn = arn
27
+ super
28
+ end
29
+
30
+ # @return [String] The topic ARN.
31
+ attr_reader :arn
32
+
33
+ # The topic name.
34
+ #
35
+ # If you have not set a display name (see {#display_name=}) then
36
+ # this is used as the "From" field for notifications to email and
37
+ # email-json endpoints.
38
+ # @return [String] Returns the toipc name.
39
+ def name
40
+ arn.split(/:/)[-1]
41
+ end
42
+
43
+ # Causes the given +endpoint+ to receive messages published to this
44
+ # topic.
45
+ #
46
+ # == Subscribing to SQS Queues
47
+ #
48
+ # If you subscribe to an SQS queue (with a {SQS::Queue} object}
49
+ # then a policy will be added/updated to the queue that will
50
+ # permit this topic to send it messages. Some important notes:
51
+ #
52
+ # * If you subscribe with a queue by ARN then you must change the
53
+ # policy yourself.
54
+ #
55
+ # * If you do not want the policy modified then pass +:update_policy+
56
+ # as false or just pass the queue's arn
57
+ #
58
+ # topic.subscribe(queue.arn)
59
+ # topic.subscribe(queue, :update_policy => false)
60
+ #
61
+ # @example Using a url string to set the endpoint (http and https)
62
+ #
63
+ # topic.subscribe('http://example.com/messages')
64
+ # topic.subscribe('https://example.com/messages')
65
+ #
66
+ # @example Using a uri object to set the endpoint (http and https)
67
+ #
68
+ # topic.subscribe(URI.parse('http://example.com/messages'))
69
+ # topic.subscribe(URI.parse('https://example.com/messages'))
70
+ #
71
+ # @example Email address as endpoint
72
+ #
73
+ # topic.subscribe('nobody@example.com')
74
+ #
75
+ # @example Email address as a JSON endpoint
76
+ #
77
+ # # send messages encoded as json object to the given email address
78
+ # topic.subscribe('nobody@example.com', :json => true)
79
+ #
80
+ # @example SQS Queue (by arn)
81
+ #
82
+ # # you must manage the queue policy yourself to allow the
83
+ # # the topic to send messages (policy action 'sqs:SendMessage')
84
+ # topic.subscribe('arn:aws:sqs:us-east-1:123456789123:AQueue')
85
+ #
86
+ # @example SQS Queue (by Queue object)
87
+ #
88
+ # # the queue policy will be added/updated to allow the topic
89
+ # # to send it messages
90
+ # topic.subscribe(AWS::SQS.new.queues.first)
91
+ #
92
+ # @param [mixed] endpoint The endpoint that should receive
93
+ # messages that are published to this topic. Valid values
94
+ # for +endpoint+ include:
95
+ #
96
+ # * URI object
97
+ # * http and https URI strings
98
+ # * email address
99
+ # * {SQS::Queue}
100
+ # * SQS queue ARN
101
+ # * phone number of an SMS-enabled device
102
+ #
103
+ # @param [Hash] options
104
+ # @option options [Boolean] :json (false)
105
+ # @return [Subscription,nil] Returns a subscription when possible.
106
+ # If the subscription requires confirmation first, then +nil+ is
107
+ # returned instead.
108
+ def subscribe endpoint, options = {}
109
+ subscribe_opts = endpoint_opts(endpoint, options).merge(:topic_arn => arn)
110
+ resp = client.subscribe(subscribe_opts)
111
+ if arn = resp[:subscription_arn] and arn =~ /^arn:/
112
+ Subscription.new(arn, :config => config)
113
+ else
114
+ nil
115
+ end
116
+ end
117
+
118
+ # Verifies an endpoint owner's intent to receive messages by
119
+ # validating the token sent to the endpoint by an earlier
120
+ # Subscribe action. If the token is valid, the action creates a
121
+ # new subscription.
122
+ #
123
+ # @param [String] token Short-lived token sent to an endpoint
124
+ # during the {#subscribe} action.
125
+ #
126
+ # @param [Hash] options Additional options for confirming the
127
+ # subscription.
128
+ #
129
+ # @option options [Boolean] :authenticate_on_unsubscribe
130
+ # Indicates that you want to disable unauthenticated
131
+ # unsubsciption of the subscription.
132
+ #
133
+ # @return [Subscription] The newly created subscription.
134
+ #
135
+ def confirm_subscription token, options = {}
136
+
137
+ options[:authenticate_on_unsubscribe] = 'true' if
138
+ options[:authenticate_on_unsubscribe]
139
+
140
+ confirm_opts = options.merge(:token => token, :topic_arn => arn)
141
+ resp = client.confirm_subscription(confirm_opts)
142
+ Subscription.new(
143
+ resp[:subscription_arn],
144
+ :topic_arn => arn,
145
+ :config => config)
146
+
147
+ end
148
+
149
+ # @return [TopicSubscriptionCollection] Returns a collection that
150
+ # represents all of the subscriptions for this topic.
151
+ def subscriptions
152
+ TopicSubscriptionCollection.new(self)
153
+ end
154
+
155
+ # @return [String] Returns the human-readable name used in
156
+ # the "From" field for notifications to email and email-json
157
+ # endpoints. If you have not set the display name the topic
158
+ # {#name} will be used/returned instead.
159
+ def display_name
160
+ to_h[:display_name]
161
+ end
162
+
163
+ # @param [String] display_name Sets the human-readable name used in
164
+ # the "From" field for notifications to email and email-json
165
+ # endpoints.
166
+ # @return [String] Returns the display_name as passed.
167
+ def display_name= display_name
168
+ set_attribute('DisplayName', display_name)
169
+ display_name
170
+ end
171
+
172
+ # @return [String] The topic owner's ID.
173
+ def owner
174
+ to_h[:owner]
175
+ end
176
+
177
+ # @return [Integer] Returns number of confirmed topic subscriptions.
178
+ def num_subscriptions_confirmed
179
+ to_h[:num_subscriptions_confirmed]
180
+ end
181
+
182
+ # @return [Integer] Returns number of pending topic subscriptions.
183
+ def num_subscriptions_pending
184
+ to_h[:num_subscriptions_pending]
185
+ end
186
+
187
+ # @return [Integer] Returns number of deleted topic subscriptions.
188
+ def num_subscriptions_deleted
189
+ to_h[:num_subscriptions_deleted]
190
+ end
191
+
192
+ # @return [Policy] The topic's {Policy}.
193
+ def policy
194
+ to_h[:policy]
195
+ end
196
+
197
+ # Sets the topic's policy.
198
+ # @param [String,Policy] policy A JSON policy string, a {Policy} object
199
+ # or any other object that responds to #to_json with a valid
200
+ # policy.
201
+ # @return [nil]
202
+ def policy= policy
203
+ policy_json = policy.is_a?(String) ? policy : policy.to_json
204
+ set_attribute('Policy', policy_json)
205
+ nil
206
+ end
207
+
208
+ # @return [nil,String<JSON>] The delivery policy JSON string.
209
+ def delivery_policy_json
210
+ to_h[:delivery_policy_json]
211
+ end
212
+
213
+ # @return [String<JSON>] The effective delivery policy JSON string.
214
+ # into account system defaults.
215
+ def effective_delivery_policy_json
216
+ to_h[:effective_delivery_policy_json]
217
+ end
218
+
219
+ # Publishes a message to this SNS topic.
220
+ #
221
+ # topic.publish('a short message')
222
+ #
223
+ # You can pass a subject that is used when sending the message to
224
+ # email endpoints:
225
+ #
226
+ # topic.publish('message', :subject => 'SNS message subject')
227
+ #
228
+ # If you would like to pass a different message to various protocols
229
+ # (endpoint types) you can pass those as options:
230
+ #
231
+ # topic.publish('default message',
232
+ # :http => "message sent to http endpoints",
233
+ # :https => "message sent to https endpoints",
234
+ # :email => "message sent to email endpoints")
235
+ #
236
+ # The full list of acceptable protocols are listed below. The default
237
+ # message is sent to endpoints who's protocol was not listed.
238
+ #
239
+ # @param [String] default_message The message you want to send to the
240
+ # topic. Messages must be UTF-8 encoded strings at most 8 KB in size
241
+ # (8192 bytes, not 8192 characters).
242
+ # @param [Hash] options
243
+ # @option options [String] :subject Used as the "Subject" line when
244
+ # the message is delivered to email endpoints. Will also be
245
+ # included in the standard JSON messages delivered to other endpoints.
246
+ # * must be ASCII text that begins with a letter, number or
247
+ # punctuation mark
248
+ # * must not include line breaks or control characters
249
+ # * and must be less than 100 characters long
250
+ # @option options [String] :http - Message to use when sending to an
251
+ # HTTP endpoint.
252
+ # @option options [String] :https - Message to use when sending to an
253
+ # HTTPS endpoint.
254
+ # @option options [String] :email - Message to use when sending to an
255
+ # email endpoint.
256
+ # @option options [String] :email_json - Message to use when sending
257
+ # to an email json endpoint.
258
+ # @option options [String] :sqs - Message to use when sending to an
259
+ # SQS endpoint.
260
+ # @return [String] Returns the ID of the message that was sent.
261
+ def publish default_message, options = {}
262
+
263
+ message = { :default => default_message }
264
+
265
+ [:http, :https, :email, :email_json, :sqs].each do |protocol|
266
+ if options[protocol]
267
+ message[protocol.to_s.gsub(/_/, '-')] = options[protocol]
268
+ end
269
+ end
270
+
271
+ publish_opts = {}
272
+ publish_opts[:message] = message.to_json
273
+ publish_opts[:message_structure] = 'json'
274
+ publish_opts[:subject] = options[:subject] if options[:subject]
275
+ publish_opts[:topic_arn] = arn
276
+
277
+ response = client.publish(publish_opts)
278
+
279
+ response[:message_id]
280
+
281
+ end
282
+
283
+ # Deletes the topic.
284
+ # @return [nil]
285
+ def delete
286
+ client.delete_topic(:topic_arn => arn)
287
+ nil
288
+ end
289
+
290
+ # @return [Hash] Returns a hash of attributes about this topic,
291
+ # including:
292
+ #
293
+ # * +:arn+
294
+ # * +:name+
295
+ # * +:owner+
296
+ # * +:display_name+
297
+ # * +:policy+
298
+ # * +:num_subscriptions_confirmed+
299
+ # * +:num_subscriptions_pending+
300
+ # * +:num_subscriptions_deleted+
301
+ #
302
+ def to_h
303
+ attributes = client.get_topic_attributes(:topic_arn => arn).attributes
304
+ {
305
+ :arn => arn,
306
+ :name => name,
307
+ :owner => attributes['Owner'],
308
+ :display_name => attributes['DisplayName'] || name,
309
+ :policy => parse_policy(attributes['Policy']),
310
+ :num_subscriptions_confirmed => attributes['SubscriptionsConfirmed'].to_i,
311
+ :num_subscriptions_pending => attributes['SubscriptionsPending'].to_i,
312
+ :num_subscriptions_deleted => attributes['SubscriptionsDeleted'].to_i,
313
+ :delivery_policy_json => attributes['DeliveryPolicy'],
314
+ :effective_delivery_policy_json => attributes['EffectiveDeliveryPolicy'],
315
+ }
316
+ end
317
+
318
+ # @return [Boolean] Returns true if compared to another {Topic}
319
+ # with the same ARN.
320
+ def eql? other
321
+ other.kind_of?(Topic) and other.arn == arn
322
+ end
323
+ alias_method :==, :eql?
324
+
325
+ protected
326
+ def update_delivery_policy policy_json
327
+ set_attribute('DeliveryPolicy', policy_json)
328
+ end
329
+
330
+ protected
331
+ def parse_policy policy_json
332
+ if policy_json
333
+ policy = SNS::Policy.from_json(policy_json)
334
+ policy.extend(PolicyProxy)
335
+ policy.topic = self
336
+ policy
337
+ else
338
+ nil
339
+ end
340
+ end
341
+
342
+ # @private
343
+ protected
344
+ def set_attribute name, value
345
+ client.send(:set_topic_attributes, {
346
+ :topic_arn => arn,
347
+ :attribute_name => name,
348
+ :attribute_value => value,
349
+ })
350
+ end
351
+
352
+ # @private
353
+ module PolicyProxy
354
+ attr_accessor :topic
355
+ def change
356
+ yield(self)
357
+ topic.policy = self
358
+ end
359
+ end
360
+
361
+ # @private
362
+ protected
363
+ def endpoint_opts(endpoint, opts = {})
364
+
365
+ case
366
+ when endpoint.is_a?(SQS::Queue)
367
+
368
+ # auto add a policy to the queue to allow the topic
369
+ # to send the queue messages
370
+ unless opts[:update_policy] == false
371
+ policy = endpoint.policy || SQS::Policy.new
372
+ policy.allow(
373
+ :principal => :any,
374
+ :actions => [:send_message],
375
+ :resources => [endpoint]
376
+ ).where(:source_arn).is(arn)
377
+ endpoint.policy = policy
378
+ end
379
+
380
+ { :protocol => 'sqs', :endpoint => endpoint.arn }
381
+
382
+ when endpoint =~ /^arn:/
383
+ raise ArgumentError, "expected a queue ARN" unless
384
+ endpoint =~ /^arn:aws:sqs:/
385
+ { :protocol => "sqs", :endpoint => endpoint }
386
+ when endpoint.kind_of?(URI)
387
+ { :protocol => endpoint.scheme,
388
+ :endpoint => endpoint.to_s }
389
+ when endpoint =~ /^(https?):/
390
+ { :protocol => $1, :endpoint => endpoint }
391
+ when endpoint.include?("@")
392
+ { :protocol => opts[:json] ? "email-json" : "email",
393
+ :endpoint => endpoint }
394
+ when endpoint.gsub(/\D/,'') =~ /\d{11,15}/
395
+ { :protocol => "sms", :endpoint => endpoint.gsub(/\D/,'') }
396
+ else
397
+ raise ArgumentError, "could not determine protocol for '#{endpoint}'"
398
+ end
399
+ end
400
+
401
+ end
402
+ end
403
+ end