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,379 @@
1
+ # Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ require 'aws/record/attributes.rb'
15
+
16
+ module AWS
17
+ module Record
18
+ class Model
19
+
20
+ module Attributes
21
+
22
+ class BooleanAttr < Record::Attributes::BooleanAttr
23
+ def self.serialize boolean, options = {}
24
+ super.to_s
25
+ end
26
+ end
27
+
28
+ class IntegerAttr < Record::Attributes::IntegerAttr
29
+ def self.serialize integer, options = {}
30
+ super.to_s
31
+ end
32
+ end
33
+
34
+ class FloatAttr < Record::Attributes::FloatAttr
35
+ def self.serialize float, options = {}
36
+ super.to_s
37
+ end
38
+ end
39
+
40
+ class SortableIntegerAttr < IntegerAttr
41
+
42
+ def initialize name, options = {}
43
+ range = options[:range]
44
+ raise ArgumentError, "missing required option :range" unless range
45
+ raise ArgumentError, ":range should be a integer range" unless
46
+ range.is_a?(Range) and range.first.is_a?(Integer)
47
+ super(name, options)
48
+ end
49
+
50
+ # Returns a serialized representation of the integer value suitable for
51
+ # storing in SimpleDB.
52
+ #
53
+ # attribute.serialize(123)
54
+ # #=> '123'
55
+ #
56
+ # # padded to the correct number of digits
57
+ # attribute.serialize('123', :range => (0..10_000)
58
+ # #=> '00123'
59
+ #
60
+ # # offset applied to make all values positive
61
+ # attribute.serialize('-55', :range => (-100..10_000)
62
+ # #=> '00045'
63
+ #
64
+ # @param [Integer] integer The number to serialize.
65
+ # @param [Hash] options
66
+ # @option options [required,Range] :range A range that represents the
67
+ # minimum and maximum values this integer can be.
68
+ # The returned value will have an offset applied (if min is
69
+ # less than 0) and will be zero padded.
70
+ # @return [String] A serialized representation of the integer.
71
+ def self.serialize integer, options = {}
72
+ expect(Integer, integer) do
73
+ check_range(integer, options)
74
+ offset_and_precision(options) do |offset,precision|
75
+ "%0#{precision}d" % (integer.to_i + offset)
76
+ end
77
+ end
78
+ end
79
+
80
+ def self.deserialize string_value, options = {}
81
+ offset_and_precision(options) do |offset,precision|
82
+ string_value.to_i - offset
83
+ end
84
+ end
85
+
86
+ protected
87
+ def self.offset_and_precision options, &block
88
+
89
+ min = options[:range].first
90
+ max = options[:range].last
91
+
92
+ offset = min < 0 ? min * -1 : 0
93
+ precision = (max + offset).to_s.length
94
+
95
+ yield(offset, precision)
96
+
97
+ end
98
+
99
+ def self.check_range number, options
100
+ unless options[:range].include?(number)
101
+ msg = "unable to serialize `#{number}`, falls outside " +
102
+ "the range #{options[:range]}"
103
+ raise msg
104
+ end
105
+ end
106
+
107
+ end
108
+
109
+ class SortableFloatAttr < FloatAttr
110
+
111
+ def initialize name, options = {}
112
+ range = options[:range]
113
+ raise ArgumentError, "missing required option :range" unless range
114
+ raise ArgumentError, ":range should be an integer range" unless
115
+ range.is_a?(Range) and range.first.is_a?(Integer)
116
+ super(name, options)
117
+ end
118
+
119
+ def self.serialize float, options = {}
120
+ expect(Float, float) do
121
+ left, right = float.to_s.split('.')
122
+ left = SortableIntegerAttr.serialize(left.to_i, options)
123
+ SortableIntegerAttr.check_range(float, options)
124
+ "#{left}.#{right}"
125
+ end
126
+ end
127
+
128
+ def self.deserialize string_value, options = {}
129
+ expect(String, string_value) do
130
+ left, right = string_value.split('.')
131
+ left = SortableIntegerAttr.deserialize(left, options)
132
+ "#{left}.#{right}".to_f
133
+ end
134
+ end
135
+
136
+ end
137
+
138
+ end
139
+
140
+ class << self
141
+
142
+ # Adds a string attribute to this class.
143
+ #
144
+ # @example A standard string attribute
145
+ #
146
+ # class Recipe < AWS::Record::Model
147
+ # string_attr :name
148
+ # end
149
+ #
150
+ # recipe = Recipe.new(:name => "Buttermilk Pancakes")
151
+ # recipe.name #=> 'Buttermilk Pancakes'
152
+ #
153
+ # @example A string attribute with +:set+ set to true
154
+ #
155
+ # class Recipe < AWS::Record::Model
156
+ # string_attr :tags, :set => true
157
+ # end
158
+ #
159
+ # recipe = Recipe.new(:tags => %w(popular dessert))
160
+ # recipe.tags #=> #<Set: {"popular", "desert"}>
161
+ #
162
+ # @param [Symbol] name The name of the attribute.
163
+ # @param [Hash] options
164
+ # @option options [Boolean] :set (false) When true this attribute
165
+ # can have multiple values.
166
+ def string_attr name, options = {}
167
+ add_attribute(Record::Attributes::StringAttr.new(name, options))
168
+ end
169
+
170
+ # Adds an integer attribute to this class.
171
+ #
172
+ # class Recipe < AWS::Record::Model
173
+ # integer_attr :servings
174
+ # end
175
+ #
176
+ # recipe = Recipe.new(:servings => '10')
177
+ # recipe.servings #=> 10
178
+ #
179
+ # @param [Symbol] name The name of the attribute.
180
+ # @param [Hash] options
181
+ # @option options [Boolean] :set (false) When true this attribute
182
+ # can have multiple values.
183
+ def integer_attr name, options = {}
184
+ add_attribute(Attributes::IntegerAttr.new(name, options))
185
+ end
186
+
187
+ # Adds a sortable integer attribute to this class.
188
+ #
189
+ # class Person < AWS::Record::Model
190
+ # sortable_integer_attr :age, :range => 0..150
191
+ # end
192
+ #
193
+ # person = Person.new(:age => 10)
194
+ # person.age #=> 10
195
+ #
196
+ # === Validations
197
+ #
198
+ # It is recomended to apply a validates_numericality_of with
199
+ # minimum and maximum value constraints. If a value is assigned
200
+ # to a sortable integer that falls outside of the +:range: it will
201
+ # raise a runtime error when the record is saved.
202
+ #
203
+ # === Difference Between Sortable an Regular Integer Attributes
204
+ #
205
+ # Because SimpleDB does not support numeric types, all values must
206
+ # be converted to strings. This complicates sorting by numeric values.
207
+ # To accomplish sorting numeric attributes the values must be
208
+ # zero padded and have an offset applied to eliminate negative values.
209
+ #
210
+ # @param [Symbol] name The name of the attribute.
211
+ # @param [Hash] options
212
+ # @option options [Range] :range A numeric range the represents the
213
+ # minimum and maximum values this attribute should accept.
214
+ # @option options [Boolean] :set (false) When true this attribute
215
+ # can have multiple values.
216
+ def sortable_integer_attr name, options = {}
217
+ add_attribute(Attributes::SortableIntegerAttr.new(name, options))
218
+ end
219
+
220
+ # Adds a float attribute to this class.
221
+ #
222
+ # class Listing < AWS::Record::Model
223
+ # float_attr :score
224
+ # end
225
+ #
226
+ # listing = Listing.new(:score => '123.456')
227
+ # listing.score # => 123.456
228
+ #
229
+ # @param [Symbol] name The name of the attribute.
230
+ # @param [Hash] options
231
+ # @option options [Boolean] :set (false) When true this attribute
232
+ # can have multiple values.
233
+ def float_attr name, options = {}
234
+ add_attribute(Attributes::FloatAttr.new(name, options))
235
+ end
236
+
237
+ # Adds sortable float attribute to this class.
238
+ #
239
+ # Persisted values are stored (and sorted) as strings. This makes it
240
+ # more difficult to sort numbers because they don't sort
241
+ # lexicographically unless they have been offset to be positive and
242
+ # then zero padded.
243
+ #
244
+ # === Postive Floats
245
+ #
246
+ # To store floats in a sort-friendly manor:
247
+ #
248
+ # sortable_float_attr :score, :range => (0..10)
249
+ #
250
+ # This will cause values like 5.5 to persist as a string like '05.5' so
251
+ # that they can be sorted lexicographically.
252
+ #
253
+ # === Negative Floats
254
+ #
255
+ # If you need to store negative sortable floats, increase your +:range+
256
+ # to include a negative value.
257
+ #
258
+ # sortable_float_attr :position, :range => (-10..10)
259
+ #
260
+ # AWS::Record will add 10 to all values and zero pad them
261
+ # (e.g. -10.0 will be represented as '00.0' and 10 will be represented as
262
+ # '20.0'). This will allow the values to be compared lexicographically.
263
+ #
264
+ # @note If you change the +:range+ after some values have been persisted
265
+ # you must also manually migrate all of the old values to have the
266
+ # correct padding & offset or they will be interpreted differently.
267
+ #
268
+ # @param [Symbol] name The name of the attribute.
269
+ # @param [Hash] options
270
+ # @option options [Range] :range The range of numbers this attribute
271
+ # should represent. The min and max values of this range will determine
272
+ # how many digits of precision are required and how much of an offset
273
+ # is required to make the numbers sort lexicographically.
274
+ # @option options [Boolean] :set (false) When true this attribute
275
+ # can have multiple values.
276
+ def sortable_float_attr name, options = {}
277
+ add_attribute(Attributes::SortableFloatAttr.new(name, options))
278
+ end
279
+
280
+ # Adds a boolean attribute to this class.
281
+ #
282
+ # @example
283
+ #
284
+ # class Book < AWS::Record::Model
285
+ # boolean_attr :read
286
+ # end
287
+ #
288
+ # b = Book.new
289
+ # b.read? # => false
290
+ # b.read = true
291
+ # b.read? # => true
292
+ #
293
+ # listing = Listing.new(:score => '123.456'
294
+ # listing.score # => 123.456
295
+ #
296
+ # @param [Symbol] name The name of the attribute.
297
+ def boolean_attr name, options = {}
298
+
299
+ attr = add_attribute(Attributes::BooleanAttr.new(name, options))
300
+
301
+ # add the boolean question mark method
302
+ define_method("#{attr.name}?") do
303
+ !!__send__(attr.name)
304
+ end
305
+
306
+ end
307
+
308
+ # Adds a datetime attribute to this class.
309
+ #
310
+ # @example A standard datetime attribute
311
+ #
312
+ # class Recipe < AWS::Record::Model
313
+ # datetime_attr :invented
314
+ # end
315
+ #
316
+ # recipe = Recipe.new(:invented => Time.now)
317
+ # recipe.invented #=> <DateTime ...>
318
+ #
319
+ # If you add a datetime_attr for +:created_at+ and/or +:updated_at+ those
320
+ # will be automanaged.
321
+ #
322
+ # @param [Symbol] name The name of the attribute.
323
+ #
324
+ # @param [Hash] options
325
+ #
326
+ # @option options [Boolean] :set (false) When true this attribute
327
+ # can have multiple date times.
328
+ #
329
+ def datetime_attr name, options = {}
330
+ add_attribute(Record::Attributes::DateTimeAttr.new(name, options))
331
+ end
332
+
333
+ # Adds a date attribute to this class.
334
+ #
335
+ # @example A standard date attribute
336
+ #
337
+ # class Person < AWS::Record::Model
338
+ # date_attr :birthdate
339
+ # end
340
+ #
341
+ # baby = Person.new
342
+ # baby.birthdate = Time.now
343
+ # baby.birthdate #=> <Date: ....>
344
+ #
345
+ # @param [Symbol] name The name of the attribute.
346
+ #
347
+ # @param [Hash] options
348
+ #
349
+ # @option options [Boolean] :set (false) When true this attribute
350
+ # can have multiple dates.
351
+ #
352
+ def date_attr name, options = {}
353
+ add_attribute(Record::Attributes::DateAttr.new(name, options))
354
+ end
355
+
356
+ # A convenience method for adding the standard two datetime attributes
357
+ # +:created_at+ and +:updated_at+.
358
+ #
359
+ # @example
360
+ #
361
+ # class Recipe < AWS::Record::Model
362
+ # timestamps
363
+ # end
364
+ #
365
+ # recipe = Recipe.new
366
+ # recipe.save
367
+ # recipe.created_at #=> <DateTime ...>
368
+ # recipe.updated_at #=> <DateTime ...>
369
+ #
370
+ def timestamps
371
+ c = datetime_attr :created_at
372
+ u = datetime_attr :updated_at
373
+ [c, u]
374
+ end
375
+
376
+ end
377
+ end
378
+ end
379
+ end
@@ -0,0 +1,232 @@
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 Model
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. domain)
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
+ domain = sdb_domain(options[:shard] || options[:domain])
29
+
30
+ data = domain.items[id].data.attributes
31
+
32
+ raise RecordNotFound, "no data found for id: #{id}" if data.empty?
33
+
34
+ obj = self.new(:shard => domain)
35
+ obj.send(:hydrate, id, data)
36
+ obj
37
+
38
+ end
39
+ alias_method :[], :find_by_id
40
+
41
+ # Finds records in SimpleDB and returns them as objects of the
42
+ # current class.
43
+ #
44
+ # Finding +:all+ returns an enumerable scope object
45
+ #
46
+ # People.find(:all, :order => [:age, :desc], :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, :where => { :boss => true })
53
+ #
54
+ # Find accepts a hash of find modifiers (+:where+, +:order+ and
55
+ # +:limit+). 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)
61
+ #
62
+ # johns = people.where(:name => 'John Doe')
63
+ #
64
+ # johns.order(:age, :desc).limit(10).each do |suspects|
65
+ # # ...
66
+ # end
67
+ #
68
+ # See also {where}, {order} and {limit} for more
69
+ # information and options.
70
+ #
71
+ # @overload find(id)
72
+ # @param id The record to find, raises an exception if the record is
73
+ # not found.
74
+ #
75
+ # @overload find(mode, options = {})
76
+ # @param [:all,:first] mode (:all) When finding +:all+ matching records
77
+ # and array is returned of records. When finding +:first+ then
78
+ # +nil+ or a single record will be returned.
79
+ # @param [Hash] options
80
+ # @option options [Mixed] :where Conditions that determine what
81
+ # records are returned.
82
+ # @option options [String,Array] :sort The order records should be
83
+ # returned in.
84
+ # @option options [Integer] :limit The max number of records to fetch.
85
+ def find *args
86
+ new_scope.find(*args)
87
+ end
88
+
89
+ # Returns a chainable scope object that restricts further scopes to a
90
+ # particular domain.
91
+ #
92
+ # Book.domain('books-2').each do |book|
93
+ # # ...
94
+ # end
95
+ #
96
+ # @param [String] shard_name
97
+ # @return [Scope] Returns a scope for restricting the domain of subsequent
98
+ def shard shard_name
99
+ new_scope.shard(shard_name)
100
+ end
101
+ alias_method :domain, :shard
102
+
103
+ # Returns an enumerable scope object represents all records.
104
+ #
105
+ # Book.all.each do |book|
106
+ # # ...
107
+ # end
108
+ #
109
+ # This method is equivalent to +find(:all)+, and therefore you can also
110
+ # pass aditional options. See {.find} for more information on what
111
+ # options you can pass.
112
+ #
113
+ # Book.all(:where => { :author' => 'me' }).each do |my_book|
114
+ # # ...
115
+ # end
116
+ #
117
+ # @return [Scope] Returns an enumerable scope object.
118
+ def all options = {}
119
+ new_scope.find(:all, options)
120
+ end
121
+
122
+ # Yields once for each record.
123
+ def each &block
124
+ all.each(&block)
125
+ end
126
+
127
+ # Counts records in SimpleDB.
128
+ #
129
+ # With no arguments, counts all records:
130
+ #
131
+ # People.count
132
+ #
133
+ # Accepts query options to count a subset of records:
134
+ #
135
+ # People.count(:where => { :boss => true })
136
+ #
137
+ # You can also count records on a scope object:
138
+ #
139
+ # People.find(:all).where(:boss => true).count
140
+ #
141
+ # See {find} and {Scope#count} for more details.
142
+ #
143
+ # @param [Hash] options (<code>{}</code>) Options for counting
144
+ # records.
145
+ #
146
+ # @option options [Mixed] :where Conditions that determine what
147
+ # records are counted.
148
+ # @option options [Integer] :limit The max number of records to count.
149
+ def count(options = {})
150
+ new_scope.count(options)
151
+ end
152
+ alias_method :size, :count
153
+
154
+ # @return [Object,nil] Returns the first record found. If there were
155
+ # no records found, nil is returned.
156
+ def first options = {}
157
+ new_scope.first(options)
158
+ end
159
+
160
+ # Limits which records are retried from SimpleDB when performing a find.
161
+ #
162
+ # Simple string condition
163
+ #
164
+ # Car.where('color = "red" or color = "blue"').each {|car| ... }
165
+ #
166
+ # String with placeholders for quoting params
167
+ #
168
+ # Car.where('color = ?', 'red')
169
+ #
170
+ # Car.where('color = ? OR style = ?', 'red', 'compact')
171
+ #
172
+ # # produces a condition using in, like: WHERE color IN ('red', 'blue')
173
+ # Car.where('color IN ?', ['red','blue'])
174
+ #
175
+ # Hash arguments
176
+ #
177
+ # # WHERE age = '40' AND gender = 'male'
178
+ # People.where(:age => 40, :gender => 'male').each {|person| ... }
179
+ #
180
+ # # WHERE name IN ('John', 'Jane')
181
+ # People.where(:name => ['John', 'Jane']).each{|person| ... }
182
+ #
183
+ # Chaining where with other scope modifiers
184
+ #
185
+ # # 10 most expensive red cars
186
+ # Car.where(:color => 'red').order(:price, :desc).limit(10)
187
+ #
188
+ # @overload where(conditions_hash)
189
+ # @param [Hash] conditions_hash A hash of attributes to values. Each
190
+ # key/value pair from the hash becomes a find condition. All
191
+ # conditions are joined by AND.
192
+ #
193
+ # @overload where(sql_fragment[, quote_params, ...])
194
+ #
195
+ def where *args
196
+ new_scope.where(*args)
197
+ end
198
+
199
+ # Defines the order in which records are returned when performing a find.
200
+ # SimpleDB only allows sorting by one attribute per request.
201
+ #
202
+ # # oldest to youngest
203
+ # People.order(:age, :desc).each {|person| ... }
204
+ #
205
+ # You can chain order with the other scope modifiers:
206
+ #
207
+ # Pepole.order(:age, :desc).limit(10).each {|person| ... }
208
+ #
209
+ # @overload order(attribute, direction = :asc)
210
+ # @param [String,Symbol] attribute The attribute to sort by.
211
+ # @param [:asc,:desc] direction (:asc) The direction to sort.
212
+ def order *args
213
+ new_scope.order(*args)
214
+ end
215
+
216
+ # The maximum number of records to return. By default, all records
217
+ # matching the where conditions will be returned from a find.
218
+ #
219
+ # People.limit(10).each {|person| ... }
220
+ #
221
+ # Limit can be chained with other scope modifiers:
222
+ #
223
+ # People.where(:age => 40).limit(10).each {|person| ... }
224
+ #
225
+ def limit limit
226
+ new_scope.limit(limit)
227
+ end
228
+
229
+ end
230
+ end
231
+ end
232
+ end