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,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,427 @@
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
+ require 'aws/record/abstract_base'
17
+ require 'aws/record/model/scope'
18
+ require 'aws/record/model/attributes'
19
+ require 'aws/record/model/finder_methods'
20
+
21
+ module AWS
22
+ module Record
23
+
24
+ # An ActiveRecord-like interface built ontop of Amazon SimpleDB.
25
+ #
26
+ # class Book < AWS::Record::Model
27
+ #
28
+ # string_attr :title
29
+ # string_attr :author
30
+ # integer_attr :number_of_pages
31
+ #
32
+ # timestamps # adds a :created_at and :updated_at pair of timestamps
33
+ #
34
+ # end
35
+ #
36
+ # b = Book.new(:title => 'My Book', :author => 'Me', :pages => 1)
37
+ # b.save
38
+ #
39
+ # = Attribute Macros
40
+ #
41
+ # When extending AWS::Record::Model you should first consider what
42
+ # attributes your class should have. Unlike ActiveRecord, AWS::Record
43
+ # models are not backed by a database table/schema. You must choose what
44
+ # attributes (and what types) you need.
45
+ #
46
+ # * +string_attr+
47
+ # * +boolean_attr+
48
+ # * +integer_attr+
49
+ # * +float_attr+
50
+ # * +datetime_attr+
51
+ # * +date_attr+
52
+ #
53
+ # === Usage
54
+ #
55
+ # Normally you just call these methods inside your model class definition:
56
+ #
57
+ # class Book < AWS::Record::Model
58
+ # string_attr :title
59
+ # boolean_attr :has_been_read
60
+ # integer_attr :number_of_pages
61
+ # float_attr :weight_in_pounds
62
+ # datetime_attr :published_at
63
+ # end
64
+ #
65
+ # For each attribute macro a pair of setter/getter methods are added #
66
+ # to your class (and a few other useful methods).
67
+ #
68
+ # b = Book.new
69
+ # b.title = "My Book"
70
+ # b.has_been_read = true
71
+ # b.number_of_pages = 1000
72
+ # b.weight_in_pounds = 1.1
73
+ # b.published_at = Time.now
74
+ # b.save
75
+ #
76
+ # b.id #=> "0aa894ca-8223-4d34-831e-e5134b2bb71c"
77
+ # b.attributes
78
+ # #=> { 'title' => 'My Book', 'has_been_read' => true, ... }
79
+ #
80
+ # === Default Values
81
+ #
82
+ # All attribute macros accept the +:default_value+ option. This sets
83
+ # a value that is populated onto all new instnaces of the class.
84
+ #
85
+ # class Book < AWS::Record::Model
86
+ # string_attr :author, :default_value => 'Me'
87
+ # end
88
+ #
89
+ # Book.new.author #=> 'Me'
90
+ #
91
+ # === Multi-Valued (Set) Attributes
92
+ #
93
+ # AWS::Record permits storing multiple values with a single attribute.
94
+ #
95
+ # class Book < AWS::Record::Model
96
+ # string_attr :tags, :set => true
97
+ # end
98
+ #
99
+ # b = Book.new
100
+ # b.tags #=> #<Set: {}>
101
+ #
102
+ # b.tags = ['fiction', 'fantasy']
103
+ # b.tags #=> #<Set: {'fiction', 'fantasy'}>
104
+ #
105
+ # These multi-valued attributes are treated as sets, not arrays. This
106
+ # means:
107
+ #
108
+ # * values are unordered
109
+ # * duplicate values are automatically omitted
110
+ #
111
+ # Please consider these limitations when you choose to use the +:set+
112
+ # option with the attribute macros.
113
+ #
114
+ # = Validations
115
+ #
116
+ # It's important to validate models before there are persisted to keep
117
+ # your data clean. AWS::Record supports most of the ActiveRecord style
118
+ # validators.
119
+ #
120
+ # class Book < AWS::Record::Model
121
+ # string_attr :title
122
+ # validates_presence_of :title
123
+ # end
124
+ #
125
+ # b = Book.new
126
+ # b.valid? #=> false
127
+ # b.errors.full_messages #=> ['Title may not be blank']
128
+ #
129
+ # Validations are checked before saving a record. If any of the validators
130
+ # adds an error, the the save will fail.
131
+ #
132
+ # For more information about the available validation methods see
133
+ # {Validations}.
134
+ #
135
+ # = Finder Methods
136
+ #
137
+ # You can find records by their ID. Each record gets a UUID when it
138
+ # is saved for the first time. You can use this ID to fetch the record
139
+ # at a latter time:
140
+ #
141
+ # b = Book["0aa894ca-8223-4d34-831e-e5134b2bb71c"]
142
+ #
143
+ # b = Book.find("0aa894ca-8223-4d34-831e-e5134b2bb71c")
144
+ #
145
+ # If you try to find a record by ID that has no data an error will
146
+ # be raised.
147
+ #
148
+ # === All
149
+ #
150
+ # You can enumerate all of your records using +all+.
151
+ #
152
+ # Book.all.each do |book|
153
+ # puts book.id
154
+ # end
155
+ #
156
+ # Book.find(:all) do |book|
157
+ # puts book.id
158
+ # end
159
+ #
160
+ # Be careful when enumerating all. Depending on the number of records
161
+ # and number of attributes each record has, this can take a while,
162
+ # causing quite a few requests.
163
+ #
164
+ # === First
165
+ #
166
+ # If you only want a single record, you should use +first+.
167
+ #
168
+ # b = Book.first
169
+ #
170
+ # === Modifiers
171
+ #
172
+ # Frequently you do not want ALL records or the very first record. You
173
+ # can pass options to +find+, +all+ and +first+.
174
+ #
175
+ # my_books = Book.find(:all, :where => 'owner = "Me"')
176
+ #
177
+ # book = Book.first(:where => { :has_been_read => false })
178
+ #
179
+ # You can pass as find options:
180
+ #
181
+ # * +:where+ - Conditions that must be met to be returned
182
+ # * +:order+ - The order to sort matched records by
183
+ # * +:limit+ - The maximum number of records to return
184
+ #
185
+ # = Scopes
186
+ #
187
+ # More useful than writing query fragments all over the place is to
188
+ # name your most common conditions for reuse.
189
+ #
190
+ # class Book < AWS::Record::Model
191
+ #
192
+ # scope :mine, where(:owner => 'Me')
193
+ #
194
+ # scope :unread, where(:has_been_read => false)
195
+ #
196
+ # scope :by_popularity, order(:score, :desc)
197
+ #
198
+ # scope :top_10, by_popularity.limit(10)
199
+ #
200
+ # end
201
+ #
202
+ # # The following expression returns 10 books that belong
203
+ # # to me, that are unread sorted by popularity.
204
+ # next_good_reads = Book.mine.unread.top_10
205
+ #
206
+ # There are 3 standard scope methods:
207
+ #
208
+ # * +where+
209
+ # * +order+
210
+ # * +limit+
211
+ #
212
+ # === Conditions (where)
213
+ #
214
+ # Where accepts aruments in a number of forms:
215
+ #
216
+ # 1. As an sql-like fragment. If you need to escape values this form is
217
+ # not suggested.
218
+ #
219
+ # Book.where('title = "My Book"')
220
+ #
221
+ # 2. An sql-like fragment, with placeholders. This escapes quoted
222
+ # arguments properly to avoid injection.
223
+ #
224
+ # Book.where('title = ?', 'My Book')
225
+ #
226
+ # 3. A hash of key-value pairs. This is the simplest form, but also the
227
+ # least flexible. You can not use this form if you need more complex
228
+ # expressions that use or.
229
+ #
230
+ # Book.where(:title => 'My Book')
231
+ #
232
+ # === Order
233
+ #
234
+ # This orders the records as returned by AWS. Default ordering is ascending.
235
+ # Pass the value :desc as a second argument to sort in reverse ordering.
236
+ #
237
+ # Book.order(:title) # alphabetical ordering
238
+ # Book.order(:title, :desc) # reverse alphabetical ordering
239
+ #
240
+ # You may only order by a single attribute. If you call order twice in the
241
+ # chain, the last call gets presedence:
242
+ #
243
+ # Book.order(:title).order(:price)
244
+ #
245
+ # In this example the books will be ordered by :price and the order(:title)
246
+ # is lost.
247
+ #
248
+ # === Limit
249
+ #
250
+ # Just call +limit+ with an integer argument. This sets the maximum
251
+ # number of records to retrieve:
252
+ #
253
+ # Book.limit(2)
254
+ #
255
+ # === Delayed Execution
256
+ #
257
+ # It should be noted that all finds are lazy (except +first+). This
258
+ # means the value returned is not an array of records, rather a handle
259
+ # to a {Scope} object that will return records when you enumerate over them.
260
+ #
261
+ # This allows you to build an expression without making unecessary requests.
262
+ # In the following example no request is made until the call to
263
+ # each_with_index.
264
+ #
265
+ # all_books = Books.all
266
+ # ten_books = all_books.limit(10)
267
+ #
268
+ # ten_books.each_with_index do |book,n|
269
+ # puts "#{n + 1} : #{book.title}"
270
+ # end
271
+ #
272
+ class Model
273
+
274
+ extend AbstractBase
275
+
276
+ class << self
277
+
278
+ # Creates the SimpleDB domain that is configured for this class.
279
+ #
280
+ # class Product < AWS::Record::Model
281
+ # end
282
+ #
283
+ # Product.create_table #=> 'Product'
284
+ #
285
+ # If you share a single AWS account with multiple applications, you
286
+ # can provide a domain prefix for your model classes.
287
+ #
288
+ # AWS::Record.domain_prefix = 'myapp-'
289
+ #
290
+ # Product.create_table #=> 'myapp-Product'
291
+ #
292
+ # If you have set a model shard name, this is used in place of the
293
+ # class name.
294
+ #
295
+ # AWS::Record.domain_prefix = 'prod-'
296
+ # class Product < AWS::Record::Model
297
+ # set_shard_name 'products'
298
+ # end
299
+ #
300
+ # Product.create_table #=> 'prod-products'
301
+ #
302
+ # If you shard you data across multiple domains, you can specify the
303
+ # shard name:
304
+ #
305
+ # # create two domains, with the given names
306
+ # Product.create_domain 'products-1'
307
+ # Product.create_domain 'products-2'
308
+ #
309
+ # @param [optional,String] shard_name Defaults to the class name.
310
+ #
311
+ # @return [SimpleDB::Domain]
312
+ #
313
+ def create_domain shard_name = nil
314
+ sdb.domains.create(sdb_domain_name(shard_name))
315
+ end
316
+
317
+ # @return [AWS::SimpleDB::Domain]
318
+ # @private
319
+ def sdb_domain shard_name = nil
320
+ sdb.domains[sdb_domain_name(shard_name)]
321
+ end
322
+
323
+ protected
324
+ def sdb_domain_name shard_name = nil
325
+ "#{AWS::Record.domain_prefix}#{self.shard_name(shard_name)}"
326
+ end
327
+
328
+ protected
329
+ def sdb
330
+ AWS::SimpleDB.new
331
+ end
332
+
333
+ end
334
+
335
+ # @return [SimpleDB::Item] Returns a reference to the item as stored in
336
+ # simple db.
337
+ # @private
338
+ private
339
+ def sdb_item
340
+ sdb_domain.items[id]
341
+ end
342
+
343
+ # @return [SimpleDB::Domain] Returns the domain this record is
344
+ # persisted to or will be persisted to.
345
+ private
346
+ def sdb_domain
347
+ self.class.sdb_domain(shard)
348
+ end
349
+
350
+ # This function accepts a hash of item data (as returned from
351
+ # AttributeCollection#to_h or ItemData#attributes) and returns only
352
+ # the key/value pairs that are configured attribues for this class.
353
+ # @private
354
+ private
355
+ def deserialize_item_data item_data
356
+
357
+ marked_for_deletion = item_data['_delete_'] || []
358
+
359
+ data = {}
360
+ item_data.each_pair do |attr_name,values|
361
+
362
+ attribute = self.class.attributes[attr_name]
363
+
364
+ next unless attribute
365
+ next if marked_for_deletion.include?(attr_name)
366
+
367
+ if attribute.set?
368
+ data[attr_name] = values.map{|v| attribute.deserialize(v) }
369
+ else
370
+ data[attr_name] = attribute.deserialize(values.first)
371
+ end
372
+
373
+ end
374
+ data
375
+ end
376
+
377
+ # @private
378
+ protected
379
+ def create_storage
380
+ to_add = serialize_attributes
381
+ sdb_item.attributes.add(to_add.merge(opt_lock_conditions))
382
+ end
383
+
384
+ # @private
385
+ private
386
+ def update_storage
387
+
388
+ to_update = {}
389
+ to_delete = []
390
+
391
+ # serialized_attributes will raise error if the entire record is blank
392
+ attribute_values = serialize_attributes
393
+
394
+ changed.each do |attr_name|
395
+ if values = attribute_values[attr_name]
396
+ to_update[attr_name] = values
397
+ else
398
+ to_delete << attr_name
399
+ end
400
+ end
401
+
402
+ to_update.merge!(opt_lock_conditions)
403
+
404
+ if to_delete.empty?
405
+ sdb_item.attributes.replace(to_update)
406
+ else
407
+ sdb_item.attributes.replace(to_update.merge('_delete_' => to_delete))
408
+ sdb_item.attributes.delete(to_delete + ['_delete_'])
409
+ end
410
+
411
+ end
412
+
413
+ # @return [true]
414
+ # @private
415
+ private
416
+ def delete_storage
417
+ sdb_item.delete(opt_lock_conditions)
418
+ @_deleted = true
419
+ end
420
+
421
+ end
422
+
423
+ # for backwards compatability with the old AWS::Record::Base
424
+ Base = Model
425
+
426
+ end
427
+ end