aws-sdk-v1 1.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (560) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +7 -0
  3. data/LICENSE.txt +12 -0
  4. data/README.md +337 -0
  5. data/bin/aws-rb +179 -0
  6. data/ca-bundle.crt +3554 -0
  7. data/endpoints.json +1671 -0
  8. data/lib/aws-sdk-v1.rb +2 -0
  9. data/lib/aws-sdk.rb +1 -0
  10. data/lib/aws.rb +14 -0
  11. data/lib/aws/api_config/AutoScaling-2011-01-01.yml +1070 -0
  12. data/lib/aws/api_config/CloudFormation-2010-05-15.yml +372 -0
  13. data/lib/aws/api_config/CloudFront-2013-05-12.yml +2448 -0
  14. data/lib/aws/api_config/CloudFront-2013-08-26.yml +2599 -0
  15. data/lib/aws/api_config/CloudFront-2013-09-27.yml +2765 -0
  16. data/lib/aws/api_config/CloudFront-2013-11-11.yml +2886 -0
  17. data/lib/aws/api_config/CloudFront-2013-11-22.yml +2918 -0
  18. data/lib/aws/api_config/CloudFront-2014-01-31.yml +2934 -0
  19. data/lib/aws/api_config/CloudFront-2014-05-31.yml +3100 -0
  20. data/lib/aws/api_config/CloudSearch-2011-02-01.yml +681 -0
  21. data/lib/aws/api_config/CloudSearch-2013-01-01.yml +1164 -0
  22. data/lib/aws/api_config/CloudTrail-2013-11-01.yml +130 -0
  23. data/lib/aws/api_config/CloudWatch-2010-08-01.yml +433 -0
  24. data/lib/aws/api_config/DataPipeline-2012-10-29.yml +422 -0
  25. data/lib/aws/api_config/DirectConnect-2012-10-25.yml +735 -0
  26. data/lib/aws/api_config/DynamoDB-2011-12-05.yml +1168 -0
  27. data/lib/aws/api_config/DynamoDB-2012-08-10.yml +2105 -0
  28. data/lib/aws/api_config/EC2-2013-08-15.yml +4708 -0
  29. data/lib/aws/api_config/EC2-2013-10-01.yml +4726 -0
  30. data/lib/aws/api_config/EC2-2013-10-15.yml +4651 -0
  31. data/lib/aws/api_config/EC2-2014-02-01.yml +4755 -0
  32. data/lib/aws/api_config/EC2-2014-05-01.yml +4812 -0
  33. data/lib/aws/api_config/ELB-2012-06-01.yml +766 -0
  34. data/lib/aws/api_config/EMR-2009-03-31.yml +972 -0
  35. data/lib/aws/api_config/ElastiCache-2013-06-15.yml +1188 -0
  36. data/lib/aws/api_config/ElastiCache-2014-03-24.yml +1375 -0
  37. data/lib/aws/api_config/ElastiCache-2014-07-15.yml +1385 -0
  38. data/lib/aws/api_config/ElasticBeanstalk-2010-12-01.yml +854 -0
  39. data/lib/aws/api_config/ElasticTranscoder-2012-09-25.yml +3082 -0
  40. data/lib/aws/api_config/Glacier-2012-06-01.yml +649 -0
  41. data/lib/aws/api_config/IAM-2010-05-08.yml +1339 -0
  42. data/lib/aws/api_config/ImportExport-2010-06-01.yml +109 -0
  43. data/lib/aws/api_config/Kinesis-2013-12-02.yml +201 -0
  44. data/lib/aws/api_config/OpsWorks-2013-02-18.yml +2025 -0
  45. data/lib/aws/api_config/RDS-2013-05-15.yml +2464 -0
  46. data/lib/aws/api_config/RDS-2013-09-09.yml +2640 -0
  47. data/lib/aws/api_config/Redshift-2012-12-01.yml +2161 -0
  48. data/lib/aws/api_config/Route53-2012-12-12.yml +547 -0
  49. data/lib/aws/api_config/Route53-2013-04-01.yml +889 -0
  50. data/lib/aws/api_config/SNS-2010-03-31.yml +448 -0
  51. data/lib/aws/api_config/SQS-2012-11-05.yml +404 -0
  52. data/lib/aws/api_config/STS-2011-06-15.yml +151 -0
  53. data/lib/aws/api_config/SimpleDB-2009-04-15.yml +306 -0
  54. data/lib/aws/api_config/SimpleEmailService-2010-12-01.yml +346 -0
  55. data/lib/aws/api_config/SimpleWorkflow-2012-01-25.yml +2388 -0
  56. data/lib/aws/api_config/StorageGateway-2012-06-30.yml +748 -0
  57. data/lib/aws/api_config/StorageGateway-2013-06-30.yml +1025 -0
  58. data/lib/aws/api_config/Support-2013-04-15.yml +489 -0
  59. data/lib/aws/auto_scaling.rb +163 -0
  60. data/lib/aws/auto_scaling/activity.rb +102 -0
  61. data/lib/aws/auto_scaling/activity_collection.rb +81 -0
  62. data/lib/aws/auto_scaling/client.rb +48 -0
  63. data/lib/aws/auto_scaling/config.rb +18 -0
  64. data/lib/aws/auto_scaling/errors.rb +22 -0
  65. data/lib/aws/auto_scaling/group.rb +421 -0
  66. data/lib/aws/auto_scaling/group_collection.rb +96 -0
  67. data/lib/aws/auto_scaling/group_options.rb +155 -0
  68. data/lib/aws/auto_scaling/instance.rb +192 -0
  69. data/lib/aws/auto_scaling/instance_collection.rb +63 -0
  70. data/lib/aws/auto_scaling/launch_configuration.rb +162 -0
  71. data/lib/aws/auto_scaling/launch_configuration_collection.rb +160 -0
  72. data/lib/aws/auto_scaling/notification_configuration.rb +89 -0
  73. data/lib/aws/auto_scaling/notification_configuration_collection.rb +183 -0
  74. data/lib/aws/auto_scaling/scaling_policy.rb +142 -0
  75. data/lib/aws/auto_scaling/scaling_policy_collection.rb +72 -0
  76. data/lib/aws/auto_scaling/scaling_policy_options.rb +65 -0
  77. data/lib/aws/auto_scaling/scheduled_action.rb +141 -0
  78. data/lib/aws/auto_scaling/scheduled_action_collection.rb +202 -0
  79. data/lib/aws/auto_scaling/tag.rb +59 -0
  80. data/lib/aws/auto_scaling/tag_collection.rb +114 -0
  81. data/lib/aws/cloud_formation.rb +272 -0
  82. data/lib/aws/cloud_formation/client.rb +48 -0
  83. data/lib/aws/cloud_formation/config.rb +18 -0
  84. data/lib/aws/cloud_formation/errors.rb +22 -0
  85. data/lib/aws/cloud_formation/stack.rb +266 -0
  86. data/lib/aws/cloud_formation/stack_collection.rb +232 -0
  87. data/lib/aws/cloud_formation/stack_event.rb +73 -0
  88. data/lib/aws/cloud_formation/stack_event_collection.rb +47 -0
  89. data/lib/aws/cloud_formation/stack_options.rb +72 -0
  90. data/lib/aws/cloud_formation/stack_output.rb +53 -0
  91. data/lib/aws/cloud_formation/stack_resource.rb +117 -0
  92. data/lib/aws/cloud_formation/stack_resource_collection.rb +83 -0
  93. data/lib/aws/cloud_formation/stack_resource_summary_collection.rb +64 -0
  94. data/lib/aws/cloud_formation/stack_summary_collection.rb +123 -0
  95. data/lib/aws/cloud_front.rb +72 -0
  96. data/lib/aws/cloud_front/client.rb +57 -0
  97. data/lib/aws/cloud_front/config.rb +18 -0
  98. data/lib/aws/cloud_front/errors.rb +22 -0
  99. data/lib/aws/cloud_search.rb +73 -0
  100. data/lib/aws/cloud_search/client.rb +40 -0
  101. data/lib/aws/cloud_search/config.rb +18 -0
  102. data/lib/aws/cloud_search/errors.rb +22 -0
  103. data/lib/aws/cloud_trail.rb +72 -0
  104. data/lib/aws/cloud_trail/client.rb +35 -0
  105. data/lib/aws/cloud_trail/config.rb +18 -0
  106. data/lib/aws/cloud_trail/errors.rb +22 -0
  107. data/lib/aws/cloud_watch.rb +118 -0
  108. data/lib/aws/cloud_watch/alarm.rb +293 -0
  109. data/lib/aws/cloud_watch/alarm_collection.rb +153 -0
  110. data/lib/aws/cloud_watch/alarm_history_item.rb +50 -0
  111. data/lib/aws/cloud_watch/alarm_history_item_collection.rb +84 -0
  112. data/lib/aws/cloud_watch/client.rb +40 -0
  113. data/lib/aws/cloud_watch/config.rb +18 -0
  114. data/lib/aws/cloud_watch/errors.rb +22 -0
  115. data/lib/aws/cloud_watch/metric.rb +135 -0
  116. data/lib/aws/cloud_watch/metric_alarm_collection.rb +160 -0
  117. data/lib/aws/cloud_watch/metric_collection.rb +129 -0
  118. data/lib/aws/cloud_watch/metric_statistics.rb +69 -0
  119. data/lib/aws/core.rb +716 -0
  120. data/lib/aws/core/async_handle.rb +90 -0
  121. data/lib/aws/core/cacheable.rb +77 -0
  122. data/lib/aws/core/client.rb +787 -0
  123. data/lib/aws/core/collection.rb +263 -0
  124. data/lib/aws/core/collection/simple.rb +82 -0
  125. data/lib/aws/core/collection/with_limit_and_next_token.rb +71 -0
  126. data/lib/aws/core/collection/with_next_token.rb +97 -0
  127. data/lib/aws/core/configuration.rb +542 -0
  128. data/lib/aws/core/credential_providers.rb +639 -0
  129. data/lib/aws/core/data.rb +247 -0
  130. data/lib/aws/core/deprecations.rb +84 -0
  131. data/lib/aws/core/endpoints.rb +37 -0
  132. data/lib/aws/core/http/connection_pool.rb +369 -0
  133. data/lib/aws/core/http/curb_handler.rb +148 -0
  134. data/lib/aws/core/http/handler.rb +89 -0
  135. data/lib/aws/core/http/net_http_handler.rb +144 -0
  136. data/lib/aws/core/http/patch.rb +102 -0
  137. data/lib/aws/core/http/request.rb +259 -0
  138. data/lib/aws/core/http/response.rb +81 -0
  139. data/lib/aws/core/indifferent_hash.rb +88 -0
  140. data/lib/aws/core/inflection.rb +56 -0
  141. data/lib/aws/core/ini_parser.rb +42 -0
  142. data/lib/aws/core/json_client.rb +47 -0
  143. data/lib/aws/core/json_parser.rb +76 -0
  144. data/lib/aws/core/json_request_builder.rb +35 -0
  145. data/lib/aws/core/json_response_parser.rb +79 -0
  146. data/lib/aws/core/lazy_error_classes.rb +108 -0
  147. data/lib/aws/core/log_formatter.rb +428 -0
  148. data/lib/aws/core/managed_file.rb +32 -0
  149. data/lib/aws/core/meta_utils.rb +45 -0
  150. data/lib/aws/core/model.rb +62 -0
  151. data/lib/aws/core/naming.rb +30 -0
  152. data/lib/aws/core/option_grammar.rb +738 -0
  153. data/lib/aws/core/options/json_serializer.rb +82 -0
  154. data/lib/aws/core/options/validator.rb +155 -0
  155. data/lib/aws/core/options/xml_serializer.rb +118 -0
  156. data/lib/aws/core/page_result.rb +75 -0
  157. data/lib/aws/core/policy.rb +941 -0
  158. data/lib/aws/core/query_client.rb +41 -0
  159. data/lib/aws/core/query_error_parser.rb +24 -0
  160. data/lib/aws/core/query_request_builder.rb +47 -0
  161. data/lib/aws/core/query_response_parser.rb +35 -0
  162. data/lib/aws/core/region.rb +85 -0
  163. data/lib/aws/core/region_collection.rb +80 -0
  164. data/lib/aws/core/resource.rb +413 -0
  165. data/lib/aws/core/resource_cache.rb +40 -0
  166. data/lib/aws/core/response.rb +215 -0
  167. data/lib/aws/core/response_cache.rb +50 -0
  168. data/lib/aws/core/rest_error_parser.rb +24 -0
  169. data/lib/aws/core/rest_json_client.rb +40 -0
  170. data/lib/aws/core/rest_request_builder.rb +154 -0
  171. data/lib/aws/core/rest_response_parser.rb +66 -0
  172. data/lib/aws/core/rest_xml_client.rb +47 -0
  173. data/lib/aws/core/service_interface.rb +83 -0
  174. data/lib/aws/core/signers/base.rb +46 -0
  175. data/lib/aws/core/signers/cloud_front.rb +56 -0
  176. data/lib/aws/core/signers/s3.rb +159 -0
  177. data/lib/aws/core/signers/version_2.rb +72 -0
  178. data/lib/aws/core/signers/version_3.rb +86 -0
  179. data/lib/aws/core/signers/version_3_https.rb +61 -0
  180. data/lib/aws/core/signers/version_4.rb +228 -0
  181. data/lib/aws/core/signers/version_4/chunk_signed_stream.rb +191 -0
  182. data/lib/aws/core/uri_escape.rb +44 -0
  183. data/lib/aws/core/xml/frame.rb +245 -0
  184. data/lib/aws/core/xml/frame_stack.rb +85 -0
  185. data/lib/aws/core/xml/grammar.rb +307 -0
  186. data/lib/aws/core/xml/parser.rb +70 -0
  187. data/lib/aws/core/xml/root_frame.rb +65 -0
  188. data/lib/aws/core/xml/sax_handlers/libxml.rb +47 -0
  189. data/lib/aws/core/xml/sax_handlers/nokogiri.rb +56 -0
  190. data/lib/aws/core/xml/sax_handlers/ox.rb +41 -0
  191. data/lib/aws/core/xml/sax_handlers/rexml.rb +47 -0
  192. data/lib/aws/core/xml/stub.rb +123 -0
  193. data/lib/aws/data_pipeline.rb +72 -0
  194. data/lib/aws/data_pipeline/client.rb +36 -0
  195. data/lib/aws/data_pipeline/config.rb +18 -0
  196. data/lib/aws/data_pipeline/errors.rb +20 -0
  197. data/lib/aws/direct_connect.rb +73 -0
  198. data/lib/aws/direct_connect/client.rb +36 -0
  199. data/lib/aws/direct_connect/config.rb +18 -0
  200. data/lib/aws/direct_connect/errors.rb +22 -0
  201. data/lib/aws/dynamo_db.rb +230 -0
  202. data/lib/aws/dynamo_db/attribute_collection.rb +456 -0
  203. data/lib/aws/dynamo_db/batch_get.rb +213 -0
  204. data/lib/aws/dynamo_db/batch_write.rb +254 -0
  205. data/lib/aws/dynamo_db/binary.rb +35 -0
  206. data/lib/aws/dynamo_db/client.rb +129 -0
  207. data/lib/aws/dynamo_db/client/v20111205.rb +1266 -0
  208. data/lib/aws/dynamo_db/client/v20120810.rb +1409 -0
  209. data/lib/aws/dynamo_db/client_v2.rb +44 -0
  210. data/lib/aws/dynamo_db/config.rb +24 -0
  211. data/lib/aws/dynamo_db/errors.rb +20 -0
  212. data/lib/aws/dynamo_db/expectations.rb +40 -0
  213. data/lib/aws/dynamo_db/item.rb +133 -0
  214. data/lib/aws/dynamo_db/item_collection.rb +856 -0
  215. data/lib/aws/dynamo_db/item_data.rb +31 -0
  216. data/lib/aws/dynamo_db/keys.rb +41 -0
  217. data/lib/aws/dynamo_db/primary_key_element.rb +48 -0
  218. data/lib/aws/dynamo_db/resource.rb +33 -0
  219. data/lib/aws/dynamo_db/table.rb +492 -0
  220. data/lib/aws/dynamo_db/table_collection.rb +165 -0
  221. data/lib/aws/dynamo_db/types.rb +111 -0
  222. data/lib/aws/ec2.rb +428 -0
  223. data/lib/aws/ec2/attachment.rb +135 -0
  224. data/lib/aws/ec2/attachment_collection.rb +54 -0
  225. data/lib/aws/ec2/availability_zone.rb +86 -0
  226. data/lib/aws/ec2/availability_zone_collection.rb +43 -0
  227. data/lib/aws/ec2/block_device_mappings.rb +53 -0
  228. data/lib/aws/ec2/client.rb +154 -0
  229. data/lib/aws/ec2/collection.rb +36 -0
  230. data/lib/aws/ec2/config.rb +21 -0
  231. data/lib/aws/ec2/customer_gateway.rb +90 -0
  232. data/lib/aws/ec2/customer_gateway_collection.rb +73 -0
  233. data/lib/aws/ec2/dhcp_options.rb +106 -0
  234. data/lib/aws/ec2/dhcp_options_collection.rb +87 -0
  235. data/lib/aws/ec2/elastic_ip.rb +209 -0
  236. data/lib/aws/ec2/elastic_ip_collection.rb +93 -0
  237. data/lib/aws/ec2/errors.rb +32 -0
  238. data/lib/aws/ec2/export_task.rb +120 -0
  239. data/lib/aws/ec2/export_task_collection.rb +67 -0
  240. data/lib/aws/ec2/filtered_collection.rb +87 -0
  241. data/lib/aws/ec2/has_permissions.rb +44 -0
  242. data/lib/aws/ec2/image.rb +270 -0
  243. data/lib/aws/ec2/image_collection.rb +219 -0
  244. data/lib/aws/ec2/instance.rb +803 -0
  245. data/lib/aws/ec2/instance_collection.rb +402 -0
  246. data/lib/aws/ec2/internet_gateway.rb +122 -0
  247. data/lib/aws/ec2/internet_gateway/attachment.rb +78 -0
  248. data/lib/aws/ec2/internet_gateway_collection.rb +54 -0
  249. data/lib/aws/ec2/key_pair.rb +82 -0
  250. data/lib/aws/ec2/key_pair_collection.rb +99 -0
  251. data/lib/aws/ec2/network_acl.rb +256 -0
  252. data/lib/aws/ec2/network_acl/association.rb +56 -0
  253. data/lib/aws/ec2/network_acl/entry.rb +147 -0
  254. data/lib/aws/ec2/network_acl_collection.rb +64 -0
  255. data/lib/aws/ec2/network_interface.rb +237 -0
  256. data/lib/aws/ec2/network_interface/attachment.rb +100 -0
  257. data/lib/aws/ec2/network_interface_collection.rb +103 -0
  258. data/lib/aws/ec2/permission_collection.rb +174 -0
  259. data/lib/aws/ec2/region.rb +106 -0
  260. data/lib/aws/ec2/region_collection.rb +51 -0
  261. data/lib/aws/ec2/reserved_instances.rb +57 -0
  262. data/lib/aws/ec2/reserved_instances_collection.rb +40 -0
  263. data/lib/aws/ec2/reserved_instances_offering.rb +60 -0
  264. data/lib/aws/ec2/reserved_instances_offering_collection.rb +45 -0
  265. data/lib/aws/ec2/resource.rb +161 -0
  266. data/lib/aws/ec2/resource_tag_collection.rb +211 -0
  267. data/lib/aws/ec2/route_table.rb +205 -0
  268. data/lib/aws/ec2/route_table/association.rb +119 -0
  269. data/lib/aws/ec2/route_table/route.rb +119 -0
  270. data/lib/aws/ec2/route_table_collection.rb +72 -0
  271. data/lib/aws/ec2/security_group.rb +482 -0
  272. data/lib/aws/ec2/security_group/ip_permission.rb +135 -0
  273. data/lib/aws/ec2/security_group/ip_permission_collection.rb +82 -0
  274. data/lib/aws/ec2/security_group_collection.rb +133 -0
  275. data/lib/aws/ec2/snapshot.rb +143 -0
  276. data/lib/aws/ec2/snapshot_collection.rb +131 -0
  277. data/lib/aws/ec2/subnet.rb +161 -0
  278. data/lib/aws/ec2/subnet_collection.rb +119 -0
  279. data/lib/aws/ec2/tag.rb +81 -0
  280. data/lib/aws/ec2/tag_collection.rb +107 -0
  281. data/lib/aws/ec2/tagged_collection.rb +67 -0
  282. data/lib/aws/ec2/tagged_item.rb +85 -0
  283. data/lib/aws/ec2/volume.rb +185 -0
  284. data/lib/aws/ec2/volume_collection.rb +102 -0
  285. data/lib/aws/ec2/vpc.rb +174 -0
  286. data/lib/aws/ec2/vpc_collection.rb +70 -0
  287. data/lib/aws/ec2/vpn_connection.rb +99 -0
  288. data/lib/aws/ec2/vpn_connection/telemetry.rb +49 -0
  289. data/lib/aws/ec2/vpn_connection_collection.rb +96 -0
  290. data/lib/aws/ec2/vpn_gateway.rb +123 -0
  291. data/lib/aws/ec2/vpn_gateway/attachment.rb +45 -0
  292. data/lib/aws/ec2/vpn_gateway_collection.rb +77 -0
  293. data/lib/aws/elastic_beanstalk.rb +49 -0
  294. data/lib/aws/elastic_beanstalk/client.rb +36 -0
  295. data/lib/aws/elastic_beanstalk/config.rb +18 -0
  296. data/lib/aws/elastic_beanstalk/errors.rb +22 -0
  297. data/lib/aws/elastic_transcoder.rb +29 -0
  298. data/lib/aws/elastic_transcoder/client.rb +48 -0
  299. data/lib/aws/elastic_transcoder/config.rb +18 -0
  300. data/lib/aws/elastic_transcoder/errors.rb +23 -0
  301. data/lib/aws/elasticache.rb +49 -0
  302. data/lib/aws/elasticache/client.rb +41 -0
  303. data/lib/aws/elasticache/config.rb +18 -0
  304. data/lib/aws/elasticache/errors.rb +22 -0
  305. data/lib/aws/elb.rb +66 -0
  306. data/lib/aws/elb/availability_zone_collection.rb +138 -0
  307. data/lib/aws/elb/backend_server_policy_collection.rb +139 -0
  308. data/lib/aws/elb/client.rb +35 -0
  309. data/lib/aws/elb/config.rb +18 -0
  310. data/lib/aws/elb/errors.rb +26 -0
  311. data/lib/aws/elb/instance_collection.rb +168 -0
  312. data/lib/aws/elb/listener.rb +190 -0
  313. data/lib/aws/elb/listener_collection.rb +113 -0
  314. data/lib/aws/elb/listener_opts.rb +45 -0
  315. data/lib/aws/elb/load_balancer.rb +280 -0
  316. data/lib/aws/elb/load_balancer_collection.rb +146 -0
  317. data/lib/aws/elb/load_balancer_policy.rb +93 -0
  318. data/lib/aws/elb/load_balancer_policy_collection.rb +208 -0
  319. data/lib/aws/emr.rb +87 -0
  320. data/lib/aws/emr/client.rb +35 -0
  321. data/lib/aws/emr/config.rb +18 -0
  322. data/lib/aws/emr/errors.rb +22 -0
  323. data/lib/aws/emr/instance_group.rb +138 -0
  324. data/lib/aws/emr/instance_group_collection.rb +82 -0
  325. data/lib/aws/emr/job_flow.rb +307 -0
  326. data/lib/aws/emr/job_flow_collection.rb +183 -0
  327. data/lib/aws/errors.rb +162 -0
  328. data/lib/aws/glacier.rb +79 -0
  329. data/lib/aws/glacier/archive.rb +56 -0
  330. data/lib/aws/glacier/archive_collection.rb +146 -0
  331. data/lib/aws/glacier/client.rb +49 -0
  332. data/lib/aws/glacier/config.rb +19 -0
  333. data/lib/aws/glacier/errors.rb +22 -0
  334. data/lib/aws/glacier/resource.rb +30 -0
  335. data/lib/aws/glacier/vault.rb +145 -0
  336. data/lib/aws/glacier/vault_collection.rb +75 -0
  337. data/lib/aws/glacier/vault_notification_configuration.rb +29 -0
  338. data/lib/aws/iam.rb +408 -0
  339. data/lib/aws/iam/access_key.rb +185 -0
  340. data/lib/aws/iam/access_key_collection.rb +128 -0
  341. data/lib/aws/iam/account_alias_collection.rb +79 -0
  342. data/lib/aws/iam/client.rb +49 -0
  343. data/lib/aws/iam/collection.rb +83 -0
  344. data/lib/aws/iam/config.rb +18 -0
  345. data/lib/aws/iam/errors.rb +22 -0
  346. data/lib/aws/iam/group.rb +111 -0
  347. data/lib/aws/iam/group_collection.rb +132 -0
  348. data/lib/aws/iam/group_policy_collection.rb +47 -0
  349. data/lib/aws/iam/group_user_collection.rb +84 -0
  350. data/lib/aws/iam/login_profile.rb +111 -0
  351. data/lib/aws/iam/mfa_device.rb +52 -0
  352. data/lib/aws/iam/mfa_device_collection.rb +127 -0
  353. data/lib/aws/iam/policy.rb +46 -0
  354. data/lib/aws/iam/policy_collection.rb +188 -0
  355. data/lib/aws/iam/resource.rb +62 -0
  356. data/lib/aws/iam/server_certificate.rb +148 -0
  357. data/lib/aws/iam/server_certificate_collection.rb +138 -0
  358. data/lib/aws/iam/signing_certificate.rb +186 -0
  359. data/lib/aws/iam/signing_certificate_collection.rb +131 -0
  360. data/lib/aws/iam/user.rb +200 -0
  361. data/lib/aws/iam/user_collection.rb +133 -0
  362. data/lib/aws/iam/user_group_collection.rb +98 -0
  363. data/lib/aws/iam/user_policy.rb +90 -0
  364. data/lib/aws/iam/user_policy_collection.rb +45 -0
  365. data/lib/aws/iam/virtual_mfa_device.rb +139 -0
  366. data/lib/aws/iam/virtual_mfa_device_collection.rb +73 -0
  367. data/lib/aws/import_export.rb +73 -0
  368. data/lib/aws/import_export/client.rb +35 -0
  369. data/lib/aws/import_export/config.rb +19 -0
  370. data/lib/aws/import_export/errors.rb +22 -0
  371. data/lib/aws/kinesis.rb +53 -0
  372. data/lib/aws/kinesis/client.rb +35 -0
  373. data/lib/aws/kinesis/config.rb +18 -0
  374. data/lib/aws/kinesis/errors.rb +20 -0
  375. data/lib/aws/ops_works.rb +29 -0
  376. data/lib/aws/ops_works/client.rb +35 -0
  377. data/lib/aws/ops_works/config.rb +18 -0
  378. data/lib/aws/ops_works/errors.rb +20 -0
  379. data/lib/aws/rails.rb +195 -0
  380. data/lib/aws/rds.rb +70 -0
  381. data/lib/aws/rds/client.rb +42 -0
  382. data/lib/aws/rds/config.rb +18 -0
  383. data/lib/aws/rds/db_instance.rb +215 -0
  384. data/lib/aws/rds/db_instance_collection.rb +75 -0
  385. data/lib/aws/rds/db_snapshot.rb +163 -0
  386. data/lib/aws/rds/db_snapshot_collection.rb +89 -0
  387. data/lib/aws/rds/errors.rb +22 -0
  388. data/lib/aws/record.rb +139 -0
  389. data/lib/aws/record/abstract_base.rb +689 -0
  390. data/lib/aws/record/attributes.rb +388 -0
  391. data/lib/aws/record/conversion.rb +38 -0
  392. data/lib/aws/record/dirty_tracking.rb +287 -0
  393. data/lib/aws/record/errors.rb +143 -0
  394. data/lib/aws/record/exceptions.rb +51 -0
  395. data/lib/aws/record/hash_model.rb +204 -0
  396. data/lib/aws/record/hash_model/attributes.rb +195 -0
  397. data/lib/aws/record/hash_model/finder_methods.rb +172 -0
  398. data/lib/aws/record/hash_model/scope.rb +108 -0
  399. data/lib/aws/record/model.rb +453 -0
  400. data/lib/aws/record/model/attributes.rb +377 -0
  401. data/lib/aws/record/model/finder_methods.rb +232 -0
  402. data/lib/aws/record/model/scope.rb +212 -0
  403. data/lib/aws/record/naming.rb +31 -0
  404. data/lib/aws/record/scope.rb +203 -0
  405. data/lib/aws/record/validations.rb +694 -0
  406. data/lib/aws/record/validator.rb +246 -0
  407. data/lib/aws/record/validators/acceptance.rb +49 -0
  408. data/lib/aws/record/validators/block.rb +36 -0
  409. data/lib/aws/record/validators/confirmation.rb +41 -0
  410. data/lib/aws/record/validators/count.rb +106 -0
  411. data/lib/aws/record/validators/exclusion.rb +41 -0
  412. data/lib/aws/record/validators/format.rb +55 -0
  413. data/lib/aws/record/validators/inclusion.rb +54 -0
  414. data/lib/aws/record/validators/length.rb +105 -0
  415. data/lib/aws/record/validators/method.rb +31 -0
  416. data/lib/aws/record/validators/numericality.rb +136 -0
  417. data/lib/aws/record/validators/presence.rb +43 -0
  418. data/lib/aws/redshift.rb +51 -0
  419. data/lib/aws/redshift/client.rb +35 -0
  420. data/lib/aws/redshift/config.rb +18 -0
  421. data/lib/aws/redshift/errors.rb +22 -0
  422. data/lib/aws/route_53.rb +86 -0
  423. data/lib/aws/route_53/change_batch.rb +161 -0
  424. data/lib/aws/route_53/change_info.rb +72 -0
  425. data/lib/aws/route_53/client.rb +38 -0
  426. data/lib/aws/route_53/config.rb +18 -0
  427. data/lib/aws/route_53/errors.rb +22 -0
  428. data/lib/aws/route_53/hosted_zone.rb +134 -0
  429. data/lib/aws/route_53/hosted_zone_collection.rb +101 -0
  430. data/lib/aws/route_53/resource_record_set.rb +251 -0
  431. data/lib/aws/route_53/resource_record_set_collection.rb +110 -0
  432. data/lib/aws/s3.rb +156 -0
  433. data/lib/aws/s3/access_control_list.rb +265 -0
  434. data/lib/aws/s3/acl_object.rb +264 -0
  435. data/lib/aws/s3/acl_options.rb +204 -0
  436. data/lib/aws/s3/bucket.rb +742 -0
  437. data/lib/aws/s3/bucket_collection.rb +162 -0
  438. data/lib/aws/s3/bucket_lifecycle_configuration.rb +473 -0
  439. data/lib/aws/s3/bucket_tag_collection.rb +111 -0
  440. data/lib/aws/s3/bucket_version_collection.rb +79 -0
  441. data/lib/aws/s3/cipher_io.rb +120 -0
  442. data/lib/aws/s3/client.rb +2067 -0
  443. data/lib/aws/s3/client/xml.rb +266 -0
  444. data/lib/aws/s3/config.rb +48 -0
  445. data/lib/aws/s3/cors_rule.rb +108 -0
  446. data/lib/aws/s3/cors_rule_collection.rb +194 -0
  447. data/lib/aws/s3/data_options.rb +191 -0
  448. data/lib/aws/s3/encryption_utils.rb +146 -0
  449. data/lib/aws/s3/errors.rb +94 -0
  450. data/lib/aws/s3/multipart_upload.rb +353 -0
  451. data/lib/aws/s3/multipart_upload_collection.rb +76 -0
  452. data/lib/aws/s3/object_collection.rb +353 -0
  453. data/lib/aws/s3/object_metadata.rb +103 -0
  454. data/lib/aws/s3/object_upload_collection.rb +77 -0
  455. data/lib/aws/s3/object_version.rb +154 -0
  456. data/lib/aws/s3/object_version_collection.rb +89 -0
  457. data/lib/aws/s3/paginated_collection.rb +75 -0
  458. data/lib/aws/s3/policy.rb +74 -0
  459. data/lib/aws/s3/prefix_and_delimiter_collection.rb +47 -0
  460. data/lib/aws/s3/prefixed_collection.rb +85 -0
  461. data/lib/aws/s3/presign_v4.rb +136 -0
  462. data/lib/aws/s3/presigned_post.rb +554 -0
  463. data/lib/aws/s3/request.rb +62 -0
  464. data/lib/aws/s3/s3_object.rb +1784 -0
  465. data/lib/aws/s3/tree.rb +116 -0
  466. data/lib/aws/s3/tree/branch_node.rb +68 -0
  467. data/lib/aws/s3/tree/child_collection.rb +104 -0
  468. data/lib/aws/s3/tree/leaf_node.rb +94 -0
  469. data/lib/aws/s3/tree/node.rb +22 -0
  470. data/lib/aws/s3/tree/parent.rb +87 -0
  471. data/lib/aws/s3/uploaded_part.rb +82 -0
  472. data/lib/aws/s3/uploaded_part_collection.rb +84 -0
  473. data/lib/aws/s3/website_configuration.rb +102 -0
  474. data/lib/aws/simple_db.rb +218 -0
  475. data/lib/aws/simple_db/attribute.rb +156 -0
  476. data/lib/aws/simple_db/attribute_collection.rb +240 -0
  477. data/lib/aws/simple_db/client.rb +67 -0
  478. data/lib/aws/simple_db/config.rb +20 -0
  479. data/lib/aws/simple_db/consistent_read_option.rb +42 -0
  480. data/lib/aws/simple_db/delete_attributes.rb +62 -0
  481. data/lib/aws/simple_db/domain.rb +123 -0
  482. data/lib/aws/simple_db/domain_collection.rb +86 -0
  483. data/lib/aws/simple_db/domain_metadata.rb +110 -0
  484. data/lib/aws/simple_db/errors.rb +55 -0
  485. data/lib/aws/simple_db/expect_condition_option.rb +45 -0
  486. data/lib/aws/simple_db/item.rb +93 -0
  487. data/lib/aws/simple_db/item_collection.rb +654 -0
  488. data/lib/aws/simple_db/item_data.rb +73 -0
  489. data/lib/aws/simple_db/put_attributes.rb +60 -0
  490. data/lib/aws/simple_email_service.rb +443 -0
  491. data/lib/aws/simple_email_service/client.rb +37 -0
  492. data/lib/aws/simple_email_service/config.rb +18 -0
  493. data/lib/aws/simple_email_service/email_address_collection.rb +69 -0
  494. data/lib/aws/simple_email_service/errors.rb +22 -0
  495. data/lib/aws/simple_email_service/identity.rb +230 -0
  496. data/lib/aws/simple_email_service/identity_collection.rb +81 -0
  497. data/lib/aws/simple_email_service/quotas.rb +66 -0
  498. data/lib/aws/simple_workflow.rb +227 -0
  499. data/lib/aws/simple_workflow/activity_task.rb +178 -0
  500. data/lib/aws/simple_workflow/activity_task_collection.rb +123 -0
  501. data/lib/aws/simple_workflow/activity_type.rb +131 -0
  502. data/lib/aws/simple_workflow/activity_type_collection.rb +93 -0
  503. data/lib/aws/simple_workflow/client.rb +69 -0
  504. data/lib/aws/simple_workflow/config.rb +18 -0
  505. data/lib/aws/simple_workflow/count.rb +49 -0
  506. data/lib/aws/simple_workflow/decision_task.rb +603 -0
  507. data/lib/aws/simple_workflow/decision_task_collection.rb +223 -0
  508. data/lib/aws/simple_workflow/domain.rb +122 -0
  509. data/lib/aws/simple_workflow/domain_collection.rb +169 -0
  510. data/lib/aws/simple_workflow/errors.rb +20 -0
  511. data/lib/aws/simple_workflow/history_event.rb +276 -0
  512. data/lib/aws/simple_workflow/history_event_collection.rb +76 -0
  513. data/lib/aws/simple_workflow/option_formatters.rb +82 -0
  514. data/lib/aws/simple_workflow/resource.rb +94 -0
  515. data/lib/aws/simple_workflow/type.rb +89 -0
  516. data/lib/aws/simple_workflow/type_collection.rb +140 -0
  517. data/lib/aws/simple_workflow/workflow_execution.rb +384 -0
  518. data/lib/aws/simple_workflow/workflow_execution_collection.rb +617 -0
  519. data/lib/aws/simple_workflow/workflow_type.rb +177 -0
  520. data/lib/aws/simple_workflow/workflow_type_collection.rb +91 -0
  521. data/lib/aws/sns.rb +76 -0
  522. data/lib/aws/sns/client.rb +35 -0
  523. data/lib/aws/sns/config.rb +18 -0
  524. data/lib/aws/sns/errors.rb +22 -0
  525. data/lib/aws/sns/has_delivery_policy.rb +68 -0
  526. data/lib/aws/sns/message.rb +204 -0
  527. data/lib/aws/sns/originators/from_auto_scaling.rb +68 -0
  528. data/lib/aws/sns/policy.rb +47 -0
  529. data/lib/aws/sns/subscription.rb +165 -0
  530. data/lib/aws/sns/subscription_collection.rb +78 -0
  531. data/lib/aws/sns/topic.rb +403 -0
  532. data/lib/aws/sns/topic_collection.rb +62 -0
  533. data/lib/aws/sns/topic_subscription_collection.rb +54 -0
  534. data/lib/aws/sqs.rb +80 -0
  535. data/lib/aws/sqs/client.rb +53 -0
  536. data/lib/aws/sqs/config.rb +20 -0
  537. data/lib/aws/sqs/errors.rb +125 -0
  538. data/lib/aws/sqs/policy.rb +48 -0
  539. data/lib/aws/sqs/queue.rb +856 -0
  540. data/lib/aws/sqs/queue_collection.rb +186 -0
  541. data/lib/aws/sqs/received_message.rb +190 -0
  542. data/lib/aws/sqs/received_sns_message.rb +116 -0
  543. data/lib/aws/storage_gateway.rb +72 -0
  544. data/lib/aws/storage_gateway/client.rb +42 -0
  545. data/lib/aws/storage_gateway/config.rb +18 -0
  546. data/lib/aws/storage_gateway/errors.rb +22 -0
  547. data/lib/aws/sts.rb +164 -0
  548. data/lib/aws/sts/client.rb +55 -0
  549. data/lib/aws/sts/config.rb +18 -0
  550. data/lib/aws/sts/errors.rb +22 -0
  551. data/lib/aws/sts/federated_session.rb +56 -0
  552. data/lib/aws/sts/policy.rb +30 -0
  553. data/lib/aws/sts/session.rb +48 -0
  554. data/lib/aws/support.rb +29 -0
  555. data/lib/aws/support/client.rb +35 -0
  556. data/lib/aws/support/config.rb +18 -0
  557. data/lib/aws/support/errors.rb +20 -0
  558. data/lib/aws/version.rb +17 -0
  559. data/rails/init.rb +15 -0
  560. metadata +634 -0
@@ -0,0 +1,212 @@
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
+
18
+ # The primary interface for finding records with {AWS::Record::Model}.
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::Model finder methods
24
+ # (e.g. `shard`, `where`, `order`, `limit`, etc).
25
+ #
26
+ # books = Book.where(:author => 'John Doe')
27
+ # books.class #=> AWS::Record::Scope, not Array
28
+ #
29
+ # Scopes are also returned from methods defined with the `scope` method.
30
+ #
31
+ # ## Chaining Scopes
32
+ #
33
+ # Scope objects represent a request, but do not actualy make a request
34
+ # until required. This allows you to chain requests
35
+ #
36
+ # # no request made by the following 2 statements
37
+ # books = Book.where(:author => 'John Doe')
38
+ # books = books.limit(10)
39
+ #
40
+ # books.each do |book|
41
+ # # yields up to 10 books
42
+ # end
43
+ #
44
+ # Each of the following methods returns a scope that can be chained.
45
+ #
46
+ # * {#shard}
47
+ # * {#where}
48
+ # * {#order}
49
+ # * {#limit}
50
+ #
51
+ # ## Terminating Scopes
52
+ #
53
+ # To terminate a scope you can enumerate it or call #first.
54
+ #
55
+ # # terminate a scope by enumerating
56
+ # Book.limit(10).each {|book| ... }
57
+ #
58
+ # # terminate a scope by getting the first value
59
+ # Book.where('author' => 'John Doe').first
60
+ #
61
+ class Scope < Record::Scope
62
+
63
+ # @api private
64
+ def initialize base_class, options = {}
65
+ super
66
+ @options[:where] ||= []
67
+ end
68
+
69
+ def new attributes = {}
70
+
71
+ attributes = attributes.dup
72
+
73
+ @options[:where].each do |conditions|
74
+ if conditions.size == 1 and conditions.first.is_a?(Hash)
75
+ attributes.merge!(conditions.first)
76
+ end
77
+ end
78
+
79
+ super(attributes)
80
+
81
+ end
82
+
83
+ # Applies conditions to the scope that limit which records are returned.
84
+ # Only those matching all given conditions will be returned.
85
+ #
86
+ # @overload where(conditions_hash)
87
+ # Specify a hash of conditions to query with. Multiple conditions
88
+ # are joined together with AND.
89
+ #
90
+ # Book.where(:author => 'John Doe', :softcover => true)
91
+ # # where `author` = `John Doe` AND `softcover` = `1`
92
+ #
93
+ # @param [Hash] conditions
94
+ #
95
+ # @overload where(conditions_string, *values)
96
+ # A sql-like query fragment with optional placeholders and values.
97
+ # Placeholders are replaced with properly quoted values.
98
+ #
99
+ # Book.where('author = ?', 'John Doe')
100
+ #
101
+ # @param [String] conditions_string A sql-like where string with
102
+ # question mark placeholders. For each placeholder there should
103
+ # be a value that will be quoted into that position.
104
+ # @param [String] *values A value that should be quoted into the
105
+ # corresponding (by position) placeholder.
106
+ #
107
+ # @return [Scope] Returns a new scope with the passed conditions applied.
108
+ def where *conditions
109
+ if conditions.empty?
110
+ raise ArgumentError, 'missing required condition'
111
+ end
112
+ _with(:where => @options[:where] + [conditions])
113
+ end
114
+
115
+ # Specifies how to sort records returned.
116
+ #
117
+ # # enumerate books, starting with the most recently published ones
118
+ # Book.order(:published_at, :desc).each do |book|
119
+ # # ...
120
+ # end
121
+ #
122
+ # Only one order may be applied. If order is specified more than
123
+ # once the last one in the chain takes precedence:
124
+ #
125
+ # # books returned by this scope will be ordered by :published_at
126
+ # # and not :author.
127
+ # Book.where(:read => false).order(:author).order(:published_at)
128
+ #
129
+ # @param [String,Symbol] attribute_name The attribute to sort by.
130
+ # @param [:asc, :desc] order (:asc) The direct to sort.
131
+ def order attribute_name, order = :asc
132
+ _with(:order => [attribute_name, order])
133
+ end
134
+
135
+ # @api private
136
+ private
137
+ def _each_object &block
138
+
139
+ items = _item_collection
140
+
141
+ items.select.each do |item_data|
142
+ obj = base_class.new(:shard => _shard)
143
+ obj.send(:hydrate, item_data.name, item_data.attributes)
144
+ yield(obj)
145
+ end
146
+
147
+ end
148
+
149
+ # Merges another scope with this scope. Conditions are added together
150
+ # and the limit and order parts replace those in this scope (if set).
151
+ # @param [Scope] scope A scope to merge with this one.
152
+ # @return [Scope] Returns a new scope with merged conditions and
153
+ # overriden order and limit.
154
+ # @api private
155
+ private
156
+ def _merge_scope scope
157
+ merged = self
158
+ scope.instance_variable_get('@options').each_pair do |opt_name,opt_value|
159
+ unless [nil, []].include?(opt_value)
160
+ if opt_name == :where
161
+ opt_value.each do |condition|
162
+ merged = merged.where(*condition)
163
+ end
164
+ else
165
+ merged = merged.send(opt_name, *opt_value)
166
+ end
167
+ end
168
+ end
169
+ merged
170
+ end
171
+
172
+ # Consumes a hash of options (e.g. `:where`, `:order` and `:limit`) and
173
+ # builds them onto the current scope, returning a new one.
174
+ # @param [Hash] options
175
+ # @option options :where
176
+ # @option options :order
177
+ # @option options [Integer] :limit
178
+ # @return [Scope] Returns a new scope with the hash of scope
179
+ # options applied.
180
+ # @api private
181
+ private
182
+ def _handle_options options
183
+ scope = self
184
+ options.each_pair do |method, args|
185
+ if method == :where and args.is_a?(Hash)
186
+ # splatting a hash turns it into an array, bad juju
187
+ scope = scope.send(method, args)
188
+ else
189
+ scope = scope.send(method, *args)
190
+ end
191
+ end
192
+ scope
193
+ end
194
+
195
+ # Converts this scope object into an AWS::SimpleDB::ItemCollection
196
+ # @return [SimpleDB::ItemCollection]
197
+ # @api private
198
+ private
199
+ def _item_collection
200
+ items = base_class.sdb_domain(_shard).items
201
+ items = items.order(*@options[:order]) if @options[:order]
202
+ items = items.limit(*@options[:limit]) if @options[:limit]
203
+ @options[:where].each do |where_condition|
204
+ items = items.where(*where_condition)
205
+ end
206
+ items
207
+ end
208
+
209
+ end
210
+ end
211
+ end
212
+ end
@@ -0,0 +1,31 @@
1
+ # Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ module AWS
15
+ module Record
16
+
17
+ # @api private
18
+ module Naming
19
+
20
+ # This method should only ever get called in a Rails 3+ context
21
+ # where active model and active support have been loaded. Rails 2
22
+ # does not call model name on object.
23
+ # @api private
24
+ def model_name
25
+ @_model_name ||=
26
+ ActiveModel::Name.new(self.kind_of?(Class) ? self : self.class)
27
+ end
28
+
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,203 @@
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
+
17
+ # Base class for {AWS::Record::Model::Scope} and
18
+ # {AWS::Record::HashModel::Scope}.
19
+ class Scope
20
+
21
+ include Enumerable
22
+
23
+ # @param base_class A class that extends {AWS::Record::AbstractBase}.
24
+ # @param [Hash] options
25
+ # @option options :
26
+ # @api private
27
+ def initialize base_class, options = {}
28
+
29
+ @base_class = base_class
30
+
31
+ @options = options.dup
32
+
33
+ # backwards compat
34
+ @options[:shard] = @options.delete(:domain) if @options[:domain]
35
+
36
+ end
37
+
38
+ # @return [Class] Returns the AWS::Record::Model extending class that
39
+ # this scope will find records for.
40
+ attr_reader :base_class
41
+
42
+ def new attributes = {}
43
+
44
+ attributes = attributes.dup
45
+ attributes[:shard] ||= attributes.delete(:shard)
46
+ attributes[:shard] ||= attributes.delete('shard')
47
+ # for backwards compatability, domain is accepted
48
+ attributes[:shard] ||= attributes.delete('domain')
49
+ attributes[:shard] ||= attributes.delete(:domain)
50
+ attributes[:shard] ||= _shard
51
+
52
+ base_class.new(attributes)
53
+
54
+ end
55
+ alias_method :build, :new
56
+
57
+ # @param [String] shard_name
58
+ # @return [Scope] Returns a scope that specifies which shard
59
+ # (i.e. SimpleDB domain) should be used.
60
+ def shard shard_name
61
+ _with(:shard => shard_name)
62
+ end
63
+ alias_method :domain, :shard
64
+
65
+ # @overload find(id)
66
+ # Finds and returns a single record by id. If no record is found
67
+ # with the given `id`, then a RecordNotFound error will be raised.
68
+ # @param [String] id ID of the record to find.
69
+ # @return Returns the record.
70
+ #
71
+ # @overload find(:first, options = {})
72
+ # Returns the first record found. If no records were matched then
73
+ # nil will be returned (raises no exceptions).
74
+ # @param [Symbol] mode (:first)
75
+ # @return [Object,nil] Returns the first record or nil if no
76
+ # records matched the conditions.
77
+ #
78
+ # @overload find(:all, options = {})
79
+ # Returns an enumerable Scope object that represents all matching
80
+ # records. No request is made to AWS until the scope is enumerated.
81
+ #
82
+ # Book.find(:all, :limit => 100).each do |book|
83
+ # # ...
84
+ # end
85
+ #
86
+ # @param [Symbol] mode (:all)
87
+ # @return [Scope] Returns an enumerable scope object.
88
+ #
89
+ def find id_or_mode, options = {}
90
+
91
+ scope = _handle_options(options)
92
+
93
+ case
94
+ when id_or_mode == :all then scope
95
+ when id_or_mode == :first then scope.limit(1).to_a.first
96
+ else
97
+ base_class.find_by_id(id_or_mode, :shard => scope._shard)
98
+ end
99
+
100
+ end
101
+
102
+ # @return [Integer] Returns the number of records that match the
103
+ # current scoped finder.
104
+ def count options = {}
105
+ if scope = _handle_options(options) and scope != self
106
+ scope.count
107
+ else
108
+ _item_collection.count
109
+ end
110
+ end
111
+ alias_method :size, :count
112
+
113
+ # @return Returns the first record found, returns
114
+ # nil if the domain/table is empty.
115
+ def first options = {}
116
+ _handle_options(options).find(:first)
117
+ end
118
+
119
+ # Limits the maximum number of total records to return when finding
120
+ # or counting. Returns a scope, does not make a request.
121
+ #
122
+ # @example
123
+ #
124
+ # books = Book.limit(100)
125
+ #
126
+ # @param [Integer] limit The maximum number of records to return.
127
+ # @return [Scope] Returns a new scope that has the applied limit.
128
+ def limit limit
129
+ _with(:limit => limit)
130
+ end
131
+
132
+ # Yields once for each record matching the request made by this scope.
133
+ #
134
+ # @example
135
+ #
136
+ # books = Book.where(:author => 'me').order(:price, :asc).limit(10)
137
+ #
138
+ # books.each do |book|
139
+ # puts book.attributes.to_yaml
140
+ # end
141
+ #
142
+ # @yieldparam [Object] record
143
+ def each &block
144
+ if block_given?
145
+ _each_object(&block)
146
+ else
147
+ to_enum(:"_each_object")
148
+ end
149
+ end
150
+
151
+ protected
152
+ def _shard
153
+ @options[:shard] || base_class.shard_name
154
+ end
155
+ alias_method :domain, :shard
156
+
157
+ # @api private
158
+ private
159
+ def _each_object &block
160
+ raise NotImplementedError
161
+ end
162
+
163
+ # @api private
164
+ private
165
+ def _with options
166
+ self.class.new(base_class, @options.merge(options))
167
+ end
168
+
169
+ # @api private
170
+ private
171
+ def method_missing scope_name, *args
172
+ # @todo only proxy named scope methods
173
+ _merge_scope(base_class.send(scope_name, *args))
174
+ end
175
+
176
+ # Merges the one scope with the current scope, returning a 3rd.
177
+ # @param [Scope] scope
178
+ # @return [Scope]
179
+ # @api private
180
+ private
181
+ def _merge_scope scope
182
+ raise NotImplementedError
183
+ end
184
+
185
+ # Consumes a hash of options (e.g. `:shard`, +:limit) and returns
186
+ # a new scope with those applied.
187
+ # @return [Scope]
188
+ # @api private
189
+ private
190
+ def _handle_options options
191
+ raise NotImplementedError
192
+ end
193
+
194
+ # @api private
195
+ private
196
+ def _item_collection
197
+ raise NotImplementedError
198
+ end
199
+
200
+ end
201
+
202
+ end
203
+ end
@@ -0,0 +1,694 @@
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
+
17
+ # Validation methods to be used with subclasses of AWS::Record::Model.
18
+ #
19
+ # # General Usage
20
+ #
21
+ # All standard validation methods follow the same basic usage.
22
+ # Call the validation method followed by one more attribute names
23
+ # and then an optional hash of modifiers.
24
+ #
25
+ # class Book < AWS::Record::Model
26
+ #
27
+ # # ...
28
+ #
29
+ # validates_presence_of :title, :author
30
+ #
31
+ # validates_length_of :summary,
32
+ # :max => 500,
33
+ # :allow_nil => true,
34
+ # :allow_blank => true
35
+ #
36
+ # end
37
+ #
38
+ # # Conditional Validations
39
+ #
40
+ # Sometimes you only want to validate an attribute under certain
41
+ # conditions. To make this simple, all validation methods accept the
42
+ # following 3 options:
43
+ #
44
+ # * `:on`
45
+ # * `:if`
46
+ # * `:unless`
47
+ #
48
+ # You may mix and match all 3 of the above options.
49
+ #
50
+ # ### Validate on :create or :update
51
+ #
52
+ # By default validations are run on create and update, but you can
53
+ # specify them to run for only create (initial save) or updates.
54
+ #
55
+ # validates_presence_of :created_at, :on => :create
56
+ #
57
+ # validates_presence_of :updated_at, :on => :update
58
+ #
59
+ # ### Validate :if or :unless
60
+ #
61
+ # Sometimes you have more complex requirements to determine if/when a
62
+ # validation should run. `:if` and `:unless`: both accept either
63
+ # a method name or proc.
64
+ #
65
+ # class Person
66
+ #
67
+ # # ...
68
+ #
69
+ # validates_presence_of :job_title, :if => :employee?
70
+ #
71
+ # validates_presence_of :nickname, :if => lambda {|person|
72
+ # person.is_family? or person.is_friend? }
73
+ #
74
+ # end
75
+ #
76
+ # # Validating Virtual (Non-persisted) Attributes
77
+ #
78
+ # All of the validators can be used with configured attributes, but they
79
+ # can also be used with any attribute that has a setter and a getter.
80
+ #
81
+ # Class Book < AWS::Record::Model
82
+ # attr_accessor :title
83
+ # validates_presence_of :title
84
+ # end
85
+ #
86
+ module Validations
87
+
88
+ def self.extended base
89
+
90
+ base.send(:define_method, :run_validations) do
91
+ errors.clear!
92
+ self.class.send(:validators).each do |validator|
93
+ validator.validate(self)
94
+ end
95
+ end
96
+
97
+ base.send(:private, :run_validations)
98
+
99
+ end
100
+
101
+ # Registers a validation method.
102
+ #
103
+ # validate :ensure_age_is_greater_than_shoe_size
104
+ #
105
+ # def ensure_age_is_greater_than_shoe_size
106
+ # unless age > shoe_size
107
+ # errors.add(:age, 'should be greater than your shoe size')
108
+ # end
109
+ # end
110
+ #
111
+ # You can also pass a list of method names that should be called during
112
+ # validation.
113
+ #
114
+ # validate :some_complex_validation, :some_other_validation
115
+ #
116
+ # As with most other validation methods you can also pass a hash of
117
+ # options that affect when the named validation methods get called.
118
+ #
119
+ # validate :my_custom_validation, :unless => :new_record?
120
+ #
121
+ # @overload validate(*method_names, options = {})
122
+ # @param [Array<Symbol>] method_names A list of methods to call
123
+ # during validation.
124
+ # @param [Hash] options
125
+ # @option options [Symbol] :on (:save) When this validation is run.
126
+ # Valid values include:
127
+ #
128
+ # * `:save`
129
+ # * `:create`
130
+ # * `:update`
131
+ # @option options [Symbol,String,Proc] :if Specifies a method or proc
132
+ # to call. The validation will only be run if the return value is
133
+ # of the method/proc is true (e.g. `:if => :name_changed?` or
134
+ # `:if => lambda{|book| book.in_stock? }`).
135
+ # @option options [Symbol,String,Proc] :unless Specifies a method or
136
+ # proc to call. The validation will *not* be run if the return value
137
+ # is of the method/proc is false.
138
+ def validate *args
139
+ validators << MethodValidator.new(self, *args)
140
+ end
141
+
142
+ # This validation method is primariliy intended for ensuring a form
143
+ # checkbox (like an EULA agreement or terms of service acknowledgement)
144
+ # is checked.
145
+ #
146
+ # class User < AWS::Record::Model
147
+ # boolean_attr :terms_of_service
148
+ # validates_acceptance_of :terms_of_service
149
+ # end
150
+ #
151
+ # ### Virtual Attributes
152
+ #
153
+ # If you choose to validate the acceptance of a non-existant attribute
154
+ # then a setter and a getter will be added automtically for you.
155
+ #
156
+ # class User < AWS::Record::Model
157
+ # validates_acceptance_of :terms_of_service
158
+ # end
159
+ #
160
+ # user = User.new
161
+ # user.respond_to?(:terms_of_service) #=> true
162
+ # user.respond_to?(:terms_of_service=) #=> true
163
+ #
164
+ # ### Accepted Values
165
+ #
166
+ # The default behavior for `validates_acceptance_of` is to add
167
+ # an error when the value is '1' or `true`. Also note, this validation
168
+ # method defaults `:allow_nil` to true.
169
+ #
170
+ # * `nil` implies the field was omitted from the form and therefore
171
+ # should not be validated
172
+ #
173
+ # class User < AWS::Record::Model
174
+ # validates_acceptance_of :terms_of_service
175
+ # end
176
+ #
177
+ # u = User.new
178
+ # u.terms_of_service #=> nil
179
+ # u.valid? #=> true
180
+ #
181
+ # * '1' is the default value for most checkbox form helpers, and #
182
+ # therefore indicates an accepted value.
183
+ #
184
+ # * `true` is how boolean attributes typecast '1'. This is helpful
185
+ # when you have your checkbox post its value to a `:boolean_attr`.
186
+ #
187
+ # ### Multi-Valued Attributes
188
+ #
189
+ # This validator works only with single-valued attributes. If you need
190
+ # to validate that all of the values in a set are true, then use
191
+ # {#validates_inclusion_of}.
192
+ #
193
+ # @note Most validators default :allow_nil to false, this one defaults to true
194
+ # @note This validator should not be used with multi-valued attributes
195
+ #
196
+ # @overload validates_acceptance_of(*attributes, options = {}, &block)
197
+ # @param attributes A list of attribute names to validate.
198
+ # @param [Hash] options
199
+ # @option options [mixed] :accpet Specify an additional accepted value.
200
+ #
201
+ # validates_acceptance_of :agree, :accept => 'yes'
202
+ #
203
+ # @option options [String] :message A custom error message. The default
204
+ # `:message` is "must be accepted".
205
+ # @option options [Boolean] :allow_nil (true) Skip validation if the
206
+ # attribute value is `nil`.
207
+ # @option options [Boolean] :allow_blank (true) Skip validation if the
208
+ # attribute value is `blank`.
209
+ # @option options [Symbol] :on (:save) When this validation is run.
210
+ # Valid values include:
211
+ #
212
+ # * `:save`
213
+ # * `:create`
214
+ # * `:update`
215
+ # @option options [Symbol,String,Proc] :if Specifies a method or proc
216
+ # to call. The validation will only be run if the return value is
217
+ # of the method/proc is true (e.g. `:if => :name_changed?` or
218
+ # `:if => lambda{|book| book.in_stock? }`).
219
+ # @option options [Symbol,String,Proc] :unless Specifies a method or
220
+ # proc to call. The validation will *not* be run if the return value
221
+ # is of the method/proc is false.
222
+ def validates_acceptance_of *args
223
+ validators << AcceptanceValidator.new(self, *args)
224
+ end
225
+
226
+ # Intended primarily for validating a form field was entered correctly
227
+ # by requiring it twice:
228
+ #
229
+ # Model:
230
+ # class User < AWS::Record::Model
231
+ # validates_confirmation_of :password, :if => :password_changed?
232
+ # end
233
+ #
234
+ # View:
235
+ # <%= password_field "user", "password" %>
236
+ # <%= password_field "user", "password_confirmation" %>
237
+ #
238
+ # ### Confirmation Value Accessors
239
+ #
240
+ # If your model does not have accessors for the confirmation value
241
+ # then they will be automatically added. In the example above
242
+ # the user class would have an `attr_accessor` for
243
+ # `:password_confirmation`.
244
+ #
245
+ # ### Conditional Validation
246
+ #
247
+ # Mostly commonly you only need to validate confirmation of an
248
+ # attribute when it has changed. It is therefore suggested to
249
+ # pass an `:if` condition reflecting this:
250
+ #
251
+ # validates_confirmation_of :password, :if => :password_changed?
252
+ #
253
+ # ### Multi-Valued Attributes
254
+ #
255
+ # This validator works only with single-valued attributes.
256
+ # It should not be used on attributes that have array or set values.
257
+ #
258
+ # @note This validation method does not accept the `:allow_nil` or the
259
+ # `:allow_blank` options.
260
+ #
261
+ # @overload validates_confirmation_of(*attributes, options = {}, &block)
262
+ # @param attributes A list of attribute names to validate.
263
+ # @param [Hash] options
264
+ # @option options [String] :message A custom error message. The default
265
+ # `:message` is "doesn't match confirmation".
266
+ # @option options [Symbol] :on (:save) When this validation is run.
267
+ # Valid values include:
268
+ #
269
+ # * `:save`
270
+ # * `:create`
271
+ # * `:update`
272
+ # @option options [Symbol,String,Proc] :if Specifies a method or proc
273
+ # to call. The validation will only be run if the return value is
274
+ # of the method/proc is true (e.g. `:if => :name_changed?` or
275
+ # `:if => lambda{|book| book.in_stock? }`).
276
+ # @option options [Symbol,String,Proc] :unless Specifies a method or
277
+ # proc to call. The validation will *not* be run if the return value
278
+ # is of the method/proc is false.
279
+ def validates_confirmation_of *args
280
+ validators << ConfirmationValidator.new(self, *args)
281
+ end
282
+
283
+ # Validates the number of values for a given attribute.
284
+ #
285
+ # ### Length vs Count
286
+ #
287
+ # `validates_count_of` validates the number of attribute values,
288
+ # whereas +validates_length_of: validates the length of each
289
+ # attribute value instead.
290
+ #
291
+ # If you need to ensure each attribute value is a given length see
292
+ # {#validates_length_of} instead.
293
+ #
294
+ # ### Examples
295
+ #
296
+ # You can validate there are a certain number of values:
297
+ #
298
+ # validates_count_of :parents, :exactly => 2
299
+ #
300
+ # You can also specify a range:
301
+ #
302
+ # validates_count_of :tags, :within => (2..10)
303
+ #
304
+ # You can also specify min and max value seperately:
305
+ #
306
+ # validates_count_of :tags, :minimum => 2, :maximum => 10
307
+ #
308
+ # ### `nil` Values
309
+ #
310
+ # If you are validating an array or set that contains `nil` values,
311
+ # the `nil` values are counted normally as 1 each.
312
+ #
313
+ # If you are validating a non-enuemrable attribute that only
314
+ # contains a single nil or other scalar value, then nil is
315
+ # counted as 0.
316
+ #
317
+ # ### Singular Attributes
318
+ #
319
+ # This validator is intended to for validating attributes that have
320
+ # an array or set of values. If used on an attribute that
321
+ # returns a scalar value (like `nil` or a string), the count will
322
+ # always be 0 (for `nil`) or 1 (for everything else).
323
+ #
324
+ # It is therefore recomended to use `:validates_presence_of` in
325
+ # place of `:validates_count_of` when working with single-valued
326
+ # attributes.
327
+ #
328
+ # @overload validates_count_of(*attributes, options = {}, &block)
329
+ # @param attributes A list of attribute names to validate.
330
+ # @param [Hash] options
331
+ # @option options [Integer] :exactly The exact number of values the
332
+ # attribute should have. If this validation option fails the
333
+ # error message specified by `:wrong_number` will be added.
334
+ # @option options [Range] :within An range of number of values to
335
+ # accept. If the attribute has a number of values outside this range
336
+ # then the `:too_many` or `:too_few` error message will be added.
337
+ # @option options [Integer] :minimum The minimum number of values
338
+ # the attribute should have. If it has fewer, the `:too_few` error
339
+ # message will be added.
340
+ # @option options [Integer] :maximum The maximum number of values
341
+ # the attribute should have. If it has more, the `:too_many` error
342
+ # message will be added.
343
+ # @option options [String] :too_many An error message added
344
+ # when the attribute has too many values. Defaults to
345
+ # <code>"has too many values (maximum is %{maximum})"</code>
346
+ # @option options [String] :too_few An error message added
347
+ # when the attribute has too few values. Defaults to
348
+ # <code>"has too few values (minimum is %{minimum})"</code>
349
+ # @option options [String] :wrong_number An error message
350
+ # added when the number of attribute values does not match
351
+ # the `:exactly` option. Defaults to <code>"has the wrong
352
+ # number of values (should have exactly %{exactly}"</code>
353
+ # @option options [Symbol] :on (:save) When this validation is run.
354
+ # Valid values include:
355
+ # * `:save`
356
+ # * `:create`
357
+ # * `:update`
358
+ # @option options [Symbol,String,Proc] :if Specifies a method or proc
359
+ # to call. The validation will only be run if the return value is
360
+ # of the method/proc is true (e.g. `:if => :name_changed?` or
361
+ # `:if => lambda{|book| book.in_stock? }`).
362
+ # @option options [Symbol,String,Proc] :unless Specifies a method or
363
+ # proc to call. The validation will *not* be run if the return value
364
+ # is of the method/proc is false.
365
+ def validates_count_of *args
366
+ validators << CountValidator.new(self, *args)
367
+ end
368
+
369
+ # Adds a block validator that is called during record validation.
370
+ #
371
+ # class ExampleClass < AWS::Record::Model
372
+ #
373
+ # string_attr :name
374
+ #
375
+ # validates_each(:name) do |record, attribute_name, value|
376
+ # if value == 'John Doe'
377
+ # record.errors.add(attr_name, 'may not be an alias')
378
+ # end
379
+ # end
380
+ #
381
+ # end
382
+ #
383
+ # @overload validates_each(*attributes, options = {}, &block)
384
+ # @param attributes A list of attribute names to validate.
385
+ # @param [Hash] options
386
+ # @option options [Boolean] :allow_nil (false) Skip validation if the
387
+ # attribute value is `nil`.
388
+ # @option options [Boolean] :allow_blank (false) Skip validation if the
389
+ # attribute value is `blank`.
390
+ # @option options [Symbol] :on (:save) When this validation is run.
391
+ # Valid values include:
392
+ # * `:save`
393
+ # * `:create`
394
+ # * `:update`
395
+ # @option options [Symbol,String,Proc] :if Specifies a method or proc
396
+ # to call. The validation will only be run if the return value is
397
+ # of the method/proc is true (e.g. `:if => :name_changed?` or
398
+ # `:if => lambda{|book| book.in_stock? }`).
399
+ # @option options [Symbol,String,Proc] :unless Specifies a method or
400
+ # proc to call. The validation will *not* be run if the return value
401
+ # is of the method/proc is false.
402
+ def validates_each *attributes, &block
403
+ unless block_given?
404
+ raise ArgumentError, 'missing required block for validates_each'
405
+ end
406
+ validators << BlockValidator.new(self, *attributes, &block)
407
+ end
408
+
409
+ # Validates that the attribute value is not included in the given
410
+ # enumerable.
411
+ #
412
+ # validates_exlusion_of :username, :in => %w(admin administrator)
413
+ #
414
+ # ### Multi-Valued Attributes
415
+ #
416
+ # You may use this with multi-valued attributes the same way you use it
417
+ # with single-valued attributes:
418
+ #
419
+ # class Product < AWS::Record::Model
420
+ # string_attr :tags, :set => true
421
+ # validates_exlusion_of :tags, :in => four_letter_words
422
+ # end
423
+ #
424
+ # @overload validates_exclusion_of(*attributes, options = {}, &block)
425
+ # @param attributes A list of attribute names to validate.
426
+ # @param [Hash] options
427
+ # @option options [required, Enumerable] :in An enumerable object to
428
+ # ensure the value is not in.
429
+ # @option options [String] :message A custom error message. The default
430
+ # `:message` is "is reserved".
431
+ # @option options [Boolean] :allow_nil (false) Skip validation if the
432
+ # attribute value is `nil`.
433
+ # @option options [Boolean] :allow_blank (false) Skip validation if the
434
+ # attribute value is `blank`.
435
+ # @option options [Symbol] :on (:save) When this validation is run.
436
+ # Valid values include:
437
+ # * `:save`
438
+ # * `:create`
439
+ # * `:update`
440
+ # @option options [Symbol,String,Proc] :if Specifies a method or proc
441
+ # to call. The validation will only be run if the return value is
442
+ # of the method/proc is true (e.g. `:if => :name_changed?` or
443
+ # `:if => lambda{|book| book.in_stock? }`).
444
+ # @option options [Symbol,String,Proc] :unless Specifies a method or
445
+ # proc to call. The validation will *not* be run if the return value
446
+ # is of the method/proc is false.
447
+ def validates_exclusion_of *args
448
+ validators << ExclusionValidator.new(self, *args)
449
+ end
450
+
451
+ # Validates the attribute's value matches the given regular exression.
452
+ #
453
+ # validates_format_of :year, :with => /^\d{4}$/
454
+ #
455
+ # You can also perform a not-match using `:without` instead of `:with`.
456
+ #
457
+ # validates_format_of :username, :without => /\d/
458
+ #
459
+ # ### Multi-Valued Attributes
460
+ #
461
+ # You may use this with multi-valued attributes the same way you use it
462
+ # with single-valued attributes:
463
+ #
464
+ # class Product < AWS::Record::Model
465
+ # string_attr :tags, :set => true
466
+ # validates_format_of :tags, :with => /^\w{2,10}$/
467
+ # end
468
+ #
469
+ # @overload validates_format_of(*attributes, options = {}, &block)
470
+ # @param attributes A list of attribute names to validate.
471
+ # @param [Hash] options
472
+ # @option options [Regexp] :with If the value matches the given
473
+ # regex, an error will not be added.
474
+ # @option options [Regexp] :without If the value matches the given
475
+ # regex, an error will be added.
476
+ # must match, or an error is added.
477
+ # @option options [String] :message A custom error message. The default
478
+ # `:message` is "is reserved".
479
+ # @option options [Boolean] :allow_nil (false) Skip validation if the
480
+ # attribute value is `nil`.
481
+ # @option options [Boolean] :allow_blank (false) Skip validation if the
482
+ # attribute value is `blank`.
483
+ # @option options [Symbol] :on (:save) When this validation is run.
484
+ # Valid values include:
485
+ # * `:save`
486
+ # * `:create`
487
+ # * `:update`
488
+ # @option options [Symbol,String,Proc] :if Specifies a method or proc
489
+ # to call. The validation will only be run if the return value is
490
+ # of the method/proc is true (e.g. `:if => :name_changed?` or
491
+ # `:if => lambda{|book| book.in_stock? }`).
492
+ # @option options [Symbol,String,Proc] :unless Specifies a method or
493
+ # proc to call. The validation will *not* be run if the return value
494
+ # is of the method/proc is false.
495
+ def validates_format_of *args
496
+ validators << FormatValidator.new(self, *args)
497
+ end
498
+
499
+ # Validates that the attribute value is included in the given enumerable
500
+ # object.
501
+ #
502
+ # class MultipleChoiceAnswer < AWS::Record::Model
503
+ # validates_inclusion_of :letter, :in => %w(a b c d e)
504
+ # end
505
+ #
506
+ # ### Multi-Valued Attributes
507
+ #
508
+ # You may use this with multi-valued attributes the same way you use it
509
+ # with single-valued attributes.
510
+ #
511
+ # @overload validates_inclusion_of(*attributes, options = {}, &block)
512
+ # @param attributes A list of attribute names to validate.
513
+ # @param [Hash] options
514
+ # @option options [required, Enumerable] :in An enumerable object to
515
+ # check for the value in.
516
+ # @option options [String] :message A custom error message. The default
517
+ # `:message` is "is not included in the list".
518
+ # @option options [Boolean] :allow_nil (false) Skip validation if the
519
+ # attribute value is `nil`.
520
+ # @option options [Boolean] :allow_blank (false) Skip validation if the
521
+ # attribute value is `blank`.
522
+ # @option options [Symbol] :on (:save) When this validation is run.
523
+ # Valid values include:
524
+ # * `:save`
525
+ # * `:create`
526
+ # * `:update`
527
+ # @option options [Symbol,String,Proc] :if Specifies a method or proc
528
+ # to call. The validation will only be run if the return value is
529
+ # of the method/proc is true (e.g. `:if => :name_changed?` or
530
+ # `:if => lambda{|book| book.in_stock? }`).
531
+ # @option options [Symbol,String,Proc] :unless Specifies a method or
532
+ # proc to call. The validation will *not* be run if the return value
533
+ # is of the method/proc is false.
534
+ def validates_inclusion_of *attributes
535
+ validators << InclusionValidator.new(self, *attributes)
536
+ end
537
+
538
+ # Validates the attribute values are of a specified length.
539
+ #
540
+ # validates_lenth_of :username, :within => 3..25
541
+ #
542
+ # ### Length vs Count
543
+ #
544
+ # `validates_length_of` validates the length of individual attribute
545
+ # values, whereas +validates_count_of: validates the number of
546
+ # attribute values.
547
+ #
548
+ # If you need to ensure there are certain number of values see
549
+ # {#validates_count_of} instead.
550
+ #
551
+ # @overload validates_length_of(*attributes, options = {}, &block)
552
+ # @param attributes A list of attribute names to validate.
553
+ # @param [Hash] options
554
+ # @option options [Enumerable] :within An enumerable object to
555
+ # ensure the length of the value falls within.
556
+ # @option options [Integer] :exactly The exact length a value must be.
557
+ # If this validation fails the error message specified by
558
+ # `:wrong_length` will be added.
559
+ # @option options [Range] :within An enumerable object which must
560
+ # include the length of the attribute, or an error will be added.
561
+ # If the attribute has a length outside the range then the
562
+ # `:too_long` or `:too_short` error message will be added.
563
+ # @option options [Integer] :minimum The minimum length an attribute
564
+ # value should be. If it is shorter, the `:too_short` error
565
+ # message will be added.
566
+ # @option options [Integer] :maximum The maximum length an attribute
567
+ # value should be. If it is longer, the `:too_long` error
568
+ # message will be added.
569
+ # @option options [String] :too_long An error message added
570
+ # when the attribute value is too long. Defaults to
571
+ # <code>"is too long (maximum is %{maximum}
572
+ # characters)"</code>
573
+ # @option options [String] :too_short An error message added
574
+ # when the attribute value is too short. Defaults to
575
+ # <code>"is too short (minimum is %{minimum}
576
+ # characters)"</code>
577
+ # @option options [String] :wrong_length An error message
578
+ # added when the attribute has the incorrect length (as
579
+ # specified by `:exactly`). Defaults to <code>"is the wrong
580
+ # length (should be %{exactly} characters"</code>
581
+ # @option options [Boolean] :allow_nil (false) Skip validation if the
582
+ # attribute value is `nil`.
583
+ # @option options [Boolean] :allow_blank (false) Skip validation if the
584
+ # attribute value is `blank`.
585
+ # @option options [Symbol] :on (:save) When this validation is run.
586
+ # Valid values include:
587
+ # * `:save`
588
+ # * `:create`
589
+ # * `:update`
590
+ # @option options [Symbol,String,Proc] :if Specifies a method or proc
591
+ # to call. The validation will only be run if the return value is
592
+ # of the method/proc is true (e.g. `:if => :name_changed?` or
593
+ # `:if => lambda{|book| book.in_stock? }`).
594
+ # @option options [Symbol,String,Proc] :unless Specifies a method or
595
+ # proc to call. The validation will *not* be run if the return value
596
+ # is of the method/proc is false.
597
+ def validates_length_of *args
598
+ validators << LengthValidator.new(self, *args)
599
+ end
600
+
601
+ # Validates the attribute has a numeric value.
602
+ #
603
+ # validates_numericality_of :age, :only_integer => true
604
+ #
605
+ # ### Multi-Valued Attributes
606
+ #
607
+ # You can validate multi-valued attributes using this the same way you
608
+ # validate single-valued attributes. Each value will be validated
609
+ # individually.
610
+ #
611
+ # @overload validates_numericality_of(*attributes, options = {}, &block)
612
+ # @param attributes A list of attribute names to validate.
613
+ # @param [Hash] options
614
+ # @option options [Boolean] :only_integer (false) Adds an error
615
+ # when valiating and the value is numeric, but it not a whole number.
616
+ # @option options [Integer] :equal_to When set the value must equal
617
+ # the given value exactly. May not be used with the greater/less
618
+ # options.
619
+ # @option options [Numeric] :greater_than Ensures the attribute
620
+ # is greater than the given number.
621
+ # @option options [Integer] :greater_than_or_equal_to Ensures the
622
+ # attribute is greater than or equal to the given number.
623
+ # @option options [Numeric] :less_than Ensures the attribute is less
624
+ # than the given value.
625
+ # @option options [Integer] :less_than_or_equal_to Ensures the value is
626
+ # less than or equal to the given number.
627
+ # @option options [Numeric] :even If true, the value may only be
628
+ # an even integer. This forces the `:only_integer` to `true`.
629
+ # @option options [Numeric] :odd If true, the value may only be
630
+ # an odd integer. This forces the `:only_integer` to `true`.
631
+ # @option options [String] :message A custom error message. The default
632
+ # `:message` is "is not a number".
633
+ # @option options [Boolean] :allow_nil (false) Skip validation if the
634
+ # attribute value is `nil`.
635
+ # @option options [Boolean] :allow_blank (false) Skip validation if the
636
+ # attribute value is `blank`.
637
+ # @option options [Symbol] :on (:save) When this validation is run.
638
+ # Valid values include:
639
+ # * `:save`
640
+ # * `:create`
641
+ # * `:update`
642
+ # @option options [Symbol,String,Proc] :if Specifies a method or proc
643
+ # to call. The validation will only be run if the return value is
644
+ # of the method/proc is true (e.g. `:if => :name_changed?` or
645
+ # `:if => lambda{|book| book.in_stock? }`).
646
+ # @option options [Symbol,String,Proc] :unless Specifies a method or
647
+ # proc to call. The validation will *not* be run if the return value
648
+ # is of the method/proc is false.
649
+ def validates_numericality_of *args
650
+ validators << NumericalityValidator.new(self, *args)
651
+ end
652
+
653
+ # Validates the named attributes are not blank. For validation
654
+ # purposes, blank values include:
655
+ #
656
+ # * `nil`
657
+ # * empty string
658
+ # * anything that responds to #empty? with true
659
+ # * anything that responds to #blank? with true
660
+ #
661
+ # @overload validates_presence_of(*attributes, options = {}, &block)
662
+ # @param attributes A list of attribute names to validate.
663
+ # @param [Hash] options
664
+ # @option options [String] :message A custom error message. The default
665
+ # `:message` is "may not be blank".
666
+ # @option options [Symbol] :on (:save) When this validation is run.
667
+ # Valid values include:
668
+ # * `:save`
669
+ # * `:create`
670
+ # * `:update`
671
+ # @option options [Boolean] :allow_nil (false) Skip validation if the
672
+ # attribute value is `nil`.
673
+ # @option options [Boolean] :allow_blank (false) Skip validation if the
674
+ # attribute value is `blank`.
675
+ # @option options [Symbol,String,Proc] :if Specifies a method or proc
676
+ # to call. The validation will only be run if the return value is
677
+ # of the method/proc is true (e.g. `:if => :name_changed?` or
678
+ # `:if => lambda{|book| book.in_stock? }`).
679
+ # @option options [Symbol,String,Proc] :unless Specifies a method or
680
+ # proc to call. The validation will *not* be run if the return value
681
+ # is of the method/proc is false.
682
+ def validates_presence_of *args
683
+ validators << PresenceValidator.new(self, *args)
684
+ end
685
+
686
+ # @api private
687
+ private
688
+ def validators
689
+ @validators ||= []
690
+ end
691
+
692
+ end
693
+ end
694
+ end