aws_sdk 3.1.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 (390) hide show
  1. data/lib/aws-sdk.rb +14 -0
  2. data/lib/aws.rb +49 -0
  3. data/lib/aws/api_config/AutoScaling-2011-01-01.yml +791 -0
  4. data/lib/aws/api_config/CloudFormation-2010-05-15.yml +303 -0
  5. data/lib/aws/api_config/DynamoDB-2011-12-05.yml +540 -0
  6. data/lib/aws/api_config/EC2-2011-12-15.yml +3638 -0
  7. data/lib/aws/api_config/EC2-2012-04-01.yml +3739 -0
  8. data/lib/aws/api_config/ELB-2011-08-15.yml +512 -0
  9. data/lib/aws/api_config/IAM-2010-05-08.yml +1221 -0
  10. data/lib/aws/api_config/SNS-2010-03-31.yml +248 -0
  11. data/lib/aws/api_config/SQS-2011-10-01.yml +314 -0
  12. data/lib/aws/api_config/STS-2011-06-15.yml +54 -0
  13. data/lib/aws/api_config/SimpleDB-2009-04-15.yml +305 -0
  14. data/lib/aws/api_config/SimpleEmailService-2010-12-01.yml +231 -0
  15. data/lib/aws/api_config/SimpleWorkflow-2012-01-25.yml +721 -0
  16. data/lib/aws/auto_scaling.rb +162 -0
  17. data/lib/aws/auto_scaling/activity.rb +102 -0
  18. data/lib/aws/auto_scaling/activity_collection.rb +82 -0
  19. data/lib/aws/auto_scaling/client.rb +765 -0
  20. data/lib/aws/auto_scaling/config.rb +18 -0
  21. data/lib/aws/auto_scaling/errors.rb +22 -0
  22. data/lib/aws/auto_scaling/group.rb +420 -0
  23. data/lib/aws/auto_scaling/group_collection.rb +96 -0
  24. data/lib/aws/auto_scaling/group_options.rb +146 -0
  25. data/lib/aws/auto_scaling/instance.rb +192 -0
  26. data/lib/aws/auto_scaling/instance_collection.rb +63 -0
  27. data/lib/aws/auto_scaling/launch_configuration.rb +150 -0
  28. data/lib/aws/auto_scaling/launch_configuration_collection.rb +144 -0
  29. data/lib/aws/auto_scaling/notification_configuration.rb +89 -0
  30. data/lib/aws/auto_scaling/notification_configuration_collection.rb +184 -0
  31. data/lib/aws/auto_scaling/request.rb +23 -0
  32. data/lib/aws/auto_scaling/scaling_policy.rb +125 -0
  33. data/lib/aws/auto_scaling/scaling_policy_collection.rb +72 -0
  34. data/lib/aws/auto_scaling/scaling_policy_options.rb +61 -0
  35. data/lib/aws/auto_scaling/scheduled_action.rb +145 -0
  36. data/lib/aws/auto_scaling/scheduled_action_collection.rb +195 -0
  37. data/lib/aws/auto_scaling/tag.rb +59 -0
  38. data/lib/aws/auto_scaling/tag_collection.rb +112 -0
  39. data/lib/aws/cloud_formation.rb +270 -0
  40. data/lib/aws/cloud_formation/client.rb +339 -0
  41. data/lib/aws/cloud_formation/config.rb +18 -0
  42. data/lib/aws/cloud_formation/errors.rb +22 -0
  43. data/lib/aws/cloud_formation/request.rb +29 -0
  44. data/lib/aws/cloud_formation/stack.rb +256 -0
  45. data/lib/aws/cloud_formation/stack_collection.rb +206 -0
  46. data/lib/aws/cloud_formation/stack_event.rb +75 -0
  47. data/lib/aws/cloud_formation/stack_event_collection.rb +47 -0
  48. data/lib/aws/cloud_formation/stack_options.rb +72 -0
  49. data/lib/aws/cloud_formation/stack_output.rb +53 -0
  50. data/lib/aws/cloud_formation/stack_resource.rb +117 -0
  51. data/lib/aws/cloud_formation/stack_resource_collection.rb +84 -0
  52. data/lib/aws/cloud_formation/stack_resource_summary_collection.rb +72 -0
  53. data/lib/aws/cloud_formation/stack_summary.rb +71 -0
  54. data/lib/aws/cloud_formation/stack_summary_collection.rb +127 -0
  55. data/lib/aws/core.rb +474 -0
  56. data/lib/aws/core/async_handle.rb +90 -0
  57. data/lib/aws/core/autoloader.rb +64 -0
  58. data/lib/aws/core/cacheable.rb +78 -0
  59. data/lib/aws/core/client.rb +541 -0
  60. data/lib/aws/core/client/query_json.rb +110 -0
  61. data/lib/aws/core/client/query_xml.rb +122 -0
  62. data/lib/aws/core/collection.rb +234 -0
  63. data/lib/aws/core/collection/limitable.rb +99 -0
  64. data/lib/aws/core/collection/simple.rb +90 -0
  65. data/lib/aws/core/configuration.rb +445 -0
  66. data/lib/aws/core/data.rb +242 -0
  67. data/lib/aws/core/default_signer.rb +67 -0
  68. data/lib/aws/core/http/curb_handler.rb +136 -0
  69. data/lib/aws/core/http/handler.rb +77 -0
  70. data/lib/aws/core/http/httparty_handler.rb +114 -0
  71. data/lib/aws/core/http/net_http_handler.rb +85 -0
  72. data/lib/aws/core/http/request.rb +250 -0
  73. data/lib/aws/core/http/response.rb +74 -0
  74. data/lib/aws/core/indifferent_hash.rb +88 -0
  75. data/lib/aws/core/inflection.rb +47 -0
  76. data/lib/aws/core/lazy_error_classes.rb +90 -0
  77. data/lib/aws/core/log_formatter.rb +454 -0
  78. data/lib/aws/core/meta_utils.rb +45 -0
  79. data/lib/aws/core/model.rb +57 -0
  80. data/lib/aws/core/naming.rb +30 -0
  81. data/lib/aws/core/option_grammar.rb +700 -0
  82. data/lib/aws/core/page_result.rb +73 -0
  83. data/lib/aws/core/policy.rb +916 -0
  84. data/lib/aws/core/resource.rb +408 -0
  85. data/lib/aws/core/resource_cache.rb +40 -0
  86. data/lib/aws/core/response.rb +202 -0
  87. data/lib/aws/core/response_cache.rb +50 -0
  88. data/lib/aws/core/service_interface.rb +61 -0
  89. data/lib/aws/core/session_signer.rb +90 -0
  90. data/lib/aws/core/signature/version_2.rb +42 -0
  91. data/lib/aws/core/signature/version_3.rb +73 -0
  92. data/lib/aws/core/signature/version_3_http.rb +72 -0
  93. data/lib/aws/core/signature/version_4.rb +138 -0
  94. data/lib/aws/core/uri_escape.rb +42 -0
  95. data/lib/aws/core/xml/frame.rb +242 -0
  96. data/lib/aws/core/xml/frame_stack.rb +85 -0
  97. data/lib/aws/core/xml/grammar.rb +299 -0
  98. data/lib/aws/core/xml/parser.rb +70 -0
  99. data/lib/aws/core/xml/root_frame.rb +65 -0
  100. data/lib/aws/core/xml/sax_handlers/libxml.rb +47 -0
  101. data/lib/aws/core/xml/sax_handlers/nokogiri.rb +55 -0
  102. data/lib/aws/core/xml/sax_handlers/ox.rb +41 -0
  103. data/lib/aws/core/xml/sax_handlers/rexml.rb +43 -0
  104. data/lib/aws/core/xml/stub.rb +123 -0
  105. data/lib/aws/dynamo_db.rb +213 -0
  106. data/lib/aws/dynamo_db/attribute_collection.rb +460 -0
  107. data/lib/aws/dynamo_db/batch_get.rb +206 -0
  108. data/lib/aws/dynamo_db/batch_write.rb +251 -0
  109. data/lib/aws/dynamo_db/client.rb +888 -0
  110. data/lib/aws/dynamo_db/config.rb +20 -0
  111. data/lib/aws/dynamo_db/errors.rb +20 -0
  112. data/lib/aws/dynamo_db/expectations.rb +40 -0
  113. data/lib/aws/dynamo_db/item.rb +130 -0
  114. data/lib/aws/dynamo_db/item_collection.rb +852 -0
  115. data/lib/aws/dynamo_db/item_data.rb +31 -0
  116. data/lib/aws/dynamo_db/keys.rb +41 -0
  117. data/lib/aws/dynamo_db/primary_key_element.rb +47 -0
  118. data/lib/aws/dynamo_db/request.rb +28 -0
  119. data/lib/aws/dynamo_db/resource.rb +33 -0
  120. data/lib/aws/dynamo_db/table.rb +489 -0
  121. data/lib/aws/dynamo_db/table_collection.rb +165 -0
  122. data/lib/aws/dynamo_db/types.rb +86 -0
  123. data/lib/aws/ec2.rb +431 -0
  124. data/lib/aws/ec2/attachment.rb +140 -0
  125. data/lib/aws/ec2/attachment_collection.rb +54 -0
  126. data/lib/aws/ec2/availability_zone.rb +87 -0
  127. data/lib/aws/ec2/availability_zone_collection.rb +43 -0
  128. data/lib/aws/ec2/block_device_mappings.rb +53 -0
  129. data/lib/aws/ec2/client.rb +4121 -0
  130. data/lib/aws/ec2/collection.rb +36 -0
  131. data/lib/aws/ec2/config.rb +18 -0
  132. data/lib/aws/ec2/config_transform.rb +63 -0
  133. data/lib/aws/ec2/customer_gateway.rb +90 -0
  134. data/lib/aws/ec2/customer_gateway_collection.rb +73 -0
  135. data/lib/aws/ec2/dhcp_options.rb +106 -0
  136. data/lib/aws/ec2/dhcp_options_collection.rb +87 -0
  137. data/lib/aws/ec2/elastic_ip.rb +157 -0
  138. data/lib/aws/ec2/elastic_ip_collection.rb +97 -0
  139. data/lib/aws/ec2/errors.rb +32 -0
  140. data/lib/aws/ec2/filtered_collection.rb +90 -0
  141. data/lib/aws/ec2/has_permissions.rb +44 -0
  142. data/lib/aws/ec2/image.rb +254 -0
  143. data/lib/aws/ec2/image_collection.rb +228 -0
  144. data/lib/aws/ec2/instance.rb +669 -0
  145. data/lib/aws/ec2/instance_collection.rb +346 -0
  146. data/lib/aws/ec2/internet_gateway.rb +122 -0
  147. data/lib/aws/ec2/internet_gateway/attachment.rb +78 -0
  148. data/lib/aws/ec2/internet_gateway_collection.rb +54 -0
  149. data/lib/aws/ec2/key_pair.rb +82 -0
  150. data/lib/aws/ec2/key_pair_collection.rb +99 -0
  151. data/lib/aws/ec2/network_acl.rb +256 -0
  152. data/lib/aws/ec2/network_acl/association.rb +56 -0
  153. data/lib/aws/ec2/network_acl/entry.rb +147 -0
  154. data/lib/aws/ec2/network_acl_collection.rb +64 -0
  155. data/lib/aws/ec2/network_interface.rb +228 -0
  156. data/lib/aws/ec2/network_interface/attachment.rb +100 -0
  157. data/lib/aws/ec2/network_interface_collection.rb +103 -0
  158. data/lib/aws/ec2/permission_collection.rb +174 -0
  159. data/lib/aws/ec2/region.rb +97 -0
  160. data/lib/aws/ec2/region_collection.rb +51 -0
  161. data/lib/aws/ec2/request.rb +22 -0
  162. data/lib/aws/ec2/reserved_instances.rb +53 -0
  163. data/lib/aws/ec2/reserved_instances_collection.rb +40 -0
  164. data/lib/aws/ec2/reserved_instances_offering.rb +58 -0
  165. data/lib/aws/ec2/reserved_instances_offering_collection.rb +39 -0
  166. data/lib/aws/ec2/resource.rb +161 -0
  167. data/lib/aws/ec2/resource_tag_collection.rb +211 -0
  168. data/lib/aws/ec2/route_table.rb +205 -0
  169. data/lib/aws/ec2/route_table/association.rb +119 -0
  170. data/lib/aws/ec2/route_table/route.rb +113 -0
  171. data/lib/aws/ec2/route_table_collection.rb +72 -0
  172. data/lib/aws/ec2/security_group.rb +458 -0
  173. data/lib/aws/ec2/security_group/egress_ip_permission_collection.rb +63 -0
  174. data/lib/aws/ec2/security_group/ingress_ip_permission_collection.rb +61 -0
  175. data/lib/aws/ec2/security_group/ip_permission.rb +128 -0
  176. data/lib/aws/ec2/security_group_collection.rb +135 -0
  177. data/lib/aws/ec2/snapshot.rb +143 -0
  178. data/lib/aws/ec2/snapshot_collection.rb +131 -0
  179. data/lib/aws/ec2/subnet.rb +161 -0
  180. data/lib/aws/ec2/subnet_collection.rb +115 -0
  181. data/lib/aws/ec2/tag.rb +81 -0
  182. data/lib/aws/ec2/tag_collection.rb +107 -0
  183. data/lib/aws/ec2/tagged_collection.rb +53 -0
  184. data/lib/aws/ec2/tagged_item.rb +85 -0
  185. data/lib/aws/ec2/volume.rb +170 -0
  186. data/lib/aws/ec2/volume_collection.rb +97 -0
  187. data/lib/aws/ec2/vpc.rb +166 -0
  188. data/lib/aws/ec2/vpc_collection.rb +70 -0
  189. data/lib/aws/ec2/vpn_connection.rb +99 -0
  190. data/lib/aws/ec2/vpn_connection/telemetry.rb +49 -0
  191. data/lib/aws/ec2/vpn_connection_collection.rb +96 -0
  192. data/lib/aws/ec2/vpn_gateway.rb +123 -0
  193. data/lib/aws/ec2/vpn_gateway/attachment.rb +45 -0
  194. data/lib/aws/ec2/vpn_gateway_collection.rb +77 -0
  195. data/lib/aws/elb.rb +65 -0
  196. data/lib/aws/elb/availability_zone_collection.rb +138 -0
  197. data/lib/aws/elb/backend_server_policy_collection.rb +140 -0
  198. data/lib/aws/elb/client.rb +539 -0
  199. data/lib/aws/elb/config.rb +18 -0
  200. data/lib/aws/elb/errors.rb +26 -0
  201. data/lib/aws/elb/instance_collection.rb +174 -0
  202. data/lib/aws/elb/listener.rb +189 -0
  203. data/lib/aws/elb/listener_collection.rb +119 -0
  204. data/lib/aws/elb/listener_opts.rb +45 -0
  205. data/lib/aws/elb/load_balancer.rb +253 -0
  206. data/lib/aws/elb/load_balancer_collection.rb +113 -0
  207. data/lib/aws/elb/load_balancer_policy.rb +93 -0
  208. data/lib/aws/elb/load_balancer_policy_collection.rb +208 -0
  209. data/lib/aws/elb/request.rb +23 -0
  210. data/lib/aws/errors.rb +122 -0
  211. data/lib/aws/iam.rb +418 -0
  212. data/lib/aws/iam/access_key.rb +180 -0
  213. data/lib/aws/iam/access_key_collection.rb +128 -0
  214. data/lib/aws/iam/account_alias_collection.rb +79 -0
  215. data/lib/aws/iam/client.rb +1609 -0
  216. data/lib/aws/iam/collection.rb +83 -0
  217. data/lib/aws/iam/config.rb +18 -0
  218. data/lib/aws/iam/errors.rb +22 -0
  219. data/lib/aws/iam/group.rb +111 -0
  220. data/lib/aws/iam/group_collection.rb +132 -0
  221. data/lib/aws/iam/group_policy_collection.rb +47 -0
  222. data/lib/aws/iam/group_user_collection.rb +84 -0
  223. data/lib/aws/iam/login_profile.rb +99 -0
  224. data/lib/aws/iam/mfa_device.rb +52 -0
  225. data/lib/aws/iam/mfa_device_collection.rb +127 -0
  226. data/lib/aws/iam/policy.rb +46 -0
  227. data/lib/aws/iam/policy_collection.rb +188 -0
  228. data/lib/aws/iam/request.rb +29 -0
  229. data/lib/aws/iam/resource.rb +71 -0
  230. data/lib/aws/iam/server_certificate.rb +141 -0
  231. data/lib/aws/iam/server_certificate_collection.rb +138 -0
  232. data/lib/aws/iam/signing_certificate.rb +169 -0
  233. data/lib/aws/iam/signing_certificate_collection.rb +131 -0
  234. data/lib/aws/iam/user.rb +205 -0
  235. data/lib/aws/iam/user_collection.rb +133 -0
  236. data/lib/aws/iam/user_group_collection.rb +98 -0
  237. data/lib/aws/iam/user_policy.rb +90 -0
  238. data/lib/aws/iam/user_policy_collection.rb +45 -0
  239. data/lib/aws/iam/virtual_mfa_device.rb +139 -0
  240. data/lib/aws/iam/virtual_mfa_device_collection.rb +73 -0
  241. data/lib/aws/rails.rb +195 -0
  242. data/lib/aws/record.rb +116 -0
  243. data/lib/aws/record/abstract_base.rb +645 -0
  244. data/lib/aws/record/attributes.rb +384 -0
  245. data/lib/aws/record/conversion.rb +38 -0
  246. data/lib/aws/record/dirty_tracking.rb +285 -0
  247. data/lib/aws/record/errors.rb +143 -0
  248. data/lib/aws/record/exceptions.rb +48 -0
  249. data/lib/aws/record/hash_model.rb +161 -0
  250. data/lib/aws/record/hash_model/attributes.rb +182 -0
  251. data/lib/aws/record/hash_model/finder_methods.rb +172 -0
  252. data/lib/aws/record/hash_model/scope.rb +108 -0
  253. data/lib/aws/record/model.rb +427 -0
  254. data/lib/aws/record/model/attributes.rb +379 -0
  255. data/lib/aws/record/model/finder_methods.rb +232 -0
  256. data/lib/aws/record/model/scope.rb +213 -0
  257. data/lib/aws/record/naming.rb +31 -0
  258. data/lib/aws/record/scope.rb +199 -0
  259. data/lib/aws/record/validations.rb +694 -0
  260. data/lib/aws/record/validator.rb +237 -0
  261. data/lib/aws/record/validators/acceptance.rb +51 -0
  262. data/lib/aws/record/validators/block.rb +38 -0
  263. data/lib/aws/record/validators/confirmation.rb +43 -0
  264. data/lib/aws/record/validators/count.rb +108 -0
  265. data/lib/aws/record/validators/exclusion.rb +43 -0
  266. data/lib/aws/record/validators/format.rb +57 -0
  267. data/lib/aws/record/validators/inclusion.rb +56 -0
  268. data/lib/aws/record/validators/length.rb +107 -0
  269. data/lib/aws/record/validators/method.rb +33 -0
  270. data/lib/aws/record/validators/numericality.rb +138 -0
  271. data/lib/aws/record/validators/presence.rb +45 -0
  272. data/lib/aws/s3.rb +135 -0
  273. data/lib/aws/s3/access_control_list.rb +250 -0
  274. data/lib/aws/s3/acl_object.rb +264 -0
  275. data/lib/aws/s3/bucket.rb +393 -0
  276. data/lib/aws/s3/bucket_collection.rb +143 -0
  277. data/lib/aws/s3/bucket_lifecycle_configuration.rb +360 -0
  278. data/lib/aws/s3/bucket_version_collection.rb +77 -0
  279. data/lib/aws/s3/client.rb +1184 -0
  280. data/lib/aws/s3/client/xml.rb +177 -0
  281. data/lib/aws/s3/config.rb +26 -0
  282. data/lib/aws/s3/data_options.rb +100 -0
  283. data/lib/aws/s3/errors.rb +81 -0
  284. data/lib/aws/s3/multipart_upload.rb +317 -0
  285. data/lib/aws/s3/multipart_upload_collection.rb +68 -0
  286. data/lib/aws/s3/object_collection.rb +337 -0
  287. data/lib/aws/s3/object_metadata.rb +96 -0
  288. data/lib/aws/s3/object_upload_collection.rb +77 -0
  289. data/lib/aws/s3/object_version.rb +143 -0
  290. data/lib/aws/s3/object_version_collection.rb +89 -0
  291. data/lib/aws/s3/paginated_collection.rb +75 -0
  292. data/lib/aws/s3/policy.rb +74 -0
  293. data/lib/aws/s3/prefix_and_delimiter_collection.rb +47 -0
  294. data/lib/aws/s3/prefixed_collection.rb +81 -0
  295. data/lib/aws/s3/presigned_post.rb +553 -0
  296. data/lib/aws/s3/request.rb +201 -0
  297. data/lib/aws/s3/s3_object.rb +1037 -0
  298. data/lib/aws/s3/tree.rb +118 -0
  299. data/lib/aws/s3/tree/branch_node.rb +68 -0
  300. data/lib/aws/s3/tree/child_collection.rb +104 -0
  301. data/lib/aws/s3/tree/leaf_node.rb +94 -0
  302. data/lib/aws/s3/tree/node.rb +22 -0
  303. data/lib/aws/s3/tree/parent.rb +87 -0
  304. data/lib/aws/s3/uploaded_part.rb +80 -0
  305. data/lib/aws/s3/uploaded_part_collection.rb +84 -0
  306. data/lib/aws/simple_db.rb +217 -0
  307. data/lib/aws/simple_db/attribute.rb +154 -0
  308. data/lib/aws/simple_db/attribute_collection.rb +231 -0
  309. data/lib/aws/simple_db/client.rb +349 -0
  310. data/lib/aws/simple_db/config.rb +20 -0
  311. data/lib/aws/simple_db/consistent_read_option.rb +42 -0
  312. data/lib/aws/simple_db/delete_attributes.rb +62 -0
  313. data/lib/aws/simple_db/domain.rb +121 -0
  314. data/lib/aws/simple_db/domain_collection.rb +113 -0
  315. data/lib/aws/simple_db/domain_metadata.rb +110 -0
  316. data/lib/aws/simple_db/errors.rb +55 -0
  317. data/lib/aws/simple_db/expect_condition_option.rb +45 -0
  318. data/lib/aws/simple_db/item.rb +93 -0
  319. data/lib/aws/simple_db/item_collection.rb +649 -0
  320. data/lib/aws/simple_db/item_data.rb +73 -0
  321. data/lib/aws/simple_db/put_attributes.rb +60 -0
  322. data/lib/aws/simple_db/request.rb +23 -0
  323. data/lib/aws/simple_email_service.rb +426 -0
  324. data/lib/aws/simple_email_service/client.rb +286 -0
  325. data/lib/aws/simple_email_service/config.rb +19 -0
  326. data/lib/aws/simple_email_service/email_address_collection.rb +69 -0
  327. data/lib/aws/simple_email_service/errors.rb +22 -0
  328. data/lib/aws/simple_email_service/identity.rb +91 -0
  329. data/lib/aws/simple_email_service/identity_collection.rb +81 -0
  330. data/lib/aws/simple_email_service/quotas.rb +64 -0
  331. data/lib/aws/simple_email_service/request.rb +29 -0
  332. data/lib/aws/simple_workflow.rb +226 -0
  333. data/lib/aws/simple_workflow/activity_task.rb +173 -0
  334. data/lib/aws/simple_workflow/activity_task_collection.rb +123 -0
  335. data/lib/aws/simple_workflow/activity_type.rb +131 -0
  336. data/lib/aws/simple_workflow/activity_type_collection.rb +93 -0
  337. data/lib/aws/simple_workflow/client.rb +1434 -0
  338. data/lib/aws/simple_workflow/config.rb +18 -0
  339. data/lib/aws/simple_workflow/count.rb +49 -0
  340. data/lib/aws/simple_workflow/decision_task.rb +601 -0
  341. data/lib/aws/simple_workflow/decision_task_collection.rb +225 -0
  342. data/lib/aws/simple_workflow/domain.rb +122 -0
  343. data/lib/aws/simple_workflow/domain_collection.rb +169 -0
  344. data/lib/aws/simple_workflow/errors.rb +20 -0
  345. data/lib/aws/simple_workflow/history_event.rb +276 -0
  346. data/lib/aws/simple_workflow/history_event_collection.rb +76 -0
  347. data/lib/aws/simple_workflow/option_formatters.rb +82 -0
  348. data/lib/aws/simple_workflow/request.rb +36 -0
  349. data/lib/aws/simple_workflow/resource.rb +94 -0
  350. data/lib/aws/simple_workflow/type.rb +89 -0
  351. data/lib/aws/simple_workflow/type_collection.rb +140 -0
  352. data/lib/aws/simple_workflow/workflow_execution.rb +386 -0
  353. data/lib/aws/simple_workflow/workflow_execution_collection.rb +617 -0
  354. data/lib/aws/simple_workflow/workflow_type.rb +177 -0
  355. data/lib/aws/simple_workflow/workflow_type_collection.rb +91 -0
  356. data/lib/aws/sns.rb +74 -0
  357. data/lib/aws/sns/client.rb +371 -0
  358. data/lib/aws/sns/config.rb +18 -0
  359. data/lib/aws/sns/errors.rb +22 -0
  360. data/lib/aws/sns/has_delivery_policy.rb +68 -0
  361. data/lib/aws/sns/policy.rb +47 -0
  362. data/lib/aws/sns/request.rb +23 -0
  363. data/lib/aws/sns/subscription.rb +144 -0
  364. data/lib/aws/sns/subscription_collection.rb +80 -0
  365. data/lib/aws/sns/topic.rb +403 -0
  366. data/lib/aws/sns/topic_collection.rb +67 -0
  367. data/lib/aws/sns/topic_subscription_collection.rb +55 -0
  368. data/lib/aws/sqs.rb +79 -0
  369. data/lib/aws/sqs/client.rb +360 -0
  370. data/lib/aws/sqs/config.rb +18 -0
  371. data/lib/aws/sqs/errors.rb +101 -0
  372. data/lib/aws/sqs/policy.rb +48 -0
  373. data/lib/aws/sqs/queue.rb +725 -0
  374. data/lib/aws/sqs/queue_collection.rb +170 -0
  375. data/lib/aws/sqs/received_message.rb +181 -0
  376. data/lib/aws/sqs/received_sns_message.rb +112 -0
  377. data/lib/aws/sqs/request.rb +43 -0
  378. data/lib/aws/sts.rb +152 -0
  379. data/lib/aws/sts/client.rb +105 -0
  380. data/lib/aws/sts/config.rb +18 -0
  381. data/lib/aws/sts/errors.rb +22 -0
  382. data/lib/aws/sts/federated_session.rb +56 -0
  383. data/lib/aws/sts/policy.rb +30 -0
  384. data/lib/aws/sts/request.rb +29 -0
  385. data/lib/aws/sts/session.rb +48 -0
  386. data/lib/net/http/connection_pool.rb +210 -0
  387. data/lib/net/http/connection_pool/connection.rb +132 -0
  388. data/lib/net/http/connection_pool/session.rb +93 -0
  389. data/lib/user.rb +49 -0
  390. metadata +433 -0
@@ -0,0 +1,213 @@
1
+ # Copyright 2011-2012 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
+ # @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
+ #
126
+ # # books returned by this scope will be ordered by :published_at
127
+ # # and not :author.
128
+ # Book.where(:read => false).order(:author).order(:published_at)
129
+ #
130
+ # @param [String,Symbol] attribute_name The attribute to sort by.
131
+ # @param [:asc, :desc] order (:asc) The direct to sort.
132
+ def order attribute_name, order = :asc
133
+ _with(:order => [attribute_name, order])
134
+ end
135
+
136
+ # @private
137
+ private
138
+ def _each_object &block
139
+
140
+ items = _item_collection
141
+
142
+ items.select.each do |item_data|
143
+ obj = base_class.new(:shard => _shard)
144
+ obj.send(:hydrate, item_data.name, item_data.attributes)
145
+ yield(obj)
146
+ end
147
+
148
+ end
149
+
150
+ # Merges another scope with this scope. Conditions are added together
151
+ # and the limit and order parts replace those in this scope (if set).
152
+ # @param [Scope] scope A scope to merge with this one.
153
+ # @return [Scope] Returns a new scope with merged conditions and
154
+ # overriden order and limit.
155
+ # @private
156
+ private
157
+ def _merge_scope scope
158
+ merged = self
159
+ scope.instance_variable_get('@options').each_pair do |opt_name,opt_value|
160
+ unless [nil, []].include?(opt_value)
161
+ if opt_name == :where
162
+ opt_value.each do |condition|
163
+ merged = merged.where(*condition)
164
+ end
165
+ else
166
+ merged = merged.send(opt_name, *opt_value)
167
+ end
168
+ end
169
+ end
170
+ merged
171
+ end
172
+
173
+ # Consumes a hash of options (e.g. +:where+, +:order+ and +:limit+) and
174
+ # builds them onto the current scope, returning a new one.
175
+ # @param [Hash] options
176
+ # @option options :where
177
+ # @option options :order
178
+ # @option options [Integer] :limit
179
+ # @return [Scope] Returns a new scope with the hash of scope
180
+ # options applied.
181
+ # @private
182
+ private
183
+ def _handle_options options
184
+ scope = self
185
+ options.each_pair do |method, args|
186
+ if method == :where and args.is_a?(Hash)
187
+ # splatting a hash turns it into an array, bad juju
188
+ scope = scope.send(method, args)
189
+ else
190
+ scope = scope.send(method, *args)
191
+ end
192
+ end
193
+ scope
194
+ end
195
+
196
+ # Converts this scope object into an AWS::SimpleDB::ItemCollection
197
+ # @return [SimpleDB::ItemCollection]
198
+ # @private
199
+ private
200
+ def _item_collection
201
+ items = base_class.sdb_domain(_shard).items
202
+ items = items.order(*@options[:order]) if @options[:order]
203
+ items = items.limit(*@options[:limit]) if @options[:limit]
204
+ @options[:where].each do |where_condition|
205
+ items = items.where(*where_condition)
206
+ end
207
+ items
208
+ end
209
+
210
+ end
211
+ end
212
+ end
213
+ end
@@ -0,0 +1,31 @@
1
+ # Copyright 2011-2012 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
+ # @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
+ # @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,199 @@
1
+ # Copyright 2011-2012 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
+ # @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
+ # books = Book.limit(100)
123
+ #
124
+ # @param [Integer] limit The maximum number of records to return.
125
+ # @return [Scope] Returns a new scope that has the applied limit.
126
+ def limit limit
127
+ _with(:limit => limit)
128
+ end
129
+
130
+ # Yields once for each record matching the request made by this scope.
131
+ #
132
+ # books = Book.where(:author => 'me').order(:price, :asc).limit(10)
133
+ #
134
+ # books.each do |book|
135
+ # puts book.attributes.to_yaml
136
+ # end
137
+ #
138
+ # @yieldparam [Object] record
139
+ def each &block
140
+ if block_given?
141
+ _each_object(&block)
142
+ else
143
+ Enumerator.new(self, :"_each_object")
144
+ end
145
+ end
146
+
147
+ protected
148
+ def _shard
149
+ @options[:shard] || base_class.shard_name
150
+ end
151
+ alias_method :domain, :shard
152
+
153
+ # @private
154
+ private
155
+ def _each_object &block
156
+ raise NotImplementedError
157
+ end
158
+
159
+ # @private
160
+ private
161
+ def _with options
162
+ self.class.new(base_class, @options.merge(options))
163
+ end
164
+
165
+ # @private
166
+ private
167
+ def method_missing scope_name, *args
168
+ # @todo only proxy named scope methods
169
+ _merge_scope(base_class.send(scope_name, *args))
170
+ end
171
+
172
+ # Merges the one scope with the current scope, returning a 3rd.
173
+ # @param [Scope] scope
174
+ # @return [Scope]
175
+ # @private
176
+ private
177
+ def _merge_scope scope
178
+ raise NotImplementedError
179
+ end
180
+
181
+ # Consumes a hash of options (e.g. +:shard+, +:limit) and returns
182
+ # a new scope with those applied.
183
+ # @return [Scope]
184
+ # @private
185
+ private
186
+ def _handle_options options
187
+ raise NotImplementedError
188
+ end
189
+
190
+ # @private
191
+ private
192
+ def _item_collection
193
+ raise NotImplementedError
194
+ end
195
+
196
+ end
197
+
198
+ end
199
+ end
@@ -0,0 +1,694 @@
1
+ # Copyright 2011-2012 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/validators/acceptance'
15
+ require 'aws/record/validators/block'
16
+ require 'aws/record/validators/confirmation'
17
+ require 'aws/record/validators/count'
18
+ require 'aws/record/validators/exclusion'
19
+ require 'aws/record/validators/format'
20
+ require 'aws/record/validators/inclusion'
21
+ require 'aws/record/validators/length'
22
+ require 'aws/record/validators/numericality'
23
+ require 'aws/record/validators/presence'
24
+ require 'aws/record/validators/method'
25
+
26
+ module AWS
27
+ module Record
28
+
29
+ # Validation methods to be used with subclasses of AWS::Record::Model.
30
+ #
31
+ # = General Usage
32
+ #
33
+ # All standard validation methods follow the same basic usage.
34
+ # Call the validation method followed by one more attribute names
35
+ # and then an optional hash of modifiers.
36
+ #
37
+ # class Book < AWS::Record::Model
38
+ #
39
+ # # ...
40
+ #
41
+ # validates_presence_of :title, :author
42
+ #
43
+ # validates_length_of :summary,
44
+ # :max => 500,
45
+ # :allow_nil => true
46
+ #
47
+ # end
48
+ #
49
+ # = Conditional Validations
50
+ #
51
+ # Sometimes you only want to validate an attribute under certain
52
+ # conditions. To make this simple, all validation methods accept the
53
+ # following 3 options:
54
+ #
55
+ # * +:on+
56
+ # * +:if+
57
+ # * +:unless+
58
+ #
59
+ # You may mix and match all 3 of the above options.
60
+ #
61
+ # === Validate on :create or :update
62
+ #
63
+ # By default validations are run on create and update, but you can
64
+ # specify them to run for only create (initial save) or updates.
65
+ #
66
+ # validates_presence_of :created_at, :on => :create
67
+ #
68
+ # validates_presence_of :updated_at, :on => :update
69
+ #
70
+ # === Validate :if or :unless
71
+ #
72
+ # Sometimes you have more complex requirements to determine if/when a
73
+ # validation should run. +:if+ and +:unless+: both accept either
74
+ # a method name or proc.
75
+ #
76
+ # class Person
77
+ #
78
+ # # ...
79
+ #
80
+ # validates_presence_of :job_title, :if => :employee?
81
+ #
82
+ # validates_presence_of :nickname, :if => lambda {|person|
83
+ # person.is_family? or person.is_friend? }
84
+ #
85
+ # end
86
+ #
87
+ # = Validating Virtual (Non-persisted) Attributes
88
+ #
89
+ # All of the validators can be used with configured attributes, but they
90
+ # can also be used with any attribute that has a setter and a getter.
91
+ #
92
+ # Class Book < AWS::Record::Model
93
+ #
94
+ # attr_accessor :title
95
+ #
96
+ # validates_presence_of :title
97
+ #
98
+ # end
99
+ #
100
+ module Validations
101
+
102
+ def self.extended base
103
+
104
+ base.send(:define_method, :run_validations) do
105
+ errors.clear!
106
+ self.class.send(:validators).each do |validator|
107
+ validator.validate(self)
108
+ end
109
+ end
110
+
111
+ base.send(:private, :run_validations)
112
+
113
+ end
114
+
115
+ # Registers a validation method.
116
+ #
117
+ # validate :ensure_age_is_greater_than_shoe_size
118
+ #
119
+ # def ensure_age_is_greater_than_shoe_size
120
+ # unless age > shoe_size
121
+ # errors.add(:age, 'should be greater than your shoe size')
122
+ # end
123
+ # end
124
+ #
125
+ # You can also pass a list of method names that should be called during
126
+ # validation.
127
+ #
128
+ # validate :some_complex_validation, :some_other_validation
129
+ #
130
+ # As with most other validation methods you can also pass a hash of
131
+ # options that affect when the named validation methods get called.
132
+ #
133
+ # validate :my_custom_validation, :unless => :new_record?
134
+ #
135
+ # @overload validate(*method_names, options = {})
136
+ # @param [Array<Symbol>] method_names A list of methods to call
137
+ # during validation.
138
+ # @param [Hash] options
139
+ # @option options [Symbol] :on (:save) When this validation is run.
140
+ # Valid values include:
141
+ # * +:save+
142
+ # * +:create+
143
+ # * +:update+
144
+ # @option options [Symbol,String,Proc] :if Specifies a method or proc
145
+ # to call. The validation will only be run if the return value is
146
+ # of the method/proc is true (e.g. +:if => :name_changed?+ or
147
+ # +:if => lambda{|book| book.in_stock? }+).
148
+ # @option options [Symbol,String,Proc] :unless Specifies a method or
149
+ # proc to call. The validation will *not* be run if the return value
150
+ # is of the method/proc is false.
151
+ def validate *args
152
+ validators << MethodValidator.new(self, *args)
153
+ end
154
+
155
+ # This validation method is primariliy intended for ensuring a form
156
+ # checkbox (like an EULA agreement or terms of service acknowledgement)
157
+ # is checked.
158
+ #
159
+ # class User < AWS::Record::Model
160
+ # boolean_attr :terms_of_service
161
+ # validates_acceptance_of :terms_of_service
162
+ # end
163
+ #
164
+ # === Virtual Attributes
165
+ #
166
+ # If you choose to validate the acceptance of a non-existant attribute
167
+ # then a setter and a getter will be added automtically for you.
168
+ #
169
+ # class User < AWS::Record::Model
170
+ # validates_acceptance_of :terms_of_service
171
+ # end
172
+ #
173
+ # user = User.new
174
+ # user.respond_to?(:terms_of_service) #=> true
175
+ # user.respond_to?(:terms_of_service=) #=> true
176
+ #
177
+ # === Accepted Values
178
+ #
179
+ # The default behavior for +validates_acceptance_of+ is to add
180
+ # an error when the value is '1' or +true+. Also note, this validation
181
+ # method defaults +:allow_nil+ to true.
182
+ #
183
+ # * +nil+ implies the field was omitted from the form and therefore
184
+ # should not be validated
185
+ #
186
+ # class User < AWS::Record::Model
187
+ # validates_acceptance_of :terms_of_service
188
+ # end
189
+ #
190
+ # u = User.new
191
+ # u.terms_of_service #=> nil
192
+ # u.valid? #=> true
193
+ #
194
+ # * '1' is the default value for most checkbox form helpers, and #
195
+ # therefore indicates an accepted value.
196
+ #
197
+ # * +true+ is how boolean attributes typecast '1'. This is helpful
198
+ # when you have your checkbox post its value to a +:boolean_attr+.
199
+ #
200
+ # === Multi-Valued Attributes
201
+ #
202
+ # This validator works only with single-valued attributes. If you need
203
+ # to validate that all of the values in a set are true, then use
204
+ # {#validates_inclusion_of}.
205
+ #
206
+ # @note Most validators default :allow_nil to false, this one defaults to true
207
+ # @note This validator should not be used with multi-valued attributes
208
+ #
209
+ # @overload validates_acceptance_of(*attributes, options = {}, &block)
210
+ # @param attributes A list of attribute names to validate.
211
+ # @param [Hash] options
212
+ # @option options [mixed] :accpet Specify an additional accepted value.
213
+ #
214
+ # validates_acceptance_of :agree, :accept => 'yes'
215
+ #
216
+ # @option options [String] :message A custom error message. The default
217
+ # +:message+ is "must be accepted".
218
+ # @option options [Boolean] :allow_nil (true) Skip validation if the
219
+ # attribute value is +nil+.
220
+ # @option options [Symbol] :on (:save) When this validation is run.
221
+ # Valid values include:
222
+ # * +:save+
223
+ # * +:create+
224
+ # * +:update+
225
+ # @option options [Symbol,String,Proc] :if Specifies a method or proc
226
+ # to call. The validation will only be run if the return value is
227
+ # of the method/proc is true (e.g. +:if => :name_changed?+ or
228
+ # +:if => lambda{|book| book.in_stock? }+).
229
+ # @option options [Symbol,String,Proc] :unless Specifies a method or
230
+ # proc to call. The validation will *not* be run if the return value
231
+ # is of the method/proc is false.
232
+ def validates_acceptance_of *args
233
+ validators << AcceptanceValidator.new(self, *args)
234
+ end
235
+
236
+ # Intended primarily for validating a form field was entered correctly
237
+ # by requiring it twice:
238
+ #
239
+ # Model:
240
+ # class User < AWS::Record::Model
241
+ # validates_confirmation_of :password, :if => :password_changed?
242
+ # end
243
+ #
244
+ # View:
245
+ # <%= password_field "user", "password" %>
246
+ # <%= password_field "user", "password_confirmation" %>
247
+ #
248
+ # === Confirmation Value Accessors
249
+ #
250
+ # If your model does not have accessors for the confirmation value
251
+ # then they will be automatically added. In the example above
252
+ # the user class would have an +attr_accessor+ for
253
+ # +:password_confirmation+.
254
+ #
255
+ # === Conditional Validation
256
+ #
257
+ # Mostly commonly you only need to validate confirmation of an
258
+ # attribute when it has changed. It is therefore suggested to
259
+ # pass an +:if+ condition reflecting this:
260
+ #
261
+ # validates_confirmation_of :password, :if => :password_changed?
262
+ #
263
+ # === Multi-Valued Attributes
264
+ #
265
+ # This validator works only with single-valued attributes.
266
+ # It should not be used on attributes that have array or set values.
267
+ #
268
+ # @note This validation method does not accept the +:allow_nil+ option.
269
+ #
270
+ # @overload validates_confirmation_of(*attributes, options = {}, &block)
271
+ # @param attributes A list of attribute names to validate.
272
+ # @param [Hash] options
273
+ # @option options [String] :message A custom error message. The default
274
+ # +:message+ is "doesn't match confirmation".
275
+ # @option options [Symbol] :on (:save) When this validation is run.
276
+ # Valid values include:
277
+ # * +:save+
278
+ # * +:create+
279
+ # * +:update+
280
+ # @option options [Symbol,String,Proc] :if Specifies a method or proc
281
+ # to call. The validation will only be run if the return value is
282
+ # of the method/proc is true (e.g. +:if => :name_changed?+ or
283
+ # +:if => lambda{|book| book.in_stock? }+).
284
+ # @option options [Symbol,String,Proc] :unless Specifies a method or
285
+ # proc to call. The validation will *not* be run if the return value
286
+ # is of the method/proc is false.
287
+ def validates_confirmation_of *args
288
+ validators << ConfirmationValidator.new(self, *args)
289
+ end
290
+
291
+ # Validates the number of values for a given attribute.
292
+ #
293
+ # === Length vs Count
294
+ #
295
+ # +validates_count_of+ validates the number of attribute values,
296
+ # whereas +validates_length_of: validates the length of each
297
+ # attribute value instead.
298
+ #
299
+ # If you need to ensure each attribute value is a given length see
300
+ # {#validates_length_of} instead.
301
+ #
302
+ # === Examples
303
+ #
304
+ # You can validate there are a certain number of values:
305
+ #
306
+ # validates_count_of :parents, :exactly => 2
307
+ #
308
+ # You can also specify a range:
309
+ #
310
+ # validates_count_of :tags, :within => (2..10)
311
+ #
312
+ # You can also specify min and max value seperately:
313
+ #
314
+ # validates_count_of :tags, :minimum => 2, :maximum => 10
315
+ #
316
+ # === +nil+ Values
317
+ #
318
+ # If you are validating an array or set that contains +nil+ values,
319
+ # the +nil+ values are counted normally as 1 each.
320
+ #
321
+ # If you are validating a non-enuemrable attribute that only
322
+ # contains a single nil or other scalar value, then nil is
323
+ # counted as 0.
324
+ #
325
+ # === Singular Attributes
326
+ #
327
+ # This validator is intended to for validating attributes that have
328
+ # an array or set of values. If used on an attribute that
329
+ # returns a scalar value (like +nil+ or a string), the count will
330
+ # always be 0 (for +nil+) or 1 (for everything else).
331
+ #
332
+ # It is therefore recomended to use +:validates_presence_of+ in
333
+ # place of +:validates_count_of+ when working with single-valued
334
+ # attributes.
335
+ #
336
+ # @overload validates_count_of(*attributes, options = {}, &block)
337
+ # @param attributes A list of attribute names to validate.
338
+ # @param [Hash] options
339
+ # @option options [Integer] :exactly The exact number of values the
340
+ # attribute should have. If this validation option fails the
341
+ # error message specified by +:wrong_number+ will be added.
342
+ # @option options [Range] :within An range of number of values to
343
+ # accept. If the attribute has a number of values outside this range
344
+ # then the +:too_many+ or +:too_few+ error message will be added.
345
+ # @option options [Integer] :minimum The minimum number of values
346
+ # the attribute should have. If it has fewer, the +:too_few+ error
347
+ # message will be added.
348
+ # @option options [Integer] :maximum The maximum number of values
349
+ # the attribute should have. If it has more, the +:too_many+ error
350
+ # message will be added.
351
+ # @option options [String] :too_many An error message added
352
+ # when the attribute has too many values. Defaults to
353
+ # <code>"has too many values (maximum is %{maximum})"</code>
354
+ # @option options [String] :too_few An error message added
355
+ # when the attribute has too few values. Defaults to
356
+ # <code>"has too few values (minimum is %{minimum})"</code>
357
+ # @option options [String] :wrong_number An error message
358
+ # added when the number of attribute values does not match
359
+ # the +:exactly+ option. Defaults to <code>"has the wrong
360
+ # number of values (should have exactly %{exactly}"</code>
361
+ # @option options [Symbol] :on (:save) When this validation is run.
362
+ # Valid values include:
363
+ # * +:save+
364
+ # * +:create+
365
+ # * +:update+
366
+ # @option options [Symbol,String,Proc] :if Specifies a method or proc
367
+ # to call. The validation will only be run if the return value is
368
+ # of the method/proc is true (e.g. +:if => :name_changed?+ or
369
+ # +:if => lambda{|book| book.in_stock? }+).
370
+ # @option options [Symbol,String,Proc] :unless Specifies a method or
371
+ # proc to call. The validation will *not* be run if the return value
372
+ # is of the method/proc is false.
373
+ def validates_count_of *args
374
+ validators << CountValidator.new(self, *args)
375
+ end
376
+
377
+ # Adds a block validator that is called during record validation.
378
+ #
379
+ # class ExampleClass < AWS::Record::Model
380
+ #
381
+ # string_attr :name
382
+ #
383
+ # validates_each(:name) do |record, attribute_name, value|
384
+ # if value == 'John Doe'
385
+ # record.errors.add(attr_name, 'may not be an alias')
386
+ # end
387
+ # end
388
+ #
389
+ # end
390
+ #
391
+ # @overload validates_each(*attributes, options = {}, &block)
392
+ # @param attributes A list of attribute names to validate.
393
+ # @param [Hash] options
394
+ # @option options [Boolean] :allow_nil (false) Skip validation if the
395
+ # attribute value is +nil+.
396
+ # @option options [Symbol] :on (:save) When this validation is run.
397
+ # Valid values include:
398
+ # * +:save+
399
+ # * +:create+
400
+ # * +:update+
401
+ # @option options [Symbol,String,Proc] :if Specifies a method or proc
402
+ # to call. The validation will only be run if the return value is
403
+ # of the method/proc is true (e.g. +:if => :name_changed?+ or
404
+ # +:if => lambda{|book| book.in_stock? }+).
405
+ # @option options [Symbol,String,Proc] :unless Specifies a method or
406
+ # proc to call. The validation will *not* be run if the return value
407
+ # is of the method/proc is false.
408
+ def validates_each *attributes, &block
409
+ unless block_given?
410
+ raise ArgumentError, 'missing required block for validates_each'
411
+ end
412
+ validators << BlockValidator.new(self, *attributes, &block)
413
+ end
414
+
415
+ # Validates that the attribute value is not included in the given
416
+ # enumerable.
417
+ #
418
+ # validates_exlusion_of :username, :in => %w(admin administrator)
419
+ #
420
+ # === Multi-Valued Attributes
421
+ #
422
+ # You may use this with multi-valued attributes the same way you use it
423
+ # with single-valued attributes:
424
+ #
425
+ # class Product < AWS::Record::Model
426
+ #
427
+ # string_attr :tags, :set => true
428
+ #
429
+ # validates_exlusion_of :tags, :in => four_letter_words
430
+ #
431
+ # end
432
+ #
433
+ # @overload validates_exclusion_of(*attributes, options = {}, &block)
434
+ # @param attributes A list of attribute names to validate.
435
+ # @param [Hash] options
436
+ # @option options [required, Enumerable] :in An enumerable object to
437
+ # ensure the value is not in.
438
+ # @option options [String] :message A custom error message. The default
439
+ # +:message+ is "is reserved".
440
+ # @option options [Boolean] :allow_nil (false) Skip validation if the
441
+ # attribute value is +nil+.
442
+ # @option options [Symbol] :on (:save) When this validation is run.
443
+ # Valid values include:
444
+ # * +:save+
445
+ # * +:create+
446
+ # * +:update+
447
+ # @option options [Symbol,String,Proc] :if Specifies a method or proc
448
+ # to call. The validation will only be run if the return value is
449
+ # of the method/proc is true (e.g. +:if => :name_changed?+ or
450
+ # +:if => lambda{|book| book.in_stock? }+).
451
+ # @option options [Symbol,String,Proc] :unless Specifies a method or
452
+ # proc to call. The validation will *not* be run if the return value
453
+ # is of the method/proc is false.
454
+ def validates_exclusion_of *args
455
+ validators << ExclusionValidator.new(self, *args)
456
+ end
457
+
458
+ # Validates the attribute's value matches the given regular exression.
459
+ #
460
+ # validates_format_of :year, :with => /^\d{4}$/
461
+ #
462
+ # You can also perform a not-match using +:without+ instead of +:with+.
463
+ #
464
+ # validates_format_of :username, :without => /\d/
465
+ #
466
+ # === Multi-Valued Attributes
467
+ #
468
+ # You may use this with multi-valued attributes the same way you use it
469
+ # with single-valued attributes:
470
+ #
471
+ # class Product < AWS::Record::Model
472
+ #
473
+ # string_attr :tags, :set => true
474
+ #
475
+ # validates_format_of :tags, :with => /^\w{2,10}$/
476
+ #
477
+ # end
478
+ #
479
+ # @overload validates_format_of(*attributes, options = {}, &block)
480
+ # @param attributes A list of attribute names to validate.
481
+ # @param [Hash] options
482
+ # @option options [Regexp] :with If the value matches the given
483
+ # regex, an error will not be added.
484
+ # @option options [Regexp] :without If the value matches the given
485
+ # regex, an error will be added.
486
+ # must match, or an error is added.
487
+ # @option options [String] :message A custom error message. The default
488
+ # +:message+ is "is reserved".
489
+ # @option options [Boolean] :allow_nil (false) Skip validation if the
490
+ # attribute value is +nil+.
491
+ # @option options [Symbol] :on (:save) When this validation is run.
492
+ # Valid values include:
493
+ # * +:save+
494
+ # * +:create+
495
+ # * +:update+
496
+ # @option options [Symbol,String,Proc] :if Specifies a method or proc
497
+ # to call. The validation will only be run if the return value is
498
+ # of the method/proc is true (e.g. +:if => :name_changed?+ or
499
+ # +:if => lambda{|book| book.in_stock? }+).
500
+ # @option options [Symbol,String,Proc] :unless Specifies a method or
501
+ # proc to call. The validation will *not* be run if the return value
502
+ # is of the method/proc is false.
503
+ def validates_format_of *args
504
+ validators << FormatValidator.new(self, *args)
505
+ end
506
+
507
+ # Validates that the attribute value is included in the given enumerable
508
+ # object.
509
+ #
510
+ # class MultipleChoiceAnswer < AWS::Record::Model
511
+ # validates_inclusion_of :letter, :in => %w(a b c d e)
512
+ # end
513
+ #
514
+ # === Multi-Valued Attributes
515
+ #
516
+ # You may use this with multi-valued attributes the same way you use it
517
+ # with single-valued attributes.
518
+ #
519
+ # @overload validates_inclusion_of(*attributes, options = {}, &block)
520
+ # @param attributes A list of attribute names to validate.
521
+ # @param [Hash] options
522
+ # @option options [required, Enumerable] :in An enumerable object to
523
+ # check for the value in.
524
+ # @option options [String] :message A custom error message. The default
525
+ # +:message+ is "is not included in the list".
526
+ # @option options [Boolean] :allow_nil (false) Skip validation if the
527
+ # attribute value is +nil+.
528
+ # @option options [Symbol] :on (:save) When this validation is run.
529
+ # Valid values include:
530
+ # * +:save+
531
+ # * +:create+
532
+ # * +:update+
533
+ # @option options [Symbol,String,Proc] :if Specifies a method or proc
534
+ # to call. The validation will only be run if the return value is
535
+ # of the method/proc is true (e.g. +:if => :name_changed?+ or
536
+ # +:if => lambda{|book| book.in_stock? }+).
537
+ # @option options [Symbol,String,Proc] :unless Specifies a method or
538
+ # proc to call. The validation will *not* be run if the return value
539
+ # is of the method/proc is false.
540
+ def validates_inclusion_of *attributes
541
+ validators << InclusionValidator.new(self, *attributes)
542
+ end
543
+
544
+ # Validates the attribute values are of a specified length.
545
+ #
546
+ # validates_lenth_of :username, :within => 3..25
547
+ #
548
+ # === Length vs Count
549
+ #
550
+ # +validates_length_of+ validates the length of individual attribute
551
+ # values, whereas +validates_count_of: validates the number of
552
+ # attribute values.
553
+ #
554
+ # If you need to ensure there are certain number of values see
555
+ # {#validates_count_of} instead.
556
+ #
557
+ # @overload validates_length_of(*attributes, options = {}, &block)
558
+ # @param attributes A list of attribute names to validate.
559
+ # @param [Hash] options
560
+ # @option options [Enumerable] :within An enumerable object to
561
+ # ensure the length of the value falls within.
562
+ # @option options [Integer] :exactly The exact length a value must be.
563
+ # If this validation fails the error message specified by
564
+ # +:wrong_length+ will be added.
565
+ # @option options [Range] :within An enumerable object which must
566
+ # include the length of the attribute, or an error will be added.
567
+ # If the attribute has a length outside the range then the
568
+ # +:too_long+ or +:too_short+ error message will be added.
569
+ # @option options [Integer] :minimum The minimum length an attribute
570
+ # value should be. If it is shorter, the +:too_short+ error
571
+ # message will be added.
572
+ # @option options [Integer] :maximum The maximum length an attribute
573
+ # value should be. If it is longer, the +:too_long+ error
574
+ # message will be added.
575
+ # @option options [String] :too_long An error message added
576
+ # when the attribute value is too long. Defaults to
577
+ # <code>"is too long (maximum is %{maximum}
578
+ # characters)"</code>
579
+ # @option options [String] :too_short An error message added
580
+ # when the attribute value is too short. Defaults to
581
+ # <code>"is too short (minimum is %{minimum}
582
+ # characters)"</code>
583
+ # @option options [String] :wrong_length An error message
584
+ # added when the attribute has the incorrect length (as
585
+ # specified by +:exactly+). Defaults to <code>"is the wrong
586
+ # length (should be %{exactly} characters"</code>
587
+ # @option options [Boolean] :allow_nil (false) Skip validation if the
588
+ # attribute value is +nil+.
589
+ # @option options [Symbol] :on (:save) When this validation is run.
590
+ # Valid values include:
591
+ # * +:save+
592
+ # * +:create+
593
+ # * +:update+
594
+ # @option options [Symbol,String,Proc] :if Specifies a method or proc
595
+ # to call. The validation will only be run if the return value is
596
+ # of the method/proc is true (e.g. +:if => :name_changed?+ or
597
+ # +:if => lambda{|book| book.in_stock? }+).
598
+ # @option options [Symbol,String,Proc] :unless Specifies a method or
599
+ # proc to call. The validation will *not* be run if the return value
600
+ # is of the method/proc is false.
601
+ def validates_length_of *args
602
+ validators << LengthValidator.new(self, *args)
603
+ end
604
+
605
+ # Validates the attribute has a numeric value.
606
+ #
607
+ # validates_numericality_of :age, :only_integer => true
608
+ #
609
+ # === Multi-Valued Attributes
610
+ #
611
+ # You can validate multi-valued attributes using this the same way you
612
+ # validate single-valued attributes. Each value will be validated
613
+ # individually.
614
+ #
615
+ # @overload validates_numericality_of(*attributes, options = {}, &block)
616
+ # @param attributes A list of attribute names to validate.
617
+ # @param [Hash] options
618
+ # @option options [Boolean] :only_integer (false) Adds an error
619
+ # when valiating and the value is numeric, but it not a whole number.
620
+ # @option options [Integer] :equal_to When set the value must equal
621
+ # the given value exactly. May not be used with the greater/less
622
+ # options.
623
+ # @option options [Numeric] :greater_than Ensures the attribute
624
+ # is greater than the given number.
625
+ # @option options [Integer] :greater_than_or_equal_to Ensures the
626
+ # attribute is greater than or equal to the given number.
627
+ # @option options [Numeric] :less_than Ensures the attribute is less
628
+ # than the given value.
629
+ # @option options [Integer] :less_than_or_equal_to Ensures the value is
630
+ # less than or equal to the given number.
631
+ # @option options [Numeric] :even If true, the value may only be
632
+ # an even integer. This forces the +:only_integer+ to +true+.
633
+ # @option options [Numeric] :odd If true, the value may only be
634
+ # an odd integer. This forces the +:only_integer+ to +true+.
635
+ # @option options [String] :message A custom error message. The default
636
+ # +:message+ is "is not a number".
637
+ # @option options [Boolean] :allow_nil (false) Skip validation if the
638
+ # attribute value is +nil+.
639
+ # @option options [Symbol] :on (:save) When this validation is run.
640
+ # Valid values include:
641
+ # * +:save+
642
+ # * +:create+
643
+ # * +:update+
644
+ # @option options [Symbol,String,Proc] :if Specifies a method or proc
645
+ # to call. The validation will only be run if the return value is
646
+ # of the method/proc is true (e.g. +:if => :name_changed?+ or
647
+ # +:if => lambda{|book| book.in_stock? }+).
648
+ # @option options [Symbol,String,Proc] :unless Specifies a method or
649
+ # proc to call. The validation will *not* be run if the return value
650
+ # is of the method/proc is false.
651
+ def validates_numericality_of *args
652
+ validators << NumericalityValidator.new(self, *args)
653
+ end
654
+
655
+ # Validates the named attributes are not blank. For validation
656
+ # purposes, blank values include:
657
+ #
658
+ # * +nil+
659
+ # * empty string
660
+ # * anything that responds to #empty? with true
661
+ # * anything that responds to #blank? with true
662
+ #
663
+ # @overload validates_presence_of(*attributes, options = {}, &block)
664
+ # @param attributes A list of attribute names to validate.
665
+ # @param [Hash] options
666
+ # @option options [String] :message A custom error message. The default
667
+ # +:message+ is "may not be blank".
668
+ # @option options [Symbol] :on (:save) When this validation is run.
669
+ # Valid values include:
670
+ # * +:save+
671
+ # * +:create+
672
+ # * +:update+
673
+ # @option options [Boolean] :allow_nil (false) Skip validation if the
674
+ # attribute value is +nil+.
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
+ # @private
687
+ private
688
+ def validators
689
+ @validators ||= []
690
+ end
691
+
692
+ end
693
+ end
694
+ end