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