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,388 @@
1
+ # Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ require 'date'
15
+
16
+ module AWS
17
+ module Record
18
+ module Attributes
19
+
20
+ # Base class for all of the AWS::Record attributes.
21
+ class BaseAttr
22
+
23
+ # @param [Symbol] name Name of this attribute. It should be a name that
24
+ # is safe to use as a method.
25
+ # @param [Hash] options
26
+ # @option options [String] :persist_as Defaults to the name of the
27
+ # attribute. You can pass a string to specify what the attribute
28
+ # will be named in the backend storage.
29
+ # @option options [Boolean] :set (false) When true this attribute can
30
+ # accept multiple unique values.
31
+ def initialize name, options = {}
32
+ @name = name.to_s
33
+ @options = options.dup
34
+ if options[:set] and !self.class.allow_set?
35
+ raise ArgumentError, "invalid option :set for #{self.class}"
36
+ end
37
+ end
38
+
39
+ # @return [String] The name of this attribute
40
+ attr_reader :name
41
+
42
+ # @return [Hash] Attribute options passed to the constructor.
43
+ attr_reader :options
44
+
45
+ # @return [Boolean] Returns true if this attribute can have
46
+ # multiple values.
47
+ def set?
48
+ options[:set] ? true : false
49
+ end
50
+
51
+ # @return Returns the default value for this attribute.
52
+ def default_value
53
+ if options[:default_value].is_a?(Proc)
54
+ options[:default_value].call
55
+ else
56
+ options[:default_value]
57
+ end
58
+ end
59
+
60
+ # @return [String] Returns the name this attribute will use
61
+ # in the storage backend.
62
+ def persist_as
63
+ (options[:persist_as] || @name).to_s
64
+ end
65
+
66
+ # @param [Mixed] raw_value A single value to type cast.
67
+ # @return [Mixed] Returns the type casted value.
68
+ def type_cast raw_value
69
+ self.class.type_cast(raw_value, options)
70
+ end
71
+
72
+ # @param [String] serialized_value The serialized string value.
73
+ # @return [Mixed] Returns a deserialized type-casted value.
74
+ def deserialize serialized_value
75
+ self.class.deserialize(serialized_value, options)
76
+ end
77
+
78
+ # Takes the type casted value and serializes it
79
+ # @param [Mixed] type_casted_value A single value to serialize.
80
+ # @return [Mixed] Returns the serialized value.
81
+ def serialize type_casted_value
82
+ self.class.serialize(type_casted_value, options)
83
+ end
84
+
85
+ # @param [String] serialized_value The raw value returned from AWS.
86
+ # @return [Mixed] Returns the type-casted deserialized value.
87
+ def self.deserialize serialized_value, options = {}
88
+ self.type_cast(serialized_value, options)
89
+ end
90
+
91
+ # @return [Boolean] Returns true if this attribute type can be used
92
+ # with the `:set => true` option. Certain attirbutes can not
93
+ # be represented with multiple values (like BooleanAttr).
94
+ def self.allow_set?
95
+ raise NotImplementedError
96
+ end
97
+
98
+ # @api private
99
+ protected
100
+ def self.expect klass, value, &block
101
+ unless value.is_a?(klass)
102
+ raise ArgumentError, "expected a #{klass}, got #{value.class}"
103
+ end
104
+ yield if block_given?
105
+ end
106
+
107
+ end
108
+
109
+ class StringAttr < BaseAttr
110
+
111
+ # Returns the value cast to a string. Empty strings are returned as
112
+ # nil by default. Type casting is done by calling #to_s on the value.
113
+ #
114
+ # string_attr.type_cast(123)
115
+ # # => '123'
116
+ #
117
+ # string_attr.type_cast('')
118
+ # # => nil
119
+ #
120
+ # string_attr.type_cast('', :preserve_empty_strings => true)
121
+ # # => ''
122
+ #
123
+ # @param [Mixed] raw_value
124
+ # @param [Hash] options
125
+ # @option options [Boolean] :preserve_empty_strings (false) When true,
126
+ # empty strings are preserved and not cast to nil.
127
+ # @return [String,nil] The type casted value.
128
+ def self.type_cast raw_value, options = {}
129
+ case raw_value
130
+ when nil then nil
131
+ when '' then options[:preserve_empty_strings] ? '' : nil
132
+ when String then raw_value
133
+ else raw_value.to_s
134
+ end
135
+ end
136
+
137
+ # Returns a serialized representation of the string value suitable for
138
+ # storing in SimpleDB.
139
+ # @param [String] string
140
+ # @param [Hash] options
141
+ # @return [String] The serialized string.
142
+ def self.serialize string, options = {}
143
+ unless string.is_a?(String)
144
+ msg = "expected a String value, got #{string.class}"
145
+ raise ArgumentError, msg
146
+ end
147
+ string
148
+ end
149
+
150
+ # @api private
151
+ def self.allow_set?
152
+ true
153
+ end
154
+
155
+ end
156
+
157
+ class BooleanAttr < BaseAttr
158
+
159
+ def self.type_cast raw_value, options = {}
160
+ case raw_value
161
+ when nil then nil
162
+ when '' then nil
163
+ when false, 'false', '0', 0 then false
164
+ else true
165
+ end
166
+ end
167
+
168
+ def self.serialize boolean, options = {}
169
+ case boolean
170
+ when false then 0
171
+ when true then 1
172
+ else
173
+ msg = "expected a boolean value, got #{boolean.class}"
174
+ raise ArgumentError, msg
175
+ end
176
+ end
177
+
178
+ # @api private
179
+ def self.allow_set?
180
+ false
181
+ end
182
+
183
+ end
184
+
185
+ class IntegerAttr < BaseAttr
186
+
187
+ # Returns value cast to an integer. Empty strings are cast to
188
+ # nil by default. Type casting is done by calling #to_i on the value.
189
+ #
190
+ # int_attribute.type_cast('123')
191
+ # #=> 123
192
+ #
193
+ # int_attribute.type_cast('')
194
+ # #=> nil
195
+ #
196
+ # @param [Mixed] raw_value The value to type cast to an integer.
197
+ # @return [Integer,nil] Returns the type casted integer or nil
198
+ def self.type_cast raw_value, options = {}
199
+ case raw_value
200
+ when nil then nil
201
+ when '' then nil
202
+ when Integer then raw_value
203
+ else
204
+ raw_value.respond_to?(:to_i) ?
205
+ raw_value.to_i :
206
+ raw_value.to_s.to_i
207
+ end
208
+ end
209
+
210
+ # Returns a serialized representation of the integer value suitable for
211
+ # storing in SimpleDB.
212
+ #
213
+ # attribute.serialize(123)
214
+ # #=> '123'
215
+ #
216
+ # @param [Integer] integer The number to serialize.
217
+ # @param [Hash] options
218
+ # @return [String] A serialized representation of the integer.
219
+ def self.serialize integer, options = {}
220
+ expect(Integer, integer) { integer }
221
+ end
222
+
223
+ # @api private
224
+ def self.allow_set?
225
+ true
226
+ end
227
+
228
+ end
229
+
230
+ class FloatAttr < BaseAttr
231
+
232
+ def self.type_cast raw_value, options = {}
233
+ case raw_value
234
+ when nil then nil
235
+ when '' then nil
236
+ when Float then raw_value
237
+ else
238
+ raw_value.respond_to?(:to_f) ?
239
+ raw_value.to_f :
240
+ raw_value.to_s.to_f
241
+ end
242
+ end
243
+
244
+ def self.serialize float, options = {}
245
+ expect(Float, float) { float }
246
+ end
247
+
248
+ # @api private
249
+ def self.allow_set?
250
+ true
251
+ end
252
+
253
+ end
254
+
255
+ class DateAttr < BaseAttr
256
+
257
+ # Returns value cast to a Date object. Empty strings are cast to
258
+ # nil. Values are cast first to strings and then passed to
259
+ # Date.parse. Integers are treated as timestamps.
260
+ #
261
+ # date_attribute.type_cast('2000-01-02T10:11:12Z')
262
+ # #=> #<Date: 4903091/2,0,2299161>
263
+ #
264
+ # date_attribute.type_cast(1306170146)
265
+ # #<Date: 4911409/2,0,2299161>
266
+ #
267
+ # date_attribute.type_cast('')
268
+ # #=> nil
269
+ #
270
+ # date_attribute.type_cast(nil)
271
+ # #=> nil
272
+ #
273
+ # @param [Mixed] raw_value The value to cast to a Date object.
274
+ # @param [Hash] options
275
+ # @return [Date,nil]
276
+ def self.type_cast raw_value, options = {}
277
+ case raw_value
278
+ when nil then nil
279
+ when '' then nil
280
+ when Date then raw_value
281
+ when Integer then
282
+ begin
283
+ Date.parse(Time.at(raw_value).to_s) # assumed timestamp
284
+ rescue
285
+ nil
286
+ end
287
+ else
288
+ begin
289
+ Date.parse(raw_value.to_s) # Time, DateTime or String
290
+ rescue
291
+ nil
292
+ end
293
+ end
294
+ end
295
+
296
+ # Returns a Date object encoded as a string (suitable for sorting).
297
+ #
298
+ # attribute.serialize(DateTime.parse('2001-01-01'))
299
+ # #=> '2001-01-01'
300
+ #
301
+ # @param [Date] date The date to serialize.
302
+ #
303
+ # @param [Hash] options
304
+ #
305
+ # @return [String] Returns the date object serialized to a string
306
+ # ('YYYY-MM-DD').
307
+ #
308
+ def self.serialize date, options = {}
309
+ unless date.is_a?(Date)
310
+ raise ArgumentError, "expected a Date value, got #{date.class}"
311
+ end
312
+ date.strftime('%Y-%m-%d')
313
+ end
314
+
315
+ # @api private
316
+ def self.allow_set?
317
+ true
318
+ end
319
+
320
+ end
321
+
322
+ class DateTimeAttr < BaseAttr
323
+
324
+ # Returns value cast to a DateTime object. Empty strings are cast to
325
+ # nil. Values are cast first to strings and then passed to
326
+ # DateTime.parse. Integers are treated as timestamps.
327
+ #
328
+ # datetime_attribute.type_cast('2000-01-02')
329
+ # #=> #<DateTime: 4903091/2,0,2299161>
330
+ #
331
+ # datetime_attribute.type_cast(1306170146)
332
+ # #<DateTime: 106086465073/43200,-7/24,2299161>
333
+ #
334
+ # datetime_attribute.type_cast('')
335
+ # #=> nil
336
+ #
337
+ # datetime_attribute.type_cast(nil)
338
+ # #=> nil
339
+ #
340
+ # @param [Mixed] raw_value The value to cast to a DateTime object.
341
+ # @param [Hash] options
342
+ # @return [DateTime,nil]
343
+ def self.type_cast raw_value, options = {}
344
+ case raw_value
345
+ when nil then nil
346
+ when '' then nil
347
+ when DateTime then raw_value
348
+ when Integer then
349
+ begin
350
+ DateTime.parse(Time.at(raw_value).to_s) # timestamp
351
+ rescue
352
+ nil
353
+ end
354
+ else
355
+ begin
356
+ DateTime.parse(raw_value.to_s) # Time, Date or String
357
+ rescue
358
+ nil
359
+ end
360
+ end
361
+ end
362
+
363
+ # Returns a DateTime object encoded as a string (suitable for sorting).
364
+ #
365
+ # attribute.serialize(DateTime.parse('2001-01-01'))
366
+ # #=> '2001-01-01T00:00:00:Z)
367
+ #
368
+ # @param [DateTime] datetime The datetime object to serialize.
369
+ # @param [Hash] options
370
+ # @return [String] Returns the datetime object serialized to a string
371
+ # in ISO8601 format (e.g. '2011-01-02T10:11:12Z')
372
+ def self.serialize datetime, options = {}
373
+ unless datetime.is_a?(DateTime)
374
+ msg = "expected a DateTime value, got #{datetime.class}"
375
+ raise ArgumentError, msg
376
+ end
377
+ datetime.strftime('%Y-%m-%dT%H:%M:%S%Z')
378
+ end
379
+
380
+ # @api private
381
+ def self.allow_set?
382
+ true
383
+ end
384
+
385
+ end
386
+ end
387
+ end
388
+ end
@@ -0,0 +1,38 @@
1
+ # Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ module AWS
15
+ module Record
16
+
17
+ # @api private
18
+ module Conversion
19
+
20
+ # @api private
21
+ def to_model
22
+ self
23
+ end
24
+
25
+ # @api private
26
+ def to_key
27
+ persisted? ? [id] : nil
28
+ end
29
+
30
+ # @api private
31
+ def to_param
32
+ persisted? ? to_key.join('-') : nil
33
+ end
34
+
35
+ end
36
+
37
+ end
38
+ end
@@ -0,0 +1,287 @@
1
+ # Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ module AWS
15
+ module Record
16
+
17
+ # Provides a way to track changes in your records.
18
+ #
19
+ # my_book = Book['bookid']
20
+ #
21
+ # my_book.changed? #=> false
22
+ # my_book.title #=> "My Book"
23
+ # my_book.title = "My Awesome Book"
24
+ # my_book.changed? #=> true
25
+ #
26
+ # my_book = Book['bookid']
27
+ #
28
+ # You can inspect further and get a list of changed attributes
29
+ #
30
+ # my_book.changed #=> ['title']
31
+ #
32
+ # Or you can get a more detailed description of the changes. {#changes}
33
+ # returns a hash of changed attributes (keys) with their old and new
34
+ # values.
35
+ #
36
+ # my_book.changes
37
+ # #=> { 'title' => ['My Book', 'My Awesome Book']
38
+ #
39
+ # For every configured attribute you also get a handful of methods
40
+ # for inspecting changes on that attribute. Given the following
41
+ # attribute:
42
+ #
43
+ # string_attr :title
44
+ #
45
+ # You can now call any of the following methods:
46
+ #
47
+ # * title_changed?
48
+ # * title_change
49
+ # * title_was
50
+ # * reset_title!
51
+ # * title_will_change!
52
+ #
53
+ # Given the title change from above:
54
+ #
55
+ # my_book.title_changed? #=> true
56
+ # my_book.title_change #=> ['My Book', 'My Awesome Book']
57
+ # my_book.title_was #=> ['My Book']
58
+ #
59
+ # my_book.reset_title!
60
+ # my_book.title #=> 'My Book'
61
+ #
62
+ # ## In-Place Editing
63
+ #
64
+ # Dirty tracking works by comparing incoming attribute values upon
65
+ # assignment against the value that was there previously. If you
66
+ # use functions against the value that modify it (like gsub!)
67
+ # you must notify your record about the coming change.
68
+ #
69
+ # my_book.title #=> 'My Book'
70
+ # my_book.title_will_change!
71
+ # my_book.title.gsub!(/My/, 'Your')
72
+ # my_book.title_change #=> ['My Book', 'Your Book']
73
+ #
74
+ # ## Partial Updates
75
+ #
76
+ # Dirty tracking makes it possible to only persist those attributes
77
+ # that have changed since they were loaded. This speeds up requests
78
+ # against AWS when saving data.
79
+ #
80
+ module DirtyTracking
81
+
82
+ # Returns true if this model has unsaved changes.
83
+ #
84
+ # b = Book.new(:title => 'My Book')
85
+ # b.changed?
86
+ # #=> true
87
+ #
88
+ # New objects and objects freshly loaded should not have any changes:
89
+ #
90
+ # b = Book.new
91
+ # b.changed? #=> false
92
+ #
93
+ # b = Book.first
94
+ # b.changed? #=> false
95
+ #
96
+ # @return [Boolean] Returns true if any of the attributes have
97
+ # unsaved changes.
98
+ def changed?
99
+ !orig_values.empty?
100
+ end
101
+
102
+ # Returns an array of attribute names that have changes.
103
+ #
104
+ # book.changed #=> []
105
+ # person.title = 'New Title'
106
+ # book.changed #=> ['title']
107
+ #
108
+ # @return [Array] Returns an array of attribute names that have
109
+ # unsaved changes.
110
+ def changed
111
+ orig_values.keys
112
+ end
113
+
114
+ # Returns the changed attributes in a hash. Keys are attribute names,
115
+ # values are two value arrays. The first value is the previous
116
+ # attribute value, the second is the current attribute value.
117
+ #
118
+ # book.title = 'New Title'
119
+ # book.changes
120
+ # #=> { 'title' => ['Old Title', 'New Title'] }
121
+ #
122
+ # @return [Hash] Returns a hash of attribute changes.
123
+ def changes
124
+ changed.inject({}) do |changes, attr_name|
125
+ changes[attr_name] = attribute_change(attr_name)
126
+ changes
127
+ end
128
+ end
129
+
130
+ # Returns true if the named attribute has unsaved changes.
131
+ #
132
+ # This is an attribute method. The following two expressions
133
+ # are equivilent:
134
+ #
135
+ # book.title_changed?
136
+ # book.attribute_changed?(:title)
137
+ #
138
+ # @param [String] attribute_name Name of the attribute to check
139
+ # for changes.
140
+ #
141
+ # @return [Boolean] Returns true if the named attribute
142
+ # has unsaved changes.
143
+ # @api private
144
+ private
145
+ def attribute_changed? attribute_name
146
+ orig_values.keys.include?(attribute_name)
147
+ end
148
+
149
+ # Returns an array of the old value and the new value for
150
+ # attributes that have unsaved changes, returns nil otherwise.
151
+ #
152
+ # This is an attribute method. The following two expressions
153
+ # are equivilent:
154
+ #
155
+ # book.title_change
156
+ # book.attribute_change(:title)
157
+ #
158
+ # @example Asking for changes on an unchanged attribute
159
+ #
160
+ # book = Book.new
161
+ # book.title_change #=> nil
162
+ #
163
+ # @example Getting changed attributes on a new object
164
+ #
165
+ # book = Book.new(:title => 'My Book')
166
+ # book.title_change #=> [nil, 'My Book']
167
+ #
168
+ # @example Getting changed attributes on a loaded object
169
+ #
170
+ # book = Book.first
171
+ # book.title = 'New Title'
172
+ # book.title_change #=> ['Old Title', 'New Title']
173
+ #
174
+ # @param [String] attribute_name Name of the attribute to fetch
175
+ # a change for.
176
+ # @return [Boolean] Returns true if the named attribute
177
+ # has unsaved changes.
178
+ # @api private
179
+ private
180
+ def attribute_change attribute_name
181
+ self.class.attribute_for(attribute_name) do |attribute|
182
+ if orig_values.has_key?(attribute.name)
183
+ [orig_values[attribute.name], __send__(attribute.name)]
184
+ else
185
+ nil
186
+ end
187
+ end
188
+ end
189
+
190
+ # Returns the previous value for changed attributes, or the current
191
+ # value for unchanged attributes.
192
+ #
193
+ # This is an attribute method. The following two expressions
194
+ # are equivilent:
195
+ #
196
+ # book.title_was
197
+ # book.attribute_was(:title)
198
+ #
199
+ # @example Returns the previous value for changed attributes:
200
+ #
201
+ # book = Book.where(:title => 'My Book').first
202
+ # book.title = 'New Title'
203
+ # book.title_was #=> 'My Book'
204
+ #
205
+ # @example Returns the current value for unchanged attributes:
206
+ #
207
+ # book = Book.where(:title => 'My Book').first
208
+ # book.title_was #=> 'My Book'
209
+ #
210
+ # @return Returns the previous value for changed attributes
211
+ # or the current value for unchanged attributes.
212
+ # @api private
213
+ private
214
+ def attribute_was attribute_name
215
+ self.class.attribute_for(attribute_name) do |attribute|
216
+ name = attribute.name
217
+ orig_values.has_key?(name) ? orig_values[name] : __send__(name)
218
+ end
219
+ end
220
+
221
+ # Reverts any changes to the attribute, restoring its original value.
222
+ # @param [String] attribute_name Name of the attribute to reset.
223
+ # @return [nil]
224
+ # @api private
225
+ private
226
+ def reset_attribute! attribute_name
227
+ __send__("#{attribute_name}=", attribute_was(attribute_name))
228
+ nil
229
+ end
230
+
231
+ # Indicate to the record that you are about to edit an attribute
232
+ # in place.
233
+ # @param [String] attribute_name Name of the attribute that will
234
+ # be changed.
235
+ # @return [nil]
236
+ # @api private
237
+ private
238
+ def attribute_will_change! attribute_name
239
+ self.class.attribute_for(attribute_name) do |attribute|
240
+ name = attribute.name
241
+ unless orig_values.has_key?(name)
242
+ was = __send__(name)
243
+ begin
244
+ # booleans, nil, etc all #respond_to?(:clone), but they raise
245
+ # a TypeError when you attempt to dup them.
246
+ orig_values[name] = was.clone
247
+ rescue TypeError
248
+ orig_values[name] = was
249
+ end
250
+ end
251
+ end
252
+ nil
253
+ end
254
+
255
+ private
256
+ def orig_values
257
+ @_orig_values ||= {}
258
+ end
259
+
260
+ private
261
+ def clear_change! attribute_name
262
+ orig_values.delete(attribute_name)
263
+ end
264
+
265
+ private
266
+ def ignore_changes &block
267
+ begin
268
+ @_ignore_changes = true
269
+ yield
270
+ ensure
271
+ @_ignore_changes = false
272
+ end
273
+ end
274
+
275
+ private
276
+ def if_tracking_changes &block
277
+ yield unless @_ignore_changes
278
+ end
279
+
280
+ private
281
+ def clear_changes!
282
+ orig_values.clear
283
+ end
284
+
285
+ end
286
+ end
287
+ end