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,31 @@
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 DynamoDB
16
+
17
+ class ItemData
18
+
19
+ attr_reader :item
20
+
21
+ attr_reader :attributes
22
+
23
+ def initialize(opts = {})
24
+ @item = opts[:item]
25
+ @attributes = opts[:attributes]
26
+ end
27
+
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,41 @@
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 DynamoDB
16
+
17
+ # @private
18
+ module Keys
19
+
20
+ include Types
21
+
22
+ # @return [Hash] Client options for identifying an item.
23
+ def item_key_options(item, extra = {})
24
+ key = item_key_hash(item)
25
+ extra.merge({ :table_name => item.table.name, :key => key })
26
+ end
27
+
28
+ # @return [Hash] Returns just the hash key element and range key element
29
+ def item_key_hash item
30
+ item.table.assert_schema!
31
+ key = {}
32
+ key[:hash_key_element] = format_attribute_value(item.hash_value)
33
+ key[:range_key_element] = format_attribute_value(item.range_value) if
34
+ item.table.composite_key?
35
+ key
36
+ end
37
+
38
+ end
39
+
40
+ end
41
+ end
@@ -0,0 +1,48 @@
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 DynamoDB
16
+ class PrimaryKeyElement
17
+
18
+ attr_reader :name
19
+
20
+ attr_reader :type
21
+
22
+ ATTRIBUTE_TYPES = {
23
+ "S" => :string,
24
+ "N" => :number,
25
+ "B" => :binary,
26
+ }
27
+
28
+ def initialize(hash)
29
+ @name = hash[:name] || hash["AttributeName"]
30
+ @type = hash[:type] || ATTRIBUTE_TYPES[hash["AttributeType"]]
31
+ end
32
+
33
+ def self.from_description(description)
34
+ (name, type, *extra) = description.to_a.flatten
35
+
36
+ raise(ArgumentError,
37
+ "key element may contain only one name/type pair") unless
38
+ extra.empty?
39
+
40
+ raise ArgumentError, "unsupported type #{type.inspect}" unless
41
+ ATTRIBUTE_TYPES.values.include?(type.to_sym)
42
+
43
+ new(:name => name.to_s, :type => type)
44
+ end
45
+
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,26 @@
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 DynamoDB
16
+ # @private
17
+ class Request < Core::Http::Request
18
+ include Core::Signature::Version4
19
+
20
+ def service
21
+ 'dynamodb'
22
+ end
23
+
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,33 @@
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 DynamoDB
16
+ class Resource < Core::Resource
17
+
18
+ # @private
19
+ def self.attribute name, options = {}
20
+
21
+ # DynamoDB attributes are all returned in UpperCamelCase, this
22
+ # converts the :snake_case name into the correct format.
23
+ unless options[:from]
24
+ options[:from] = name.to_s.split(/_/).map(&:capitalize).join
25
+ end
26
+
27
+ super(name, options)
28
+
29
+ end
30
+
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,491 @@
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 DynamoDB
16
+
17
+ # Represents a DynamoDB table.
18
+ #
19
+ # == Working with Tables
20
+ #
21
+ # Dynamo DB allows you to organize data into tables. Tables have a
22
+ # unique name and a key schema. A key schema is comprised of a
23
+ # hash key and an optional range key.
24
+ #
25
+ # Dynamo DB automatically partitions the data contained in a table
26
+ # across multiple nodes so that the data throughput is not constrained
27
+ # by the scale of a single box. You can reserve the required throughput
28
+ # by specifying a number of reads and writes per second to support.
29
+ #
30
+ # == Creating a Table
31
+ #
32
+ # To get started you can create a table by supplying a name
33
+ # and the read/write capacity. A default schema with a hash_key
34
+ # of :id => :string will be provided.
35
+ #
36
+ # dynamo_db = AWS::DynamoDB.new
37
+ # dynamo_db.tables.create('mytable', 10, 5)
38
+ #
39
+ # You can provide your own hash key and optional range key.
40
+ #
41
+ # dynamo_db.tables.create('comments', 10, 5,
42
+ # :hash_key => { :blog_post_id => :number },
43
+ # :range_key => { :comment_id => :number }
44
+ # )
45
+ #
46
+ # == Provisioning Throughput
47
+ #
48
+ # You must specify the desired read and write capacity when
49
+ # creating a table. After a table is created you can see what has
50
+ # been provisioned.
51
+ #
52
+ # table.read_capacity_units #=> 10
53
+ # table.write_capacity_units #=> 5
54
+ #
55
+ # To change these values, call {#provision_throughput}:
56
+ #
57
+ # table.provision_throughput :read_capacity_units => 100, :write_capacity_units => 100
58
+ #
59
+ # Please note that provisioned throughput can be decreased only once
60
+ # within a 24 hour period.
61
+ #
62
+ # == Table Status
63
+ #
64
+ # When you create or update a table the changes can take some time to
65
+ # apply. You can query the status of your table at any time:
66
+ #
67
+ # # creating a table can be a *very* slow operation
68
+ # table = dynamo_db.tables.create('mytable')
69
+ # sleep 1 while table.status == :creating
70
+ # table.status #=> :active
71
+ #
72
+ # @attr_reader [Time] created_at When the table was first creatd.
73
+ #
74
+ # @attr_reader [Symbol] status
75
+ #
76
+ # @attr [Integer] read_capacity_units
77
+ #
78
+ # @attr [Integer] write_capacity_units
79
+ #
80
+ # @attr [Time] throughput_last_increased_at
81
+ #
82
+ # @attr [Time] throughput_last_decreased_at
83
+ #
84
+ # @attr [PrimaryKeyElement] hash_key Returns the hash key element
85
+ # for this table.
86
+ #
87
+ # @attr [PrimaryKeyElement,nil] range_key Returns the range key
88
+ # element for this table, or nil if the table does not have a range
89
+ # key.
90
+ #
91
+ class Table < Resource
92
+
93
+ # @private
94
+ def initialize name, options = {}
95
+ @name = name
96
+ super
97
+ end
98
+
99
+ # @return [String] The name of this table.
100
+ attr_reader :name
101
+
102
+ attribute :creation_date_time, :static => true
103
+
104
+ alias_method :created_at, :creation_date_time
105
+
106
+ attribute :status, :from => 'TableStatus', :to_sym => true
107
+
108
+ attribute :throughput_last_increased_at, :from => 'LastIncreaseDateTime'
109
+
110
+ attribute :throughput_last_decreased_at, :from => 'LastDecreaseDateTime'
111
+
112
+ attribute :read_capacity_units
113
+
114
+ attribute :write_capacity_units
115
+
116
+ attribute :hash_key, :from => "HashKeyElement", :static => true do
117
+ translates_output {|v| PrimaryKeyElement.new(v) }
118
+ end
119
+
120
+ attribute :range_key, :from => "RangeKeyElement", :static => true do
121
+ translates_output {|v| PrimaryKeyElement.new(v) }
122
+ end
123
+ alias_method :range_key_without_schema_override, :range_key
124
+
125
+ populates_from :describe_table do |resp|
126
+ desc = resp.data['Table']
127
+ if desc['TableName'] == name
128
+ desc.
129
+ merge(desc['ProvisionedThroughput']).
130
+ merge(desc['KeySchema'] || {})
131
+ end
132
+ end
133
+
134
+ populates_from :create_table, :delete_table do |resp|
135
+ desc = resp.data['TableDescription']
136
+ if desc['TableName'] == name
137
+ desc.
138
+ merge(desc['ProvisionedThroughput']).
139
+ merge(desc['KeySchema'] || {})
140
+ end
141
+ end
142
+
143
+ # @return [PrimaryKeyElement]
144
+ def range_key
145
+ if schema_loaded?
146
+ static_attributes[:range_key]
147
+ else
148
+ range_key_without_schema_override
149
+ end
150
+ end
151
+
152
+ # @param [Hash] options
153
+ #
154
+ # @option options [Integer] :read_capacity_units
155
+ #
156
+ # @option options [Integer] :write_capacity_units
157
+ #
158
+ # @return [Hash] Returns a hash with the current throughput
159
+ # provisioning (+:read_capacity_units+ and +:write_capacity_units+).
160
+ #
161
+ def provision_throughput options = {}
162
+
163
+ options[:read_capacity_units] ||= read_capacity_units
164
+ options[:write_capacity_units] ||= write_capacity_units
165
+
166
+ client_opts = {}
167
+ client_opts[:table_name] = name
168
+ client_opts[:provisioned_throughput] = options
169
+ client.update_table(client_opts)
170
+
171
+ options
172
+
173
+ end
174
+
175
+ # @param [Integer] read_capacity_units
176
+ def read_capacity_units= read_capacity_units
177
+ provision_throughput(:read_capacity_units => read_capacity_units)
178
+ end
179
+
180
+ # @param [Integer] write_capacity_units
181
+ def write_capacity_units= write_capacity_units
182
+ provision_throughput(:write_capacity_units => write_capacity_units)
183
+ end
184
+
185
+ # @return [Boolean] Returns true if the table has a hash key and no
186
+ # range key.
187
+ def simple_key?
188
+ range_key.nil?
189
+ end
190
+
191
+ # @return [Boolean] Returns true if the table has both a hash key and
192
+ # a range key.
193
+ def composite_key?
194
+ !simple_key?
195
+ end
196
+ alias_method :has_range_key?, :composite_key?
197
+
198
+ # @return [Boolean] True if the table's schema information is
199
+ # loaded into memory.
200
+ #
201
+ # @note You must load the the table schema using {#load_schema},
202
+ # {#hash_key} or {#range_key} or configure it using
203
+ # {#hash_key=} and optionally {#range_key=} in order to work
204
+ # with DynamoDB items.
205
+ #
206
+ def schema_loaded?
207
+ static_attributes.include?(:hash_key)
208
+ end
209
+
210
+ # Raises an exception unless the table schema is loaded.
211
+ #
212
+ # @return [nil]
213
+ #
214
+ def assert_schema!
215
+ raise "table schema not loaded" unless schema_loaded?
216
+ end
217
+
218
+ # Loads the table's schema information into memory. This method
219
+ # should not be used in a high-volume code path, and is intended
220
+ # only as a convenience for exploring the API. In general you
221
+ # should configure a schema with {#hash_key=} and {#range_key=}
222
+ # before using the table.
223
+ #
224
+ # @note You must load the the table schema using {#load_schema},
225
+ # {#hash_key} or {#range_key} or configure it using
226
+ # {#hash_key=} and optionally {#range_key=} in order to work
227
+ # with DynamoDB items.
228
+ #
229
+ # @return self
230
+ def load_schema
231
+ hash_key
232
+ self
233
+ end
234
+
235
+ # Configures the hash key element of the table's key schema.
236
+ # This is the preferred way to load the table schema so that it
237
+ # can be used to work with DynamoDB items.
238
+ #
239
+ # # these are equivalent:
240
+ # table.hash_key = [:id, :string]
241
+ # table.hash_key = { :id => :string }
242
+ #
243
+ # @note For tables with composite primary keys, you must call
244
+ # this method first followed by {#range_key=} to configure the
245
+ # table schema.
246
+ #
247
+ # @param description A description of the hash key element. If
248
+ # this is a hash, it may contain a single mapping; the key is
249
+ # the name of the hash key attribute and the value is the type
250
+ # (+:string+, +:number+ or +:binary+). If it is an array, the first
251
+ # element is the name and the second element is the type.
252
+ #
253
+ def hash_key= description
254
+ static_attributes[:hash_key] =
255
+ PrimaryKeyElement.from_description(description)
256
+ end
257
+
258
+ # Configures the range key element of the table's key schema.
259
+ # This is the preferred way to load the table schema so that it
260
+ # can be used to work with DynamoDB items. This method is only
261
+ # valid if the table has a composite key schema, and it may only
262
+ # be called after {#hash_key=} has been used to configure the
263
+ # hash key element.
264
+ #
265
+ # # these are equivalent:
266
+ # table.range_key = [:id, :string]
267
+ # table.range_key = { :id => :string }
268
+ #
269
+ # @param description A description of the range key element. If
270
+ # this is a hash, it may contain a single mapping; the key is
271
+ # the name of the hash key attribute and the value is the type
272
+ # (+:string+, +:number+ or +:binary+). If it is an array, the first
273
+ # element is the name and the second element is the type.
274
+ #
275
+ def range_key= description
276
+ raise "attempted to set a range key without configuring a hash key first" unless
277
+ schema_loaded?
278
+
279
+ static_attributes[:range_key] =
280
+ PrimaryKeyElement.from_description(description)
281
+
282
+ end
283
+
284
+ # Deletes a table and all of its items. The table must be in an
285
+ # +:active+ state (see {#status}).
286
+ #
287
+ # @return [nil]
288
+ #
289
+ def delete
290
+ client.delete_table(:table_name => name)
291
+ nil
292
+ end
293
+
294
+ # @return [ItemCollection] Returns an object representing all the
295
+ # items in the table.
296
+ def items
297
+ ItemCollection.new(self)
298
+ end
299
+
300
+ # @return [Boolean] Returns true if the table exists. Note that a table
301
+ # exists even when it is in a +:deleting+ state; this method
302
+ # only returns false when DynamoDB no longer returns any
303
+ # information about the table.
304
+ def exists?
305
+ get_resource
306
+ true
307
+ rescue Errors::ResourceNotFoundException
308
+ false
309
+ end
310
+
311
+ # Requets a list of attributes for a list of items in the same table.
312
+ #
313
+ # If you want to request a list of attributes for items that span
314
+ # multiple tables, see {DynamoDB#batch_get}.
315
+ #
316
+ # You can call this method in two forms:
317
+ #
318
+ # # block form
319
+ # table.batch_get(:all, items) do |attributes|
320
+ # # yeilds one hash of attribute names/values for each item
321
+ # puts attributes.to_yaml
322
+ # end
323
+ #
324
+ # # enumerable return value
325
+ # attribute_hashes = table.batch_get(:all, items)
326
+ # attribute_hashes.each do |attributes|
327
+ # # ...
328
+ # end
329
+ #
330
+ # @note This method does not require the table schema to be loaded.
331
+ #
332
+ # == Attributes
333
+ #
334
+ # You can specify the list of attributes to request in 3 ways:
335
+ #
336
+ # * The symbol +:all+ (to recieve all attributes)
337
+ # * A single attribute name (e.g. 'size')
338
+ # * An array of attribute names (e.g. ['size', 'color'])
339
+ #
340
+ # A few exmaples:
341
+ #
342
+ # # get all attributes
343
+ # table.batch_get(:all, items)
344
+ #
345
+ # # only get the 'color' attribute
346
+ # table.batch_get('color', items)
347
+ #
348
+ # # get 'color' and 'size' attributes
349
+ # table.batch_get(['color', size'], items)
350
+ #
351
+ # == Items
352
+ #
353
+ # You must specify an array of items to fetch attributes for.
354
+ # The +items+ param should always be an array with:
355
+ #
356
+ # * String hash key values
357
+ # * Arrays of string hash key and range key values
358
+ # * Item objects
359
+ #
360
+ # Here are a few examples:
361
+ #
362
+ # # items as a list of hash key values
363
+ # items = %w(hashkey1 hashkey2 hashkey3)
364
+ # table.batch_get(:all, items)
365
+ #
366
+ # # items as a list of hash and range key values
367
+ # items = [['hashkey1', 'rangekey2'], ['hashkey1', 'rangekey2']]
368
+ # table.batch_get(:all, items)
369
+ #
370
+ # # items as a list of Item objects
371
+ # items = []
372
+ # items << Item.new(table, 'hashkey1')
373
+ # items << Item.new(table, 'hashkey2')
374
+ # table.batch_get(:all, items)
375
+ #
376
+ # Please note that you must provide both hash and range keys for tables
377
+ # that include a range key in the schema.
378
+ #
379
+ # @param [:all, String, Array<String>] attributes The list of
380
+ # attributes you want to fetch for each item. +attributes+ may be:
381
+ #
382
+ # * the symbol +:all+
383
+ # * a single attribute name string
384
+ # * an array of attribute name strings
385
+ #
386
+ # @param [Mixed] items A list of 2 or more items to fetch attributes
387
+ # for. You may provide +items+ as:
388
+ #
389
+ # * an array of hash key value strings
390
+ # * an array of hash and range key value pairs (nested arrays)
391
+ # * an array of {Item} objects
392
+ #
393
+ # @param [Hash] options
394
+ #
395
+ # @option options [Boolean] :consistent_read (false) When +true+, items
396
+ # are read from this table with consistent reads. When +false+, reads
397
+ # are eventually consistent.
398
+ #
399
+ # @yield [Hash] Yields a hash of attributes for each item.
400
+ #
401
+ # @return [Enumerable] Returns an enumerable object that yields
402
+ # hashes of attributes.
403
+ #
404
+ def batch_get attributes, items, options = {}, &block
405
+ batch = BatchGet.new(:config => config)
406
+ batch.table(name, attributes, items, options)
407
+ enum = batch.to_enum(:each_attributes)
408
+ block_given? ? enum.each(&block) : enum
409
+ end
410
+
411
+ # Batch puts up to 25 items to this table.
412
+ #
413
+ # table.batch_put([
414
+ # { :id => 'id1', :color => 'red' },
415
+ # { :id => 'id2', :color => 'blue' },
416
+ # { :id => 'id3', :color => 'green' },
417
+ # ])
418
+ #
419
+ # @param [Array<Hash>] items A list of item attributes to put.
420
+ # The hash must contain the table hash key element and range key
421
+ # element (if one is defined).
422
+ #
423
+ # @return (see BatchWrite#process!)
424
+ #
425
+ def batch_put items
426
+ batch = BatchWrite.new(:config => config)
427
+ batch.put(self, items)
428
+ batch.process!
429
+ end
430
+
431
+ # Batch writes up to 25 items to this table. A batch may contain
432
+ # a mix of items to put and items to delete.
433
+ #
434
+ # table.batch_write(
435
+ # :put => [
436
+ # { :id => 'id1', :color => 'red' },
437
+ # { :id => 'id2', :color => 'blue' },
438
+ # { :id => 'id3', :color => 'green' },
439
+ # ],
440
+ # :delete => ['id4', 'id5']
441
+ # )
442
+ #
443
+ # @param [Hash] options
444
+ #
445
+ # @option options (BatchWrite#write)
446
+ #
447
+ # @return (see BatchWrite#process!)
448
+ #
449
+ def batch_write options = {}
450
+ batch = BatchWrite.new(:config => config)
451
+ batch.write(self, options)
452
+ batch.process!
453
+ end
454
+
455
+ # Delete up to 25 items in a single batch.
456
+ #
457
+ # table.batch_delete(%w(id1 id2 id3 id4 id5))
458
+ #
459
+ # @param [Array<String>,Array<Array>] items A list of item keys to
460
+ # delete. For tables without a range key, items should be an array
461
+ # of hash key strings.
462
+ #
463
+ # batch.delete('table-name', ['hk1', 'hk2', 'hk3'])
464
+ #
465
+ # For tables with a range key, items should be an array of
466
+ # hash key and range key pairs.
467
+ #
468
+ # batch.delete('table-name', [['hk1', 'rk1'], ['hk1', 'rk2']])
469
+ #
470
+ # @return (see BatchWrite#process!)
471
+ #
472
+ def batch_delete items
473
+ batch = BatchWrite.new(:config => config)
474
+ batch.delete(self, items)
475
+ batch.process!
476
+ end
477
+
478
+ protected
479
+ def get_resource attribute_name = nil
480
+ client.describe_table(resource_options)
481
+ end
482
+
483
+ protected
484
+ def resource_identifiers
485
+ [[:table_name, name]]
486
+ end
487
+
488
+ end
489
+
490
+ end
491
+ end