aws-sdk-v1 1.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (560) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +7 -0
  3. data/LICENSE.txt +12 -0
  4. data/README.md +337 -0
  5. data/bin/aws-rb +179 -0
  6. data/ca-bundle.crt +3554 -0
  7. data/endpoints.json +1671 -0
  8. data/lib/aws-sdk-v1.rb +2 -0
  9. data/lib/aws-sdk.rb +1 -0
  10. data/lib/aws.rb +14 -0
  11. data/lib/aws/api_config/AutoScaling-2011-01-01.yml +1070 -0
  12. data/lib/aws/api_config/CloudFormation-2010-05-15.yml +372 -0
  13. data/lib/aws/api_config/CloudFront-2013-05-12.yml +2448 -0
  14. data/lib/aws/api_config/CloudFront-2013-08-26.yml +2599 -0
  15. data/lib/aws/api_config/CloudFront-2013-09-27.yml +2765 -0
  16. data/lib/aws/api_config/CloudFront-2013-11-11.yml +2886 -0
  17. data/lib/aws/api_config/CloudFront-2013-11-22.yml +2918 -0
  18. data/lib/aws/api_config/CloudFront-2014-01-31.yml +2934 -0
  19. data/lib/aws/api_config/CloudFront-2014-05-31.yml +3100 -0
  20. data/lib/aws/api_config/CloudSearch-2011-02-01.yml +681 -0
  21. data/lib/aws/api_config/CloudSearch-2013-01-01.yml +1164 -0
  22. data/lib/aws/api_config/CloudTrail-2013-11-01.yml +130 -0
  23. data/lib/aws/api_config/CloudWatch-2010-08-01.yml +433 -0
  24. data/lib/aws/api_config/DataPipeline-2012-10-29.yml +422 -0
  25. data/lib/aws/api_config/DirectConnect-2012-10-25.yml +735 -0
  26. data/lib/aws/api_config/DynamoDB-2011-12-05.yml +1168 -0
  27. data/lib/aws/api_config/DynamoDB-2012-08-10.yml +2105 -0
  28. data/lib/aws/api_config/EC2-2013-08-15.yml +4708 -0
  29. data/lib/aws/api_config/EC2-2013-10-01.yml +4726 -0
  30. data/lib/aws/api_config/EC2-2013-10-15.yml +4651 -0
  31. data/lib/aws/api_config/EC2-2014-02-01.yml +4755 -0
  32. data/lib/aws/api_config/EC2-2014-05-01.yml +4812 -0
  33. data/lib/aws/api_config/ELB-2012-06-01.yml +766 -0
  34. data/lib/aws/api_config/EMR-2009-03-31.yml +972 -0
  35. data/lib/aws/api_config/ElastiCache-2013-06-15.yml +1188 -0
  36. data/lib/aws/api_config/ElastiCache-2014-03-24.yml +1375 -0
  37. data/lib/aws/api_config/ElastiCache-2014-07-15.yml +1385 -0
  38. data/lib/aws/api_config/ElasticBeanstalk-2010-12-01.yml +854 -0
  39. data/lib/aws/api_config/ElasticTranscoder-2012-09-25.yml +3082 -0
  40. data/lib/aws/api_config/Glacier-2012-06-01.yml +649 -0
  41. data/lib/aws/api_config/IAM-2010-05-08.yml +1339 -0
  42. data/lib/aws/api_config/ImportExport-2010-06-01.yml +109 -0
  43. data/lib/aws/api_config/Kinesis-2013-12-02.yml +201 -0
  44. data/lib/aws/api_config/OpsWorks-2013-02-18.yml +2025 -0
  45. data/lib/aws/api_config/RDS-2013-05-15.yml +2464 -0
  46. data/lib/aws/api_config/RDS-2013-09-09.yml +2640 -0
  47. data/lib/aws/api_config/Redshift-2012-12-01.yml +2161 -0
  48. data/lib/aws/api_config/Route53-2012-12-12.yml +547 -0
  49. data/lib/aws/api_config/Route53-2013-04-01.yml +889 -0
  50. data/lib/aws/api_config/SNS-2010-03-31.yml +448 -0
  51. data/lib/aws/api_config/SQS-2012-11-05.yml +404 -0
  52. data/lib/aws/api_config/STS-2011-06-15.yml +151 -0
  53. data/lib/aws/api_config/SimpleDB-2009-04-15.yml +306 -0
  54. data/lib/aws/api_config/SimpleEmailService-2010-12-01.yml +346 -0
  55. data/lib/aws/api_config/SimpleWorkflow-2012-01-25.yml +2388 -0
  56. data/lib/aws/api_config/StorageGateway-2012-06-30.yml +748 -0
  57. data/lib/aws/api_config/StorageGateway-2013-06-30.yml +1025 -0
  58. data/lib/aws/api_config/Support-2013-04-15.yml +489 -0
  59. data/lib/aws/auto_scaling.rb +163 -0
  60. data/lib/aws/auto_scaling/activity.rb +102 -0
  61. data/lib/aws/auto_scaling/activity_collection.rb +81 -0
  62. data/lib/aws/auto_scaling/client.rb +48 -0
  63. data/lib/aws/auto_scaling/config.rb +18 -0
  64. data/lib/aws/auto_scaling/errors.rb +22 -0
  65. data/lib/aws/auto_scaling/group.rb +421 -0
  66. data/lib/aws/auto_scaling/group_collection.rb +96 -0
  67. data/lib/aws/auto_scaling/group_options.rb +155 -0
  68. data/lib/aws/auto_scaling/instance.rb +192 -0
  69. data/lib/aws/auto_scaling/instance_collection.rb +63 -0
  70. data/lib/aws/auto_scaling/launch_configuration.rb +162 -0
  71. data/lib/aws/auto_scaling/launch_configuration_collection.rb +160 -0
  72. data/lib/aws/auto_scaling/notification_configuration.rb +89 -0
  73. data/lib/aws/auto_scaling/notification_configuration_collection.rb +183 -0
  74. data/lib/aws/auto_scaling/scaling_policy.rb +142 -0
  75. data/lib/aws/auto_scaling/scaling_policy_collection.rb +72 -0
  76. data/lib/aws/auto_scaling/scaling_policy_options.rb +65 -0
  77. data/lib/aws/auto_scaling/scheduled_action.rb +141 -0
  78. data/lib/aws/auto_scaling/scheduled_action_collection.rb +202 -0
  79. data/lib/aws/auto_scaling/tag.rb +59 -0
  80. data/lib/aws/auto_scaling/tag_collection.rb +114 -0
  81. data/lib/aws/cloud_formation.rb +272 -0
  82. data/lib/aws/cloud_formation/client.rb +48 -0
  83. data/lib/aws/cloud_formation/config.rb +18 -0
  84. data/lib/aws/cloud_formation/errors.rb +22 -0
  85. data/lib/aws/cloud_formation/stack.rb +266 -0
  86. data/lib/aws/cloud_formation/stack_collection.rb +232 -0
  87. data/lib/aws/cloud_formation/stack_event.rb +73 -0
  88. data/lib/aws/cloud_formation/stack_event_collection.rb +47 -0
  89. data/lib/aws/cloud_formation/stack_options.rb +72 -0
  90. data/lib/aws/cloud_formation/stack_output.rb +53 -0
  91. data/lib/aws/cloud_formation/stack_resource.rb +117 -0
  92. data/lib/aws/cloud_formation/stack_resource_collection.rb +83 -0
  93. data/lib/aws/cloud_formation/stack_resource_summary_collection.rb +64 -0
  94. data/lib/aws/cloud_formation/stack_summary_collection.rb +123 -0
  95. data/lib/aws/cloud_front.rb +72 -0
  96. data/lib/aws/cloud_front/client.rb +57 -0
  97. data/lib/aws/cloud_front/config.rb +18 -0
  98. data/lib/aws/cloud_front/errors.rb +22 -0
  99. data/lib/aws/cloud_search.rb +73 -0
  100. data/lib/aws/cloud_search/client.rb +40 -0
  101. data/lib/aws/cloud_search/config.rb +18 -0
  102. data/lib/aws/cloud_search/errors.rb +22 -0
  103. data/lib/aws/cloud_trail.rb +72 -0
  104. data/lib/aws/cloud_trail/client.rb +35 -0
  105. data/lib/aws/cloud_trail/config.rb +18 -0
  106. data/lib/aws/cloud_trail/errors.rb +22 -0
  107. data/lib/aws/cloud_watch.rb +118 -0
  108. data/lib/aws/cloud_watch/alarm.rb +293 -0
  109. data/lib/aws/cloud_watch/alarm_collection.rb +153 -0
  110. data/lib/aws/cloud_watch/alarm_history_item.rb +50 -0
  111. data/lib/aws/cloud_watch/alarm_history_item_collection.rb +84 -0
  112. data/lib/aws/cloud_watch/client.rb +40 -0
  113. data/lib/aws/cloud_watch/config.rb +18 -0
  114. data/lib/aws/cloud_watch/errors.rb +22 -0
  115. data/lib/aws/cloud_watch/metric.rb +135 -0
  116. data/lib/aws/cloud_watch/metric_alarm_collection.rb +160 -0
  117. data/lib/aws/cloud_watch/metric_collection.rb +129 -0
  118. data/lib/aws/cloud_watch/metric_statistics.rb +69 -0
  119. data/lib/aws/core.rb +716 -0
  120. data/lib/aws/core/async_handle.rb +90 -0
  121. data/lib/aws/core/cacheable.rb +77 -0
  122. data/lib/aws/core/client.rb +787 -0
  123. data/lib/aws/core/collection.rb +263 -0
  124. data/lib/aws/core/collection/simple.rb +82 -0
  125. data/lib/aws/core/collection/with_limit_and_next_token.rb +71 -0
  126. data/lib/aws/core/collection/with_next_token.rb +97 -0
  127. data/lib/aws/core/configuration.rb +542 -0
  128. data/lib/aws/core/credential_providers.rb +639 -0
  129. data/lib/aws/core/data.rb +247 -0
  130. data/lib/aws/core/deprecations.rb +84 -0
  131. data/lib/aws/core/endpoints.rb +37 -0
  132. data/lib/aws/core/http/connection_pool.rb +369 -0
  133. data/lib/aws/core/http/curb_handler.rb +148 -0
  134. data/lib/aws/core/http/handler.rb +89 -0
  135. data/lib/aws/core/http/net_http_handler.rb +144 -0
  136. data/lib/aws/core/http/patch.rb +102 -0
  137. data/lib/aws/core/http/request.rb +259 -0
  138. data/lib/aws/core/http/response.rb +81 -0
  139. data/lib/aws/core/indifferent_hash.rb +88 -0
  140. data/lib/aws/core/inflection.rb +56 -0
  141. data/lib/aws/core/ini_parser.rb +42 -0
  142. data/lib/aws/core/json_client.rb +47 -0
  143. data/lib/aws/core/json_parser.rb +76 -0
  144. data/lib/aws/core/json_request_builder.rb +35 -0
  145. data/lib/aws/core/json_response_parser.rb +79 -0
  146. data/lib/aws/core/lazy_error_classes.rb +108 -0
  147. data/lib/aws/core/log_formatter.rb +428 -0
  148. data/lib/aws/core/managed_file.rb +32 -0
  149. data/lib/aws/core/meta_utils.rb +45 -0
  150. data/lib/aws/core/model.rb +62 -0
  151. data/lib/aws/core/naming.rb +30 -0
  152. data/lib/aws/core/option_grammar.rb +738 -0
  153. data/lib/aws/core/options/json_serializer.rb +82 -0
  154. data/lib/aws/core/options/validator.rb +155 -0
  155. data/lib/aws/core/options/xml_serializer.rb +118 -0
  156. data/lib/aws/core/page_result.rb +75 -0
  157. data/lib/aws/core/policy.rb +941 -0
  158. data/lib/aws/core/query_client.rb +41 -0
  159. data/lib/aws/core/query_error_parser.rb +24 -0
  160. data/lib/aws/core/query_request_builder.rb +47 -0
  161. data/lib/aws/core/query_response_parser.rb +35 -0
  162. data/lib/aws/core/region.rb +85 -0
  163. data/lib/aws/core/region_collection.rb +80 -0
  164. data/lib/aws/core/resource.rb +413 -0
  165. data/lib/aws/core/resource_cache.rb +40 -0
  166. data/lib/aws/core/response.rb +215 -0
  167. data/lib/aws/core/response_cache.rb +50 -0
  168. data/lib/aws/core/rest_error_parser.rb +24 -0
  169. data/lib/aws/core/rest_json_client.rb +40 -0
  170. data/lib/aws/core/rest_request_builder.rb +154 -0
  171. data/lib/aws/core/rest_response_parser.rb +66 -0
  172. data/lib/aws/core/rest_xml_client.rb +47 -0
  173. data/lib/aws/core/service_interface.rb +83 -0
  174. data/lib/aws/core/signers/base.rb +46 -0
  175. data/lib/aws/core/signers/cloud_front.rb +56 -0
  176. data/lib/aws/core/signers/s3.rb +159 -0
  177. data/lib/aws/core/signers/version_2.rb +72 -0
  178. data/lib/aws/core/signers/version_3.rb +86 -0
  179. data/lib/aws/core/signers/version_3_https.rb +61 -0
  180. data/lib/aws/core/signers/version_4.rb +228 -0
  181. data/lib/aws/core/signers/version_4/chunk_signed_stream.rb +191 -0
  182. data/lib/aws/core/uri_escape.rb +44 -0
  183. data/lib/aws/core/xml/frame.rb +245 -0
  184. data/lib/aws/core/xml/frame_stack.rb +85 -0
  185. data/lib/aws/core/xml/grammar.rb +307 -0
  186. data/lib/aws/core/xml/parser.rb +70 -0
  187. data/lib/aws/core/xml/root_frame.rb +65 -0
  188. data/lib/aws/core/xml/sax_handlers/libxml.rb +47 -0
  189. data/lib/aws/core/xml/sax_handlers/nokogiri.rb +56 -0
  190. data/lib/aws/core/xml/sax_handlers/ox.rb +41 -0
  191. data/lib/aws/core/xml/sax_handlers/rexml.rb +47 -0
  192. data/lib/aws/core/xml/stub.rb +123 -0
  193. data/lib/aws/data_pipeline.rb +72 -0
  194. data/lib/aws/data_pipeline/client.rb +36 -0
  195. data/lib/aws/data_pipeline/config.rb +18 -0
  196. data/lib/aws/data_pipeline/errors.rb +20 -0
  197. data/lib/aws/direct_connect.rb +73 -0
  198. data/lib/aws/direct_connect/client.rb +36 -0
  199. data/lib/aws/direct_connect/config.rb +18 -0
  200. data/lib/aws/direct_connect/errors.rb +22 -0
  201. data/lib/aws/dynamo_db.rb +230 -0
  202. data/lib/aws/dynamo_db/attribute_collection.rb +456 -0
  203. data/lib/aws/dynamo_db/batch_get.rb +213 -0
  204. data/lib/aws/dynamo_db/batch_write.rb +254 -0
  205. data/lib/aws/dynamo_db/binary.rb +35 -0
  206. data/lib/aws/dynamo_db/client.rb +129 -0
  207. data/lib/aws/dynamo_db/client/v20111205.rb +1266 -0
  208. data/lib/aws/dynamo_db/client/v20120810.rb +1409 -0
  209. data/lib/aws/dynamo_db/client_v2.rb +44 -0
  210. data/lib/aws/dynamo_db/config.rb +24 -0
  211. data/lib/aws/dynamo_db/errors.rb +20 -0
  212. data/lib/aws/dynamo_db/expectations.rb +40 -0
  213. data/lib/aws/dynamo_db/item.rb +133 -0
  214. data/lib/aws/dynamo_db/item_collection.rb +856 -0
  215. data/lib/aws/dynamo_db/item_data.rb +31 -0
  216. data/lib/aws/dynamo_db/keys.rb +41 -0
  217. data/lib/aws/dynamo_db/primary_key_element.rb +48 -0
  218. data/lib/aws/dynamo_db/resource.rb +33 -0
  219. data/lib/aws/dynamo_db/table.rb +492 -0
  220. data/lib/aws/dynamo_db/table_collection.rb +165 -0
  221. data/lib/aws/dynamo_db/types.rb +111 -0
  222. data/lib/aws/ec2.rb +428 -0
  223. data/lib/aws/ec2/attachment.rb +135 -0
  224. data/lib/aws/ec2/attachment_collection.rb +54 -0
  225. data/lib/aws/ec2/availability_zone.rb +86 -0
  226. data/lib/aws/ec2/availability_zone_collection.rb +43 -0
  227. data/lib/aws/ec2/block_device_mappings.rb +53 -0
  228. data/lib/aws/ec2/client.rb +154 -0
  229. data/lib/aws/ec2/collection.rb +36 -0
  230. data/lib/aws/ec2/config.rb +21 -0
  231. data/lib/aws/ec2/customer_gateway.rb +90 -0
  232. data/lib/aws/ec2/customer_gateway_collection.rb +73 -0
  233. data/lib/aws/ec2/dhcp_options.rb +106 -0
  234. data/lib/aws/ec2/dhcp_options_collection.rb +87 -0
  235. data/lib/aws/ec2/elastic_ip.rb +209 -0
  236. data/lib/aws/ec2/elastic_ip_collection.rb +93 -0
  237. data/lib/aws/ec2/errors.rb +32 -0
  238. data/lib/aws/ec2/export_task.rb +120 -0
  239. data/lib/aws/ec2/export_task_collection.rb +67 -0
  240. data/lib/aws/ec2/filtered_collection.rb +87 -0
  241. data/lib/aws/ec2/has_permissions.rb +44 -0
  242. data/lib/aws/ec2/image.rb +270 -0
  243. data/lib/aws/ec2/image_collection.rb +219 -0
  244. data/lib/aws/ec2/instance.rb +803 -0
  245. data/lib/aws/ec2/instance_collection.rb +402 -0
  246. data/lib/aws/ec2/internet_gateway.rb +122 -0
  247. data/lib/aws/ec2/internet_gateway/attachment.rb +78 -0
  248. data/lib/aws/ec2/internet_gateway_collection.rb +54 -0
  249. data/lib/aws/ec2/key_pair.rb +82 -0
  250. data/lib/aws/ec2/key_pair_collection.rb +99 -0
  251. data/lib/aws/ec2/network_acl.rb +256 -0
  252. data/lib/aws/ec2/network_acl/association.rb +56 -0
  253. data/lib/aws/ec2/network_acl/entry.rb +147 -0
  254. data/lib/aws/ec2/network_acl_collection.rb +64 -0
  255. data/lib/aws/ec2/network_interface.rb +237 -0
  256. data/lib/aws/ec2/network_interface/attachment.rb +100 -0
  257. data/lib/aws/ec2/network_interface_collection.rb +103 -0
  258. data/lib/aws/ec2/permission_collection.rb +174 -0
  259. data/lib/aws/ec2/region.rb +106 -0
  260. data/lib/aws/ec2/region_collection.rb +51 -0
  261. data/lib/aws/ec2/reserved_instances.rb +57 -0
  262. data/lib/aws/ec2/reserved_instances_collection.rb +40 -0
  263. data/lib/aws/ec2/reserved_instances_offering.rb +60 -0
  264. data/lib/aws/ec2/reserved_instances_offering_collection.rb +45 -0
  265. data/lib/aws/ec2/resource.rb +161 -0
  266. data/lib/aws/ec2/resource_tag_collection.rb +211 -0
  267. data/lib/aws/ec2/route_table.rb +205 -0
  268. data/lib/aws/ec2/route_table/association.rb +119 -0
  269. data/lib/aws/ec2/route_table/route.rb +119 -0
  270. data/lib/aws/ec2/route_table_collection.rb +72 -0
  271. data/lib/aws/ec2/security_group.rb +482 -0
  272. data/lib/aws/ec2/security_group/ip_permission.rb +135 -0
  273. data/lib/aws/ec2/security_group/ip_permission_collection.rb +82 -0
  274. data/lib/aws/ec2/security_group_collection.rb +133 -0
  275. data/lib/aws/ec2/snapshot.rb +143 -0
  276. data/lib/aws/ec2/snapshot_collection.rb +131 -0
  277. data/lib/aws/ec2/subnet.rb +161 -0
  278. data/lib/aws/ec2/subnet_collection.rb +119 -0
  279. data/lib/aws/ec2/tag.rb +81 -0
  280. data/lib/aws/ec2/tag_collection.rb +107 -0
  281. data/lib/aws/ec2/tagged_collection.rb +67 -0
  282. data/lib/aws/ec2/tagged_item.rb +85 -0
  283. data/lib/aws/ec2/volume.rb +185 -0
  284. data/lib/aws/ec2/volume_collection.rb +102 -0
  285. data/lib/aws/ec2/vpc.rb +174 -0
  286. data/lib/aws/ec2/vpc_collection.rb +70 -0
  287. data/lib/aws/ec2/vpn_connection.rb +99 -0
  288. data/lib/aws/ec2/vpn_connection/telemetry.rb +49 -0
  289. data/lib/aws/ec2/vpn_connection_collection.rb +96 -0
  290. data/lib/aws/ec2/vpn_gateway.rb +123 -0
  291. data/lib/aws/ec2/vpn_gateway/attachment.rb +45 -0
  292. data/lib/aws/ec2/vpn_gateway_collection.rb +77 -0
  293. data/lib/aws/elastic_beanstalk.rb +49 -0
  294. data/lib/aws/elastic_beanstalk/client.rb +36 -0
  295. data/lib/aws/elastic_beanstalk/config.rb +18 -0
  296. data/lib/aws/elastic_beanstalk/errors.rb +22 -0
  297. data/lib/aws/elastic_transcoder.rb +29 -0
  298. data/lib/aws/elastic_transcoder/client.rb +48 -0
  299. data/lib/aws/elastic_transcoder/config.rb +18 -0
  300. data/lib/aws/elastic_transcoder/errors.rb +23 -0
  301. data/lib/aws/elasticache.rb +49 -0
  302. data/lib/aws/elasticache/client.rb +41 -0
  303. data/lib/aws/elasticache/config.rb +18 -0
  304. data/lib/aws/elasticache/errors.rb +22 -0
  305. data/lib/aws/elb.rb +66 -0
  306. data/lib/aws/elb/availability_zone_collection.rb +138 -0
  307. data/lib/aws/elb/backend_server_policy_collection.rb +139 -0
  308. data/lib/aws/elb/client.rb +35 -0
  309. data/lib/aws/elb/config.rb +18 -0
  310. data/lib/aws/elb/errors.rb +26 -0
  311. data/lib/aws/elb/instance_collection.rb +168 -0
  312. data/lib/aws/elb/listener.rb +190 -0
  313. data/lib/aws/elb/listener_collection.rb +113 -0
  314. data/lib/aws/elb/listener_opts.rb +45 -0
  315. data/lib/aws/elb/load_balancer.rb +280 -0
  316. data/lib/aws/elb/load_balancer_collection.rb +146 -0
  317. data/lib/aws/elb/load_balancer_policy.rb +93 -0
  318. data/lib/aws/elb/load_balancer_policy_collection.rb +208 -0
  319. data/lib/aws/emr.rb +87 -0
  320. data/lib/aws/emr/client.rb +35 -0
  321. data/lib/aws/emr/config.rb +18 -0
  322. data/lib/aws/emr/errors.rb +22 -0
  323. data/lib/aws/emr/instance_group.rb +138 -0
  324. data/lib/aws/emr/instance_group_collection.rb +82 -0
  325. data/lib/aws/emr/job_flow.rb +307 -0
  326. data/lib/aws/emr/job_flow_collection.rb +183 -0
  327. data/lib/aws/errors.rb +162 -0
  328. data/lib/aws/glacier.rb +79 -0
  329. data/lib/aws/glacier/archive.rb +56 -0
  330. data/lib/aws/glacier/archive_collection.rb +146 -0
  331. data/lib/aws/glacier/client.rb +49 -0
  332. data/lib/aws/glacier/config.rb +19 -0
  333. data/lib/aws/glacier/errors.rb +22 -0
  334. data/lib/aws/glacier/resource.rb +30 -0
  335. data/lib/aws/glacier/vault.rb +145 -0
  336. data/lib/aws/glacier/vault_collection.rb +75 -0
  337. data/lib/aws/glacier/vault_notification_configuration.rb +29 -0
  338. data/lib/aws/iam.rb +408 -0
  339. data/lib/aws/iam/access_key.rb +185 -0
  340. data/lib/aws/iam/access_key_collection.rb +128 -0
  341. data/lib/aws/iam/account_alias_collection.rb +79 -0
  342. data/lib/aws/iam/client.rb +49 -0
  343. data/lib/aws/iam/collection.rb +83 -0
  344. data/lib/aws/iam/config.rb +18 -0
  345. data/lib/aws/iam/errors.rb +22 -0
  346. data/lib/aws/iam/group.rb +111 -0
  347. data/lib/aws/iam/group_collection.rb +132 -0
  348. data/lib/aws/iam/group_policy_collection.rb +47 -0
  349. data/lib/aws/iam/group_user_collection.rb +84 -0
  350. data/lib/aws/iam/login_profile.rb +111 -0
  351. data/lib/aws/iam/mfa_device.rb +52 -0
  352. data/lib/aws/iam/mfa_device_collection.rb +127 -0
  353. data/lib/aws/iam/policy.rb +46 -0
  354. data/lib/aws/iam/policy_collection.rb +188 -0
  355. data/lib/aws/iam/resource.rb +62 -0
  356. data/lib/aws/iam/server_certificate.rb +148 -0
  357. data/lib/aws/iam/server_certificate_collection.rb +138 -0
  358. data/lib/aws/iam/signing_certificate.rb +186 -0
  359. data/lib/aws/iam/signing_certificate_collection.rb +131 -0
  360. data/lib/aws/iam/user.rb +200 -0
  361. data/lib/aws/iam/user_collection.rb +133 -0
  362. data/lib/aws/iam/user_group_collection.rb +98 -0
  363. data/lib/aws/iam/user_policy.rb +90 -0
  364. data/lib/aws/iam/user_policy_collection.rb +45 -0
  365. data/lib/aws/iam/virtual_mfa_device.rb +139 -0
  366. data/lib/aws/iam/virtual_mfa_device_collection.rb +73 -0
  367. data/lib/aws/import_export.rb +73 -0
  368. data/lib/aws/import_export/client.rb +35 -0
  369. data/lib/aws/import_export/config.rb +19 -0
  370. data/lib/aws/import_export/errors.rb +22 -0
  371. data/lib/aws/kinesis.rb +53 -0
  372. data/lib/aws/kinesis/client.rb +35 -0
  373. data/lib/aws/kinesis/config.rb +18 -0
  374. data/lib/aws/kinesis/errors.rb +20 -0
  375. data/lib/aws/ops_works.rb +29 -0
  376. data/lib/aws/ops_works/client.rb +35 -0
  377. data/lib/aws/ops_works/config.rb +18 -0
  378. data/lib/aws/ops_works/errors.rb +20 -0
  379. data/lib/aws/rails.rb +195 -0
  380. data/lib/aws/rds.rb +70 -0
  381. data/lib/aws/rds/client.rb +42 -0
  382. data/lib/aws/rds/config.rb +18 -0
  383. data/lib/aws/rds/db_instance.rb +215 -0
  384. data/lib/aws/rds/db_instance_collection.rb +75 -0
  385. data/lib/aws/rds/db_snapshot.rb +163 -0
  386. data/lib/aws/rds/db_snapshot_collection.rb +89 -0
  387. data/lib/aws/rds/errors.rb +22 -0
  388. data/lib/aws/record.rb +139 -0
  389. data/lib/aws/record/abstract_base.rb +689 -0
  390. data/lib/aws/record/attributes.rb +388 -0
  391. data/lib/aws/record/conversion.rb +38 -0
  392. data/lib/aws/record/dirty_tracking.rb +287 -0
  393. data/lib/aws/record/errors.rb +143 -0
  394. data/lib/aws/record/exceptions.rb +51 -0
  395. data/lib/aws/record/hash_model.rb +204 -0
  396. data/lib/aws/record/hash_model/attributes.rb +195 -0
  397. data/lib/aws/record/hash_model/finder_methods.rb +172 -0
  398. data/lib/aws/record/hash_model/scope.rb +108 -0
  399. data/lib/aws/record/model.rb +453 -0
  400. data/lib/aws/record/model/attributes.rb +377 -0
  401. data/lib/aws/record/model/finder_methods.rb +232 -0
  402. data/lib/aws/record/model/scope.rb +212 -0
  403. data/lib/aws/record/naming.rb +31 -0
  404. data/lib/aws/record/scope.rb +203 -0
  405. data/lib/aws/record/validations.rb +694 -0
  406. data/lib/aws/record/validator.rb +246 -0
  407. data/lib/aws/record/validators/acceptance.rb +49 -0
  408. data/lib/aws/record/validators/block.rb +36 -0
  409. data/lib/aws/record/validators/confirmation.rb +41 -0
  410. data/lib/aws/record/validators/count.rb +106 -0
  411. data/lib/aws/record/validators/exclusion.rb +41 -0
  412. data/lib/aws/record/validators/format.rb +55 -0
  413. data/lib/aws/record/validators/inclusion.rb +54 -0
  414. data/lib/aws/record/validators/length.rb +105 -0
  415. data/lib/aws/record/validators/method.rb +31 -0
  416. data/lib/aws/record/validators/numericality.rb +136 -0
  417. data/lib/aws/record/validators/presence.rb +43 -0
  418. data/lib/aws/redshift.rb +51 -0
  419. data/lib/aws/redshift/client.rb +35 -0
  420. data/lib/aws/redshift/config.rb +18 -0
  421. data/lib/aws/redshift/errors.rb +22 -0
  422. data/lib/aws/route_53.rb +86 -0
  423. data/lib/aws/route_53/change_batch.rb +161 -0
  424. data/lib/aws/route_53/change_info.rb +72 -0
  425. data/lib/aws/route_53/client.rb +38 -0
  426. data/lib/aws/route_53/config.rb +18 -0
  427. data/lib/aws/route_53/errors.rb +22 -0
  428. data/lib/aws/route_53/hosted_zone.rb +134 -0
  429. data/lib/aws/route_53/hosted_zone_collection.rb +101 -0
  430. data/lib/aws/route_53/resource_record_set.rb +251 -0
  431. data/lib/aws/route_53/resource_record_set_collection.rb +110 -0
  432. data/lib/aws/s3.rb +156 -0
  433. data/lib/aws/s3/access_control_list.rb +265 -0
  434. data/lib/aws/s3/acl_object.rb +264 -0
  435. data/lib/aws/s3/acl_options.rb +204 -0
  436. data/lib/aws/s3/bucket.rb +742 -0
  437. data/lib/aws/s3/bucket_collection.rb +162 -0
  438. data/lib/aws/s3/bucket_lifecycle_configuration.rb +473 -0
  439. data/lib/aws/s3/bucket_tag_collection.rb +111 -0
  440. data/lib/aws/s3/bucket_version_collection.rb +79 -0
  441. data/lib/aws/s3/cipher_io.rb +120 -0
  442. data/lib/aws/s3/client.rb +2067 -0
  443. data/lib/aws/s3/client/xml.rb +266 -0
  444. data/lib/aws/s3/config.rb +48 -0
  445. data/lib/aws/s3/cors_rule.rb +108 -0
  446. data/lib/aws/s3/cors_rule_collection.rb +194 -0
  447. data/lib/aws/s3/data_options.rb +191 -0
  448. data/lib/aws/s3/encryption_utils.rb +146 -0
  449. data/lib/aws/s3/errors.rb +94 -0
  450. data/lib/aws/s3/multipart_upload.rb +353 -0
  451. data/lib/aws/s3/multipart_upload_collection.rb +76 -0
  452. data/lib/aws/s3/object_collection.rb +353 -0
  453. data/lib/aws/s3/object_metadata.rb +103 -0
  454. data/lib/aws/s3/object_upload_collection.rb +77 -0
  455. data/lib/aws/s3/object_version.rb +154 -0
  456. data/lib/aws/s3/object_version_collection.rb +89 -0
  457. data/lib/aws/s3/paginated_collection.rb +75 -0
  458. data/lib/aws/s3/policy.rb +74 -0
  459. data/lib/aws/s3/prefix_and_delimiter_collection.rb +47 -0
  460. data/lib/aws/s3/prefixed_collection.rb +85 -0
  461. data/lib/aws/s3/presign_v4.rb +136 -0
  462. data/lib/aws/s3/presigned_post.rb +554 -0
  463. data/lib/aws/s3/request.rb +62 -0
  464. data/lib/aws/s3/s3_object.rb +1784 -0
  465. data/lib/aws/s3/tree.rb +116 -0
  466. data/lib/aws/s3/tree/branch_node.rb +68 -0
  467. data/lib/aws/s3/tree/child_collection.rb +104 -0
  468. data/lib/aws/s3/tree/leaf_node.rb +94 -0
  469. data/lib/aws/s3/tree/node.rb +22 -0
  470. data/lib/aws/s3/tree/parent.rb +87 -0
  471. data/lib/aws/s3/uploaded_part.rb +82 -0
  472. data/lib/aws/s3/uploaded_part_collection.rb +84 -0
  473. data/lib/aws/s3/website_configuration.rb +102 -0
  474. data/lib/aws/simple_db.rb +218 -0
  475. data/lib/aws/simple_db/attribute.rb +156 -0
  476. data/lib/aws/simple_db/attribute_collection.rb +240 -0
  477. data/lib/aws/simple_db/client.rb +67 -0
  478. data/lib/aws/simple_db/config.rb +20 -0
  479. data/lib/aws/simple_db/consistent_read_option.rb +42 -0
  480. data/lib/aws/simple_db/delete_attributes.rb +62 -0
  481. data/lib/aws/simple_db/domain.rb +123 -0
  482. data/lib/aws/simple_db/domain_collection.rb +86 -0
  483. data/lib/aws/simple_db/domain_metadata.rb +110 -0
  484. data/lib/aws/simple_db/errors.rb +55 -0
  485. data/lib/aws/simple_db/expect_condition_option.rb +45 -0
  486. data/lib/aws/simple_db/item.rb +93 -0
  487. data/lib/aws/simple_db/item_collection.rb +654 -0
  488. data/lib/aws/simple_db/item_data.rb +73 -0
  489. data/lib/aws/simple_db/put_attributes.rb +60 -0
  490. data/lib/aws/simple_email_service.rb +443 -0
  491. data/lib/aws/simple_email_service/client.rb +37 -0
  492. data/lib/aws/simple_email_service/config.rb +18 -0
  493. data/lib/aws/simple_email_service/email_address_collection.rb +69 -0
  494. data/lib/aws/simple_email_service/errors.rb +22 -0
  495. data/lib/aws/simple_email_service/identity.rb +230 -0
  496. data/lib/aws/simple_email_service/identity_collection.rb +81 -0
  497. data/lib/aws/simple_email_service/quotas.rb +66 -0
  498. data/lib/aws/simple_workflow.rb +227 -0
  499. data/lib/aws/simple_workflow/activity_task.rb +178 -0
  500. data/lib/aws/simple_workflow/activity_task_collection.rb +123 -0
  501. data/lib/aws/simple_workflow/activity_type.rb +131 -0
  502. data/lib/aws/simple_workflow/activity_type_collection.rb +93 -0
  503. data/lib/aws/simple_workflow/client.rb +69 -0
  504. data/lib/aws/simple_workflow/config.rb +18 -0
  505. data/lib/aws/simple_workflow/count.rb +49 -0
  506. data/lib/aws/simple_workflow/decision_task.rb +603 -0
  507. data/lib/aws/simple_workflow/decision_task_collection.rb +223 -0
  508. data/lib/aws/simple_workflow/domain.rb +122 -0
  509. data/lib/aws/simple_workflow/domain_collection.rb +169 -0
  510. data/lib/aws/simple_workflow/errors.rb +20 -0
  511. data/lib/aws/simple_workflow/history_event.rb +276 -0
  512. data/lib/aws/simple_workflow/history_event_collection.rb +76 -0
  513. data/lib/aws/simple_workflow/option_formatters.rb +82 -0
  514. data/lib/aws/simple_workflow/resource.rb +94 -0
  515. data/lib/aws/simple_workflow/type.rb +89 -0
  516. data/lib/aws/simple_workflow/type_collection.rb +140 -0
  517. data/lib/aws/simple_workflow/workflow_execution.rb +384 -0
  518. data/lib/aws/simple_workflow/workflow_execution_collection.rb +617 -0
  519. data/lib/aws/simple_workflow/workflow_type.rb +177 -0
  520. data/lib/aws/simple_workflow/workflow_type_collection.rb +91 -0
  521. data/lib/aws/sns.rb +76 -0
  522. data/lib/aws/sns/client.rb +35 -0
  523. data/lib/aws/sns/config.rb +18 -0
  524. data/lib/aws/sns/errors.rb +22 -0
  525. data/lib/aws/sns/has_delivery_policy.rb +68 -0
  526. data/lib/aws/sns/message.rb +204 -0
  527. data/lib/aws/sns/originators/from_auto_scaling.rb +68 -0
  528. data/lib/aws/sns/policy.rb +47 -0
  529. data/lib/aws/sns/subscription.rb +165 -0
  530. data/lib/aws/sns/subscription_collection.rb +78 -0
  531. data/lib/aws/sns/topic.rb +403 -0
  532. data/lib/aws/sns/topic_collection.rb +62 -0
  533. data/lib/aws/sns/topic_subscription_collection.rb +54 -0
  534. data/lib/aws/sqs.rb +80 -0
  535. data/lib/aws/sqs/client.rb +53 -0
  536. data/lib/aws/sqs/config.rb +20 -0
  537. data/lib/aws/sqs/errors.rb +125 -0
  538. data/lib/aws/sqs/policy.rb +48 -0
  539. data/lib/aws/sqs/queue.rb +856 -0
  540. data/lib/aws/sqs/queue_collection.rb +186 -0
  541. data/lib/aws/sqs/received_message.rb +190 -0
  542. data/lib/aws/sqs/received_sns_message.rb +116 -0
  543. data/lib/aws/storage_gateway.rb +72 -0
  544. data/lib/aws/storage_gateway/client.rb +42 -0
  545. data/lib/aws/storage_gateway/config.rb +18 -0
  546. data/lib/aws/storage_gateway/errors.rb +22 -0
  547. data/lib/aws/sts.rb +164 -0
  548. data/lib/aws/sts/client.rb +55 -0
  549. data/lib/aws/sts/config.rb +18 -0
  550. data/lib/aws/sts/errors.rb +22 -0
  551. data/lib/aws/sts/federated_session.rb +56 -0
  552. data/lib/aws/sts/policy.rb +30 -0
  553. data/lib/aws/sts/session.rb +48 -0
  554. data/lib/aws/support.rb +29 -0
  555. data/lib/aws/support/client.rb +35 -0
  556. data/lib/aws/support/config.rb +18 -0
  557. data/lib/aws/support/errors.rb +20 -0
  558. data/lib/aws/version.rb +17 -0
  559. data/rails/init.rb +15 -0
  560. metadata +634 -0
@@ -0,0 +1,172 @@
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
+ module Record
16
+ class HashModel
17
+ class << self
18
+
19
+ # @param [String] id The id of the record to load.
20
+ # @param [Hash] options
21
+ # @option options [String] :shard Specifies what shard (i.e. table)
22
+ # should be searched.
23
+ # @raise [RecordNotFound] Raises a record not found exception if there
24
+ # was no data found for the given id.
25
+ # @return [Record::HashModel] Returns the record with the given id.
26
+ def find_by_id id, options = {}
27
+
28
+ table = dynamo_db_table(options[:shard])
29
+
30
+ data = table.items[id].attributes.to_h
31
+
32
+ raise RecordNotFound, "no data found for id: #{id}" if data.empty?
33
+
34
+ obj = self.new(:shard => table)
35
+ obj.send(:hydrate, id, data)
36
+ obj
37
+
38
+ end
39
+ alias_method :[], :find_by_id
40
+
41
+ # Finds records in Amazon DynamoDB and returns them as objects of
42
+ # the current class.
43
+ #
44
+ # Finding `:all` returns an enumerable scope object
45
+ #
46
+ # People.find(:all, :limit => 10).each do |person|
47
+ # puts person.name
48
+ # end
49
+ #
50
+ # Finding `:first` returns a single record (or nil)
51
+ #
52
+ # boss = People.find(:first)
53
+ #
54
+ # Find accepts a hash of find modifiers (`:shard` and `:limit`).
55
+ # You can also choose to omit these modifiers and
56
+ # chain them on the scope object returned. In the following
57
+ # example only one request is made to SimpleDB (when #each is
58
+ # called)
59
+ #
60
+ # people = People.find(:all, :limit => 10)
61
+ #
62
+ # people = people.limit(10).find(:all)
63
+ #
64
+ # @overload find(id)
65
+ # @param id The record to find, raises an exception if the record is
66
+ # not found.
67
+ #
68
+ # @overload find(mode, options = {})
69
+ # @param [:all,:first] mode (:all) When finding `:all` matching records
70
+ # and array is returned of records. When finding `:first` then
71
+ # `nil` or a single record will be returned.
72
+ # @param [Hash] options
73
+ # @option options [Integer] :shard The shard name of the Amazon
74
+ # DynamoDB table to search.
75
+ # @option options [Integer] :limit The max number of records to fetch.
76
+ def find *args
77
+ new_scope.find(*args)
78
+ end
79
+
80
+ # Returns a chainable scope object that restricts further scopes to a
81
+ # particular table.
82
+ #
83
+ # Book.shard('books-2').each do |book|
84
+ # # ...
85
+ # end
86
+ #
87
+ # @param [String] shard_name
88
+ # @return [Scope] Returns a scope for restricting the table searched.
89
+ def shard shard_name
90
+ new_scope.shard(shard_name)
91
+ end
92
+ alias_method :domain, :shard # backwards compat
93
+
94
+ # Returns an enumerable scope object represents all records.
95
+ #
96
+ # Book.all.each do |book|
97
+ # # ...
98
+ # end
99
+ #
100
+ # This method is equivalent to `find(:all)`, and therefore you can also
101
+ # pass aditional options.
102
+ #
103
+ # Book.all(:where => { :author' => 'me' }).each do |my_book|
104
+ # # ...
105
+ # end
106
+ #
107
+ # @return [Scope] Returns an enumerable scope object.
108
+ #
109
+ def all options = {}
110
+ new_scope.find(:all, options)
111
+ end
112
+
113
+ # Yields once for each record.
114
+ def each &block
115
+ all.each(&block)
116
+ end
117
+
118
+ # Counts records Amazon DynamoDB.
119
+ #
120
+ # class Product < AWS::Record::HashModel
121
+ # end
122
+ #
123
+ # # returns the count of records in the 'Product' table
124
+ # Product.count
125
+ #
126
+ # You can specify the table via #shard
127
+ #
128
+ # # returns the count of records in the 'products-1' table
129
+ # Product.shard('products-1').count
130
+ #
131
+ # You can also specify the shard as an option to #count.
132
+ #
133
+ # Product.count(:shard => 'table-name')
134
+ #
135
+ # Chaining #count with #limit has no effect on the count.
136
+ #
137
+ # Product.limit(10).count # same as Product.count, limit ignored
138
+ #
139
+ # @param [Hash] options
140
+ #
141
+ # @option [String] :shard Which shard to count records in.
142
+ #
143
+ # @return [Integer] The count of records in the table.
144
+ #
145
+ def count options = {}
146
+ new_scope.count(options)
147
+ end
148
+ alias_method :size, :count
149
+
150
+ # @return [Object,nil] Returns the first record found. If there were
151
+ # no records found, nil is returned.
152
+ def first options = {}
153
+ new_scope.first(options)
154
+ end
155
+
156
+ # The maximum number of records to return. By default, all records
157
+ # matching the where conditions will be returned from a find.
158
+ #
159
+ # People.limit(10).each {|person| ... }
160
+ #
161
+ # Limit can be chained with other scope modifiers:
162
+ #
163
+ # People.where(:age => 40).limit(10).each {|person| ... }
164
+ #
165
+ def limit limit
166
+ new_scope.limit(limit)
167
+ end
168
+
169
+ end
170
+ end
171
+ end
172
+ end
@@ -0,0 +1,108 @@
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
+ module Record
16
+ class HashModel
17
+
18
+ # The primary interface for finding records with {AWS::Record::HashModel}.
19
+ #
20
+ # ## Getting a Scope Object
21
+ #
22
+ # You should normally never need to construct a Scope object directly.
23
+ # Scope objects are returned from the AWS::Record::HashModel finder
24
+ # methods # (e.g. `shard` and `limit`).
25
+ #
26
+ # books = Book.limit(100)
27
+ # books.class #=> AWS::Record::HashModel::Scope
28
+ #
29
+ # Scopes are also returned from methods defined with the `scope` method.
30
+ #
31
+ # class Book < AWS::Record::HashModel
32
+ # scope :sampling, limit(10)
33
+ # end
34
+ #
35
+ # Book.sampling #=> returns a scope that limits to 10
36
+ #
37
+ # ## Chaining Scopes
38
+ #
39
+ # Scope objects represent a request, but do not actualy make a request
40
+ # until required. This allows you to chain requests
41
+ #
42
+ # # no request made by the following 2 statements
43
+ # books = Book.shard('books-1') # what table to search
44
+ # books = books.limit(10) # how many records to fetch
45
+ #
46
+ # books.each do |book|
47
+ # # yields up to 10 books from the table 'books-1'
48
+ # end
49
+ #
50
+ # The following methods returns a scope that can be chained.
51
+ #
52
+ # * {#shard}
53
+ # * {#limit}
54
+ #
55
+ # ## Terminating Scopes
56
+ #
57
+ # To terminate a scope you can enumerate it or call #first.
58
+ #
59
+ # # terminate a scope by enumerating
60
+ # Book.limit(10).each {|book| ... }
61
+ #
62
+ # # terminate a scope by getting the first record
63
+ # Book.shard('books-1').first
64
+ #
65
+ class Scope < Record::Scope
66
+
67
+ private
68
+ def _each_object &block
69
+
70
+ items = _item_collection
71
+
72
+ items.select(:limit => @options[:limit]).each do |item_data|
73
+ obj = base_class.new(:shard => _shard)
74
+ obj.send(:hydrate, item_data.attributes['id'], item_data.attributes)
75
+ yield(obj)
76
+ end
77
+
78
+ end
79
+
80
+ private
81
+ def _merge_scope scope
82
+ merged = self
83
+ scope.instance_variable_get('@options').each_pair do |opt_name,opt_value|
84
+ unless [nil, []].include?(opt_value)
85
+ merged = merged.send(opt_name, *opt_value)
86
+ end
87
+ end
88
+ merged
89
+ end
90
+
91
+ private
92
+ def _handle_options options
93
+ scope = self
94
+ options.each_pair do |method, args|
95
+ scope = scope.send(method, *args)
96
+ end
97
+ scope
98
+ end
99
+
100
+ private
101
+ def _item_collection
102
+ base_class.dynamo_db_table(_shard).items
103
+ end
104
+
105
+ end
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,453 @@
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
+ # todo move these to included modules (like validations and naming)
15
+
16
+
17
+ module AWS
18
+ module Record
19
+
20
+ # An ActiveRecord-like interface built ontop of Amazon SimpleDB.
21
+ #
22
+ # class Book < AWS::Record::Model
23
+ #
24
+ # string_attr :title
25
+ # string_attr :author
26
+ # integer_attr :number_of_pages
27
+ #
28
+ # timestamps # adds a :created_at and :updated_at pair of timestamps
29
+ #
30
+ # end
31
+ #
32
+ # b = Book.new(:title => 'My Book', :author => 'Me', :pages => 1)
33
+ # b.save
34
+ #
35
+ # # Attribute Macros
36
+ #
37
+ # When extending AWS::Record::Model you should first consider what
38
+ # attributes your class should have. Unlike ActiveRecord, AWS::Record
39
+ # models are not backed by a database table/schema. You must choose what
40
+ # attributes (and what types) you need.
41
+ #
42
+ # * `string_attr`
43
+ # * `boolean_attr`
44
+ # * `integer_attr`
45
+ # * `float_attr`
46
+ # * `datetime_attr`
47
+ # * `date_attr`
48
+ #
49
+ # ### Usage
50
+ #
51
+ # Normally you just call these methods inside your model class definition:
52
+ #
53
+ # class Book < AWS::Record::Model
54
+ # string_attr :title
55
+ # boolean_attr :has_been_read
56
+ # integer_attr :number_of_pages
57
+ # float_attr :weight_in_pounds
58
+ # datetime_attr :published_at
59
+ # end
60
+ #
61
+ # For each attribute macro a pair of setter/getter methods are added #
62
+ # to your class (and a few other useful methods).
63
+ #
64
+ # b = Book.new
65
+ # b.title = "My Book"
66
+ # b.has_been_read = true
67
+ # b.number_of_pages = 1000
68
+ # b.weight_in_pounds = 1.1
69
+ # b.published_at = Time.now
70
+ # b.save
71
+ #
72
+ # b.id #=> "0aa894ca-8223-4d34-831e-e5134b2bb71c"
73
+ # b.attributes
74
+ # #=> { 'title' => 'My Book', 'has_been_read' => true, ... }
75
+ #
76
+ # ### Default Values
77
+ #
78
+ # All attribute macros accept the `:default_value` option. This sets
79
+ # a value that is populated onto all new instnaces of the class.
80
+ #
81
+ # class Book < AWS::Record::Model
82
+ # string_attr :author, :default_value => 'Me'
83
+ # end
84
+ #
85
+ # Book.new.author #=> 'Me'
86
+ #
87
+ # ### Multi-Valued (Set) Attributes
88
+ #
89
+ # AWS::Record permits storing multiple values with a single attribute.
90
+ #
91
+ # class Book < AWS::Record::Model
92
+ # string_attr :tags, :set => true
93
+ # end
94
+ #
95
+ # b = Book.new
96
+ # b.tags #=> #<Set: {}>
97
+ #
98
+ # b.tags = ['fiction', 'fantasy']
99
+ # b.tags #=> #<Set: {'fiction', 'fantasy'}>
100
+ #
101
+ # These multi-valued attributes are treated as sets, not arrays. This
102
+ # means:
103
+ #
104
+ # * values are unordered
105
+ # * duplicate values are automatically omitted
106
+ #
107
+ # Please consider these limitations when you choose to use the `:set`
108
+ # option with the attribute macros.
109
+ #
110
+ # # Validations
111
+ #
112
+ # It's important to validate models before there are persisted to keep
113
+ # your data clean. AWS::Record supports most of the ActiveRecord style
114
+ # validators.
115
+ #
116
+ # class Book < AWS::Record::Model
117
+ # string_attr :title
118
+ # validates_presence_of :title
119
+ # end
120
+ #
121
+ # b = Book.new
122
+ # b.valid? #=> false
123
+ # b.errors.full_messages #=> ['Title may not be blank']
124
+ #
125
+ # Validations are checked before saving a record. If any of the validators
126
+ # adds an error, the the save will fail.
127
+ #
128
+ # For more information about the available validation methods see
129
+ # {Validations}.
130
+ #
131
+ # # Finder Methods
132
+ #
133
+ # You can find records by their ID. Each record gets a UUID when it
134
+ # is saved for the first time. You can use this ID to fetch the record
135
+ # at a latter time:
136
+ #
137
+ # b = Book["0aa894ca-8223-4d34-831e-e5134b2bb71c"]
138
+ #
139
+ # b = Book.find("0aa894ca-8223-4d34-831e-e5134b2bb71c")
140
+ #
141
+ # If you try to find a record by ID that has no data an error will
142
+ # be raised.
143
+ #
144
+ # ### All
145
+ #
146
+ # You can enumerate all of your records using `all`.
147
+ #
148
+ # Book.all.each do |book|
149
+ # puts book.id
150
+ # end
151
+ #
152
+ # Book.find(:all) do |book|
153
+ # puts book.id
154
+ # end
155
+ #
156
+ # Be careful when enumerating all. Depending on the number of records
157
+ # and number of attributes each record has, this can take a while,
158
+ # causing quite a few requests.
159
+ #
160
+ # ### First
161
+ #
162
+ # If you only want a single record, you should use `first`.
163
+ #
164
+ # b = Book.first
165
+ #
166
+ # ### Modifiers
167
+ #
168
+ # Frequently you do not want ALL records or the very first record. You
169
+ # can pass options to `find`, `all` and `first`.
170
+ #
171
+ # my_books = Book.find(:all, :where => 'owner = "Me"')
172
+ #
173
+ # book = Book.first(:where => { :has_been_read => false })
174
+ #
175
+ # You can pass as find options:
176
+ #
177
+ # * `:where` - Conditions that must be met to be returned
178
+ # * `:order` - The order to sort matched records by
179
+ # * `:limit` - The maximum number of records to return
180
+ #
181
+ # # Scopes
182
+ #
183
+ # More useful than writing query fragments all over the place is to
184
+ # name your most common conditions for reuse.
185
+ #
186
+ # class Book < AWS::Record::Model
187
+ #
188
+ # scope :mine, where(:owner => 'Me')
189
+ #
190
+ # scope :unread, where(:has_been_read => false)
191
+ #
192
+ # scope :by_popularity, order(:score, :desc)
193
+ #
194
+ # scope :top_10, by_popularity.limit(10)
195
+ #
196
+ # end
197
+ #
198
+ # # The following expression returns 10 books that belong
199
+ # # to me, that are unread sorted by popularity.
200
+ # next_good_reads = Book.mine.unread.top_10
201
+ #
202
+ # There are 3 standard scope methods:
203
+ #
204
+ # * `where`
205
+ # * `order`
206
+ # * `limit`
207
+ #
208
+ # ### Conditions (where)
209
+ #
210
+ # Where accepts aruments in a number of forms:
211
+ #
212
+ # 1. As an sql-like fragment. If you need to escape values this form is
213
+ # not suggested.
214
+ #
215
+ # Book.where('title = "My Book"')
216
+ #
217
+ # 2. An sql-like fragment, with placeholders. This escapes quoted
218
+ # arguments properly to avoid injection.
219
+ #
220
+ # Book.where('title = ?', 'My Book')
221
+ #
222
+ # 3. A hash of key-value pairs. This is the simplest form, but also the
223
+ # least flexible. You can not use this form if you need more complex
224
+ # expressions that use or.
225
+ #
226
+ # Book.where(:title => 'My Book')
227
+ #
228
+ # ### Order
229
+ #
230
+ # This orders the records as returned by AWS. Default ordering is ascending.
231
+ # Pass the value :desc as a second argument to sort in reverse ordering.
232
+ #
233
+ # Book.order(:title) # alphabetical ordering
234
+ # Book.order(:title, :desc) # reverse alphabetical ordering
235
+ #
236
+ # You may only order by a single attribute. If you call order twice in the
237
+ # chain, the last call gets presedence:
238
+ #
239
+ # Book.order(:title).order(:price)
240
+ #
241
+ # In this example the books will be ordered by :price and the order(:title)
242
+ # is lost.
243
+ #
244
+ # ### Limit
245
+ #
246
+ # Just call `limit` with an integer argument. This sets the maximum
247
+ # number of records to retrieve:
248
+ #
249
+ # Book.limit(2)
250
+ #
251
+ # ### Delayed Execution
252
+ #
253
+ # It should be noted that all finds are lazy (except `first`). This
254
+ # means the value returned is not an array of records, rather a handle
255
+ # to a {Scope} object that will return records when you enumerate over them.
256
+ #
257
+ # This allows you to build an expression without making unecessary requests.
258
+ # In the following example no request is made until the call to
259
+ # each_with_index.
260
+ #
261
+ # all_books = Books.all
262
+ # ten_books = all_books.limit(10)
263
+ #
264
+ # ten_books.each_with_index do |book,n|
265
+ # puts "#{n + 1} : #{book.title}"
266
+ # end
267
+ #
268
+ class Model
269
+
270
+ require 'aws/record/model/attributes'
271
+ require 'aws/record/model/finder_methods'
272
+ require 'aws/record/model/scope'
273
+
274
+ extend AbstractBase
275
+
276
+ # The id for each record is auto-generated. The default strategy
277
+ # generates uuid strings.
278
+ # @return [String] Returns the id string (uuid) for this record. Retuns
279
+ # nil if this is a new record that has not been persisted yet.
280
+ def id
281
+ @_id
282
+ end
283
+
284
+ # @return [Hash] A hash with attribute names as hash keys (strings) and
285
+ # attribute values (of mixed types) as hash values.
286
+ def attributes
287
+ attributes = super
288
+ attributes['id'] = id if persisted?
289
+ attributes
290
+ end
291
+
292
+ class << self
293
+
294
+ # Creates the SimpleDB domain that is configured for this class.
295
+ #
296
+ # class Product < AWS::Record::Model
297
+ # end
298
+ #
299
+ # Product.create_table #=> 'Product'
300
+ #
301
+ # If you share a single AWS account with multiple applications, you
302
+ # can provide a domain prefix for your model classes.
303
+ #
304
+ # AWS::Record.domain_prefix = 'myapp-'
305
+ #
306
+ # Product.create_table #=> 'myapp-Product'
307
+ #
308
+ # If you have set a model shard name, this is used in place of the
309
+ # class name.
310
+ #
311
+ # AWS::Record.domain_prefix = 'prod-'
312
+ # class Product < AWS::Record::Model
313
+ # set_shard_name 'products'
314
+ # end
315
+ #
316
+ # Product.create_table #=> 'prod-products'
317
+ #
318
+ # If you shard you data across multiple domains, you can specify the
319
+ # shard name:
320
+ #
321
+ # # create two domains, with the given names
322
+ # Product.create_domain 'products-1'
323
+ # Product.create_domain 'products-2'
324
+ #
325
+ # @param [optional,String] shard_name Defaults to the class name.
326
+ #
327
+ # @return [SimpleDB::Domain]
328
+ #
329
+ def create_domain shard_name = nil
330
+ sdb.domains.create(sdb_domain_name(shard_name))
331
+ end
332
+
333
+ # @return [AWS::SimpleDB::Domain]
334
+ # @api private
335
+ def sdb_domain shard_name = nil
336
+ sdb.domains[sdb_domain_name(shard_name)]
337
+ end
338
+
339
+ protected
340
+ def sdb_domain_name shard_name = nil
341
+ "#{AWS::Record.domain_prefix}#{self.shard_name(shard_name)}"
342
+ end
343
+
344
+ protected
345
+ def sdb
346
+ AWS::SimpleDB.new
347
+ end
348
+
349
+ end
350
+
351
+ # @return [SimpleDB::Item] Returns a reference to the item as stored in
352
+ # simple db.
353
+ # @api private
354
+ private
355
+ def sdb_item
356
+ sdb_domain.items[id]
357
+ end
358
+
359
+ # @return [SimpleDB::Domain] Returns the domain this record is
360
+ # persisted to or will be persisted to.
361
+ private
362
+ def sdb_domain
363
+ self.class.sdb_domain(shard)
364
+ end
365
+
366
+ # This function accepts a hash of item data (as returned from
367
+ # AttributeCollection#to_h or ItemData#attributes) and returns only
368
+ # the key/value pairs that are configured attribues for this class.
369
+ # @api private
370
+ private
371
+ def deserialize_item_data item_data
372
+
373
+ marked_for_deletion = item_data['_delete_'] || []
374
+
375
+ data = {}
376
+ item_data.each_pair do |attr_name,values|
377
+
378
+ attribute = self.class.attributes[attr_name]
379
+
380
+ next unless attribute
381
+ next if marked_for_deletion.include?(attr_name)
382
+
383
+ if attribute.set?
384
+ data[attr_name] = values.map{|v| attribute.deserialize(v) }
385
+ else
386
+ data[attr_name] = attribute.deserialize(values.first)
387
+ end
388
+
389
+ end
390
+ data
391
+ end
392
+
393
+ def hydrate(id, data)
394
+ @_id = id
395
+ super
396
+ end
397
+
398
+ # @api private
399
+ def populate_id
400
+ @_id = SecureRandom.uuid
401
+ end
402
+
403
+ # @api private
404
+ protected
405
+ def create_storage
406
+ to_add = serialize_attributes
407
+ sdb_item.attributes.add(to_add.merge(opt_lock_conditions))
408
+ end
409
+
410
+ # @api private
411
+ private
412
+ def update_storage
413
+
414
+ to_update = {}
415
+ to_delete = []
416
+
417
+ # serialized_attributes will raise error if the entire record is blank
418
+ attribute_values = serialize_attributes
419
+
420
+ changed.each do |attr_name|
421
+ if values = attribute_values[attr_name]
422
+ to_update[attr_name] = values
423
+ else
424
+ to_delete << attr_name
425
+ end
426
+ end
427
+
428
+ to_update.merge!(opt_lock_conditions)
429
+
430
+ if to_delete.empty?
431
+ sdb_item.attributes.replace(to_update)
432
+ else
433
+ sdb_item.attributes.replace(to_update.merge('_delete_' => to_delete))
434
+ sdb_item.attributes.delete(to_delete + ['_delete_'])
435
+ end
436
+
437
+ end
438
+
439
+ # @return [true]
440
+ # @api private
441
+ private
442
+ def delete_storage
443
+ sdb_item.delete(opt_lock_conditions)
444
+ @_deleted = true
445
+ end
446
+
447
+ end
448
+
449
+ # for backwards compatability with the old AWS::Record::Base
450
+ Base = Model
451
+
452
+ end
453
+ end