aws-sdk-euca 1.8.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (539) hide show
  1. data/.yardopts +5 -0
  2. data/LICENSE.txt +12 -0
  3. data/README.rdoc +189 -0
  4. data/ca-bundle.crt +3895 -0
  5. data/lib/aws-sdk-euca.rb +79 -0
  6. data/lib/aws-sdk.rb +79 -0
  7. data/lib/aws.rb +14 -0
  8. data/lib/aws/api_config/AutoScaling-2011-01-01.yml +825 -0
  9. data/lib/aws/api_config/CloudFormation-2010-05-15.yml +322 -0
  10. data/lib/aws/api_config/CloudFront-2012-05-05.yml +2102 -0
  11. data/lib/aws/api_config/CloudSearch-2011-02-01.yml +681 -0
  12. data/lib/aws/api_config/CloudWatch-2010-08-01.yml +433 -0
  13. data/lib/aws/api_config/DataPipeline-2012-10-29.yml +422 -0
  14. data/lib/aws/api_config/DynamoDB-2011-12-05.yml +1160 -0
  15. data/lib/aws/api_config/EC2-2013-02-01.yml +4368 -0
  16. data/lib/aws/api_config/ELB-2012-06-01.yml +597 -0
  17. data/lib/aws/api_config/EMR-2009-03-31.yml +370 -0
  18. data/lib/aws/api_config/ElastiCache-2012-03-09.yml +777 -0
  19. data/lib/aws/api_config/ElastiCache-2012-11-15.yml +979 -0
  20. data/lib/aws/api_config/ElasticBeanstalk-2010-12-01.yml +823 -0
  21. data/lib/aws/api_config/ElasticTranscoder-2012-09-25.yml +1036 -0
  22. data/lib/aws/api_config/Glacier-2012-06-01.yml +618 -0
  23. data/lib/aws/api_config/IAM-2010-05-08.yml +1222 -0
  24. data/lib/aws/api_config/ImportExport-2010-06-01.yml +109 -0
  25. data/lib/aws/api_config/OpsWorks-2013-02-18.yml +1463 -0
  26. data/lib/aws/api_config/RDS-2012-09-17.yml +1861 -0
  27. data/lib/aws/api_config/RDS-2013-02-12.yml +2377 -0
  28. data/lib/aws/api_config/Redshift-2012-12-01.yml +1149 -0
  29. data/lib/aws/api_config/Route53-2012-02-29.yml +380 -0
  30. data/lib/aws/api_config/Route53-2012-12-12.yml +547 -0
  31. data/lib/aws/api_config/SNS-2010-03-31.yml +249 -0
  32. data/lib/aws/api_config/SQS-2012-11-05.yml +317 -0
  33. data/lib/aws/api_config/STS-2011-06-15.yml +81 -0
  34. data/lib/aws/api_config/SimpleDB-2009-04-15.yml +306 -0
  35. data/lib/aws/api_config/SimpleEmailService-2010-12-01.yml +346 -0
  36. data/lib/aws/api_config/SimpleWorkflow-2012-01-25.yml +2358 -0
  37. data/lib/aws/api_config/StorageGateway-2012-06-30.yml +748 -0
  38. data/lib/aws/auto_scaling.rb +164 -0
  39. data/lib/aws/auto_scaling/activity.rb +102 -0
  40. data/lib/aws/auto_scaling/activity_collection.rb +82 -0
  41. data/lib/aws/auto_scaling/client.rb +521 -0
  42. data/lib/aws/auto_scaling/config.rb +18 -0
  43. data/lib/aws/auto_scaling/errors.rb +22 -0
  44. data/lib/aws/auto_scaling/group.rb +420 -0
  45. data/lib/aws/auto_scaling/group_collection.rb +96 -0
  46. data/lib/aws/auto_scaling/group_options.rb +146 -0
  47. data/lib/aws/auto_scaling/instance.rb +192 -0
  48. data/lib/aws/auto_scaling/instance_collection.rb +63 -0
  49. data/lib/aws/auto_scaling/launch_configuration.rb +158 -0
  50. data/lib/aws/auto_scaling/launch_configuration_collection.rb +154 -0
  51. data/lib/aws/auto_scaling/notification_configuration.rb +89 -0
  52. data/lib/aws/auto_scaling/notification_configuration_collection.rb +184 -0
  53. data/lib/aws/auto_scaling/request.rb +29 -0
  54. data/lib/aws/auto_scaling/scaling_policy.rb +142 -0
  55. data/lib/aws/auto_scaling/scaling_policy_collection.rb +72 -0
  56. data/lib/aws/auto_scaling/scaling_policy_options.rb +64 -0
  57. data/lib/aws/auto_scaling/scheduled_action.rb +145 -0
  58. data/lib/aws/auto_scaling/scheduled_action_collection.rb +195 -0
  59. data/lib/aws/auto_scaling/tag.rb +59 -0
  60. data/lib/aws/auto_scaling/tag_collection.rb +112 -0
  61. data/lib/aws/cloud_formation.rb +272 -0
  62. data/lib/aws/cloud_formation/client.rb +369 -0
  63. data/lib/aws/cloud_formation/config.rb +18 -0
  64. data/lib/aws/cloud_formation/errors.rb +22 -0
  65. data/lib/aws/cloud_formation/request.rb +29 -0
  66. data/lib/aws/cloud_formation/stack.rb +255 -0
  67. data/lib/aws/cloud_formation/stack_collection.rb +209 -0
  68. data/lib/aws/cloud_formation/stack_event.rb +75 -0
  69. data/lib/aws/cloud_formation/stack_event_collection.rb +47 -0
  70. data/lib/aws/cloud_formation/stack_options.rb +72 -0
  71. data/lib/aws/cloud_formation/stack_output.rb +53 -0
  72. data/lib/aws/cloud_formation/stack_resource.rb +117 -0
  73. data/lib/aws/cloud_formation/stack_resource_collection.rb +84 -0
  74. data/lib/aws/cloud_formation/stack_resource_summary_collection.rb +64 -0
  75. data/lib/aws/cloud_formation/stack_summary_collection.rb +123 -0
  76. data/lib/aws/cloud_front.rb +73 -0
  77. data/lib/aws/cloud_front/client.rb +1307 -0
  78. data/lib/aws/cloud_front/config.rb +18 -0
  79. data/lib/aws/cloud_front/errors.rb +22 -0
  80. data/lib/aws/cloud_front/request.rb +44 -0
  81. data/lib/aws/cloud_search.rb +74 -0
  82. data/lib/aws/cloud_search/client.rb +558 -0
  83. data/lib/aws/cloud_search/config.rb +18 -0
  84. data/lib/aws/cloud_search/errors.rb +22 -0
  85. data/lib/aws/cloud_search/request.rb +23 -0
  86. data/lib/aws/cloud_watch.rb +119 -0
  87. data/lib/aws/cloud_watch/alarm.rb +272 -0
  88. data/lib/aws/cloud_watch/alarm_collection.rb +153 -0
  89. data/lib/aws/cloud_watch/alarm_history_item.rb +50 -0
  90. data/lib/aws/cloud_watch/alarm_history_item_collection.rb +84 -0
  91. data/lib/aws/cloud_watch/client.rb +247 -0
  92. data/lib/aws/cloud_watch/config.rb +18 -0
  93. data/lib/aws/cloud_watch/errors.rb +22 -0
  94. data/lib/aws/cloud_watch/metric.rb +135 -0
  95. data/lib/aws/cloud_watch/metric_alarm_collection.rb +160 -0
  96. data/lib/aws/cloud_watch/metric_collection.rb +131 -0
  97. data/lib/aws/cloud_watch/metric_statistics.rb +69 -0
  98. data/lib/aws/cloud_watch/request.rb +23 -0
  99. data/lib/aws/core.rb +587 -0
  100. data/lib/aws/core/async_handle.rb +90 -0
  101. data/lib/aws/core/autoloader.rb +64 -0
  102. data/lib/aws/core/cacheable.rb +78 -0
  103. data/lib/aws/core/client.rb +691 -0
  104. data/lib/aws/core/collection.rb +267 -0
  105. data/lib/aws/core/collection/simple.rb +82 -0
  106. data/lib/aws/core/collection/with_limit_and_next_token.rb +71 -0
  107. data/lib/aws/core/collection/with_next_token.rb +97 -0
  108. data/lib/aws/core/configuration.rb +546 -0
  109. data/lib/aws/core/credential_providers.rb +461 -0
  110. data/lib/aws/core/data.rb +247 -0
  111. data/lib/aws/core/http/curb_handler.rb +155 -0
  112. data/lib/aws/core/http/handler.rb +89 -0
  113. data/lib/aws/core/http/net_http_handler.rb +128 -0
  114. data/lib/aws/core/http/request.rb +263 -0
  115. data/lib/aws/core/http/response.rb +81 -0
  116. data/lib/aws/core/indifferent_hash.rb +88 -0
  117. data/lib/aws/core/inflection.rb +56 -0
  118. data/lib/aws/core/json_client.rb +47 -0
  119. data/lib/aws/core/json_parser.rb +76 -0
  120. data/lib/aws/core/json_request_builder.rb +35 -0
  121. data/lib/aws/core/json_response_parser.rb +79 -0
  122. data/lib/aws/core/lazy_error_classes.rb +90 -0
  123. data/lib/aws/core/log_formatter.rb +462 -0
  124. data/lib/aws/core/managed_file.rb +32 -0
  125. data/lib/aws/core/meta_utils.rb +45 -0
  126. data/lib/aws/core/model.rb +57 -0
  127. data/lib/aws/core/naming.rb +30 -0
  128. data/lib/aws/core/option_grammar.rb +735 -0
  129. data/lib/aws/core/options/json_serializer.rb +82 -0
  130. data/lib/aws/core/options/validator.rb +155 -0
  131. data/lib/aws/core/options/xml_serializer.rb +118 -0
  132. data/lib/aws/core/page_result.rb +75 -0
  133. data/lib/aws/core/policy.rb +916 -0
  134. data/lib/aws/core/query_client.rb +41 -0
  135. data/lib/aws/core/query_error_parser.rb +24 -0
  136. data/lib/aws/core/query_request_builder.rb +47 -0
  137. data/lib/aws/core/query_response_parser.rb +35 -0
  138. data/lib/aws/core/resource.rb +413 -0
  139. data/lib/aws/core/resource_cache.rb +40 -0
  140. data/lib/aws/core/response.rb +208 -0
  141. data/lib/aws/core/response_cache.rb +50 -0
  142. data/lib/aws/core/rest_error_parser.rb +24 -0
  143. data/lib/aws/core/rest_json_client.rb +40 -0
  144. data/lib/aws/core/rest_request_builder.rb +146 -0
  145. data/lib/aws/core/rest_response_parser.rb +66 -0
  146. data/lib/aws/core/rest_xml_client.rb +47 -0
  147. data/lib/aws/core/service_interface.rb +61 -0
  148. data/lib/aws/core/signature/version_2.rb +56 -0
  149. data/lib/aws/core/signature/version_3.rb +77 -0
  150. data/lib/aws/core/signature/version_3_https.rb +54 -0
  151. data/lib/aws/core/signature/version_4.rb +135 -0
  152. data/lib/aws/core/signer.rb +46 -0
  153. data/lib/aws/core/uri_escape.rb +44 -0
  154. data/lib/aws/core/xml/frame.rb +244 -0
  155. data/lib/aws/core/xml/frame_stack.rb +85 -0
  156. data/lib/aws/core/xml/grammar.rb +307 -0
  157. data/lib/aws/core/xml/parser.rb +70 -0
  158. data/lib/aws/core/xml/root_frame.rb +65 -0
  159. data/lib/aws/core/xml/sax_handlers/libxml.rb +47 -0
  160. data/lib/aws/core/xml/sax_handlers/nokogiri.rb +55 -0
  161. data/lib/aws/core/xml/sax_handlers/ox.rb +41 -0
  162. data/lib/aws/core/xml/sax_handlers/rexml.rb +43 -0
  163. data/lib/aws/core/xml/stub.rb +123 -0
  164. data/lib/aws/data_pipeline.rb +73 -0
  165. data/lib/aws/data_pipeline/client.rb +339 -0
  166. data/lib/aws/data_pipeline/config.rb +18 -0
  167. data/lib/aws/data_pipeline/errors.rb +20 -0
  168. data/lib/aws/data_pipeline/request.rb +26 -0
  169. data/lib/aws/dynamo_db.rb +206 -0
  170. data/lib/aws/dynamo_db/attribute_collection.rb +461 -0
  171. data/lib/aws/dynamo_db/batch_get.rb +213 -0
  172. data/lib/aws/dynamo_db/batch_write.rb +252 -0
  173. data/lib/aws/dynamo_db/binary.rb +35 -0
  174. data/lib/aws/dynamo_db/client.rb +904 -0
  175. data/lib/aws/dynamo_db/config.rb +24 -0
  176. data/lib/aws/dynamo_db/errors.rb +20 -0
  177. data/lib/aws/dynamo_db/expectations.rb +40 -0
  178. data/lib/aws/dynamo_db/item.rb +133 -0
  179. data/lib/aws/dynamo_db/item_collection.rb +852 -0
  180. data/lib/aws/dynamo_db/item_data.rb +31 -0
  181. data/lib/aws/dynamo_db/keys.rb +41 -0
  182. data/lib/aws/dynamo_db/primary_key_element.rb +48 -0
  183. data/lib/aws/dynamo_db/request.rb +26 -0
  184. data/lib/aws/dynamo_db/resource.rb +33 -0
  185. data/lib/aws/dynamo_db/table.rb +491 -0
  186. data/lib/aws/dynamo_db/table_collection.rb +165 -0
  187. data/lib/aws/dynamo_db/types.rb +111 -0
  188. data/lib/aws/ec2.rb +440 -0
  189. data/lib/aws/ec2/attachment.rb +140 -0
  190. data/lib/aws/ec2/attachment_collection.rb +54 -0
  191. data/lib/aws/ec2/availability_zone.rb +86 -0
  192. data/lib/aws/ec2/availability_zone_collection.rb +43 -0
  193. data/lib/aws/ec2/block_device_mappings.rb +53 -0
  194. data/lib/aws/ec2/client.rb +3621 -0
  195. data/lib/aws/ec2/collection.rb +36 -0
  196. data/lib/aws/ec2/config.rb +18 -0
  197. data/lib/aws/ec2/config_transform.rb +63 -0
  198. data/lib/aws/ec2/customer_gateway.rb +90 -0
  199. data/lib/aws/ec2/customer_gateway_collection.rb +73 -0
  200. data/lib/aws/ec2/dhcp_options.rb +106 -0
  201. data/lib/aws/ec2/dhcp_options_collection.rb +87 -0
  202. data/lib/aws/ec2/elastic_ip.rb +208 -0
  203. data/lib/aws/ec2/elastic_ip_collection.rb +97 -0
  204. data/lib/aws/ec2/errors.rb +32 -0
  205. data/lib/aws/ec2/export_task.rb +120 -0
  206. data/lib/aws/ec2/export_task_collection.rb +67 -0
  207. data/lib/aws/ec2/filtered_collection.rb +89 -0
  208. data/lib/aws/ec2/has_permissions.rb +44 -0
  209. data/lib/aws/ec2/image.rb +264 -0
  210. data/lib/aws/ec2/image_collection.rb +228 -0
  211. data/lib/aws/ec2/instance.rb +796 -0
  212. data/lib/aws/ec2/instance_collection.rb +372 -0
  213. data/lib/aws/ec2/internet_gateway.rb +122 -0
  214. data/lib/aws/ec2/internet_gateway/attachment.rb +78 -0
  215. data/lib/aws/ec2/internet_gateway_collection.rb +54 -0
  216. data/lib/aws/ec2/key_pair.rb +82 -0
  217. data/lib/aws/ec2/key_pair_collection.rb +99 -0
  218. data/lib/aws/ec2/network_acl.rb +256 -0
  219. data/lib/aws/ec2/network_acl/association.rb +56 -0
  220. data/lib/aws/ec2/network_acl/entry.rb +147 -0
  221. data/lib/aws/ec2/network_acl_collection.rb +64 -0
  222. data/lib/aws/ec2/network_interface.rb +228 -0
  223. data/lib/aws/ec2/network_interface/attachment.rb +100 -0
  224. data/lib/aws/ec2/network_interface_collection.rb +103 -0
  225. data/lib/aws/ec2/permission_collection.rb +174 -0
  226. data/lib/aws/ec2/region.rb +106 -0
  227. data/lib/aws/ec2/region_collection.rb +51 -0
  228. data/lib/aws/ec2/request.rb +21 -0
  229. data/lib/aws/ec2/reserved_instances.rb +56 -0
  230. data/lib/aws/ec2/reserved_instances_collection.rb +40 -0
  231. data/lib/aws/ec2/reserved_instances_offering.rb +60 -0
  232. data/lib/aws/ec2/reserved_instances_offering_collection.rb +39 -0
  233. data/lib/aws/ec2/resource.rb +161 -0
  234. data/lib/aws/ec2/resource_tag_collection.rb +211 -0
  235. data/lib/aws/ec2/route_table.rb +205 -0
  236. data/lib/aws/ec2/route_table/association.rb +119 -0
  237. data/lib/aws/ec2/route_table/route.rb +119 -0
  238. data/lib/aws/ec2/route_table_collection.rb +72 -0
  239. data/lib/aws/ec2/security_group.rb +484 -0
  240. data/lib/aws/ec2/security_group/ip_permission.rb +135 -0
  241. data/lib/aws/ec2/security_group/ip_permission_collection.rb +82 -0
  242. data/lib/aws/ec2/security_group_collection.rb +135 -0
  243. data/lib/aws/ec2/snapshot.rb +143 -0
  244. data/lib/aws/ec2/snapshot_collection.rb +132 -0
  245. data/lib/aws/ec2/subnet.rb +161 -0
  246. data/lib/aws/ec2/subnet_collection.rb +115 -0
  247. data/lib/aws/ec2/tag.rb +81 -0
  248. data/lib/aws/ec2/tag_collection.rb +107 -0
  249. data/lib/aws/ec2/tagged_collection.rb +53 -0
  250. data/lib/aws/ec2/tagged_item.rb +85 -0
  251. data/lib/aws/ec2/volume.rb +174 -0
  252. data/lib/aws/ec2/volume_collection.rb +101 -0
  253. data/lib/aws/ec2/vpc.rb +166 -0
  254. data/lib/aws/ec2/vpc_collection.rb +70 -0
  255. data/lib/aws/ec2/vpn_connection.rb +99 -0
  256. data/lib/aws/ec2/vpn_connection/telemetry.rb +49 -0
  257. data/lib/aws/ec2/vpn_connection_collection.rb +96 -0
  258. data/lib/aws/ec2/vpn_gateway.rb +123 -0
  259. data/lib/aws/ec2/vpn_gateway/attachment.rb +45 -0
  260. data/lib/aws/ec2/vpn_gateway_collection.rb +77 -0
  261. data/lib/aws/elastic_beanstalk.rb +50 -0
  262. data/lib/aws/elastic_beanstalk/client.rb +867 -0
  263. data/lib/aws/elastic_beanstalk/config.rb +18 -0
  264. data/lib/aws/elastic_beanstalk/errors.rb +22 -0
  265. data/lib/aws/elastic_beanstalk/request.rb +29 -0
  266. data/lib/aws/elastic_transcoder.rb +30 -0
  267. data/lib/aws/elastic_transcoder/client.rb +672 -0
  268. data/lib/aws/elastic_transcoder/config.rb +18 -0
  269. data/lib/aws/elastic_transcoder/errors.rb +23 -0
  270. data/lib/aws/elastic_transcoder/request.rb +30 -0
  271. data/lib/aws/elasticache.rb +50 -0
  272. data/lib/aws/elasticache/client.rb +920 -0
  273. data/lib/aws/elasticache/config.rb +18 -0
  274. data/lib/aws/elasticache/errors.rb +22 -0
  275. data/lib/aws/elasticache/request.rb +23 -0
  276. data/lib/aws/elb.rb +67 -0
  277. data/lib/aws/elb/availability_zone_collection.rb +138 -0
  278. data/lib/aws/elb/backend_server_policy_collection.rb +139 -0
  279. data/lib/aws/elb/client.rb +500 -0
  280. data/lib/aws/elb/config.rb +18 -0
  281. data/lib/aws/elb/errors.rb +26 -0
  282. data/lib/aws/elb/instance_collection.rb +173 -0
  283. data/lib/aws/elb/listener.rb +190 -0
  284. data/lib/aws/elb/listener_collection.rb +113 -0
  285. data/lib/aws/elb/listener_opts.rb +45 -0
  286. data/lib/aws/elb/load_balancer.rb +281 -0
  287. data/lib/aws/elb/load_balancer_collection.rb +134 -0
  288. data/lib/aws/elb/load_balancer_policy.rb +93 -0
  289. data/lib/aws/elb/load_balancer_policy_collection.rb +208 -0
  290. data/lib/aws/elb/request.rb +29 -0
  291. data/lib/aws/emr.rb +86 -0
  292. data/lib/aws/emr/client.rb +330 -0
  293. data/lib/aws/emr/config.rb +18 -0
  294. data/lib/aws/emr/errors.rb +22 -0
  295. data/lib/aws/emr/instance_group.rb +138 -0
  296. data/lib/aws/emr/instance_group_collection.rb +82 -0
  297. data/lib/aws/emr/job_flow.rb +306 -0
  298. data/lib/aws/emr/job_flow_collection.rb +185 -0
  299. data/lib/aws/emr/request.rb +23 -0
  300. data/lib/aws/errors.rb +162 -0
  301. data/lib/aws/glacier.rb +80 -0
  302. data/lib/aws/glacier/archive.rb +56 -0
  303. data/lib/aws/glacier/archive_collection.rb +146 -0
  304. data/lib/aws/glacier/client.rb +286 -0
  305. data/lib/aws/glacier/config.rb +19 -0
  306. data/lib/aws/glacier/errors.rb +22 -0
  307. data/lib/aws/glacier/request.rb +34 -0
  308. data/lib/aws/glacier/resource.rb +30 -0
  309. data/lib/aws/glacier/vault.rb +145 -0
  310. data/lib/aws/glacier/vault_collection.rb +75 -0
  311. data/lib/aws/glacier/vault_notification_configuration.rb +29 -0
  312. data/lib/aws/iam.rb +420 -0
  313. data/lib/aws/iam/access_key.rb +180 -0
  314. data/lib/aws/iam/access_key_collection.rb +128 -0
  315. data/lib/aws/iam/account_alias_collection.rb +79 -0
  316. data/lib/aws/iam/client.rb +1092 -0
  317. data/lib/aws/iam/collection.rb +83 -0
  318. data/lib/aws/iam/config.rb +18 -0
  319. data/lib/aws/iam/errors.rb +22 -0
  320. data/lib/aws/iam/group.rb +111 -0
  321. data/lib/aws/iam/group_collection.rb +132 -0
  322. data/lib/aws/iam/group_policy_collection.rb +47 -0
  323. data/lib/aws/iam/group_user_collection.rb +84 -0
  324. data/lib/aws/iam/login_profile.rb +99 -0
  325. data/lib/aws/iam/mfa_device.rb +52 -0
  326. data/lib/aws/iam/mfa_device_collection.rb +127 -0
  327. data/lib/aws/iam/policy.rb +46 -0
  328. data/lib/aws/iam/policy_collection.rb +188 -0
  329. data/lib/aws/iam/request.rb +29 -0
  330. data/lib/aws/iam/resource.rb +62 -0
  331. data/lib/aws/iam/server_certificate.rb +141 -0
  332. data/lib/aws/iam/server_certificate_collection.rb +138 -0
  333. data/lib/aws/iam/signing_certificate.rb +169 -0
  334. data/lib/aws/iam/signing_certificate_collection.rb +131 -0
  335. data/lib/aws/iam/user.rb +205 -0
  336. data/lib/aws/iam/user_collection.rb +133 -0
  337. data/lib/aws/iam/user_group_collection.rb +98 -0
  338. data/lib/aws/iam/user_policy.rb +90 -0
  339. data/lib/aws/iam/user_policy_collection.rb +45 -0
  340. data/lib/aws/iam/virtual_mfa_device.rb +139 -0
  341. data/lib/aws/iam/virtual_mfa_device_collection.rb +73 -0
  342. data/lib/aws/import_export.rb +73 -0
  343. data/lib/aws/import_export/client.rb +109 -0
  344. data/lib/aws/import_export/config.rb +19 -0
  345. data/lib/aws/import_export/errors.rb +22 -0
  346. data/lib/aws/import_export/request.rb +23 -0
  347. data/lib/aws/ops_works.rb +30 -0
  348. data/lib/aws/ops_works/client.rb +713 -0
  349. data/lib/aws/ops_works/config.rb +18 -0
  350. data/lib/aws/ops_works/errors.rb +20 -0
  351. data/lib/aws/ops_works/request.rb +27 -0
  352. data/lib/aws/rails.rb +195 -0
  353. data/lib/aws/rds.rb +71 -0
  354. data/lib/aws/rds/client.rb +2228 -0
  355. data/lib/aws/rds/config.rb +18 -0
  356. data/lib/aws/rds/db_instance.rb +205 -0
  357. data/lib/aws/rds/db_instance_collection.rb +75 -0
  358. data/lib/aws/rds/db_snapshot.rb +163 -0
  359. data/lib/aws/rds/db_snapshot_collection.rb +89 -0
  360. data/lib/aws/rds/errors.rb +22 -0
  361. data/lib/aws/rds/request.rb +23 -0
  362. data/lib/aws/record.rb +116 -0
  363. data/lib/aws/record/abstract_base.rb +701 -0
  364. data/lib/aws/record/attributes.rb +384 -0
  365. data/lib/aws/record/conversion.rb +38 -0
  366. data/lib/aws/record/dirty_tracking.rb +285 -0
  367. data/lib/aws/record/errors.rb +143 -0
  368. data/lib/aws/record/exceptions.rb +48 -0
  369. data/lib/aws/record/hash_model.rb +161 -0
  370. data/lib/aws/record/hash_model/attributes.rb +197 -0
  371. data/lib/aws/record/hash_model/finder_methods.rb +172 -0
  372. data/lib/aws/record/hash_model/scope.rb +108 -0
  373. data/lib/aws/record/model.rb +427 -0
  374. data/lib/aws/record/model/attributes.rb +379 -0
  375. data/lib/aws/record/model/finder_methods.rb +232 -0
  376. data/lib/aws/record/model/scope.rb +213 -0
  377. data/lib/aws/record/naming.rb +31 -0
  378. data/lib/aws/record/scope.rb +199 -0
  379. data/lib/aws/record/validations.rb +712 -0
  380. data/lib/aws/record/validator.rb +246 -0
  381. data/lib/aws/record/validators/acceptance.rb +51 -0
  382. data/lib/aws/record/validators/block.rb +38 -0
  383. data/lib/aws/record/validators/confirmation.rb +43 -0
  384. data/lib/aws/record/validators/count.rb +108 -0
  385. data/lib/aws/record/validators/exclusion.rb +43 -0
  386. data/lib/aws/record/validators/format.rb +57 -0
  387. data/lib/aws/record/validators/inclusion.rb +56 -0
  388. data/lib/aws/record/validators/length.rb +107 -0
  389. data/lib/aws/record/validators/method.rb +33 -0
  390. data/lib/aws/record/validators/numericality.rb +138 -0
  391. data/lib/aws/record/validators/presence.rb +45 -0
  392. data/lib/aws/redshift.rb +52 -0
  393. data/lib/aws/redshift/client.rb +1291 -0
  394. data/lib/aws/redshift/config.rb +18 -0
  395. data/lib/aws/redshift/errors.rb +22 -0
  396. data/lib/aws/redshift/request.rb +29 -0
  397. data/lib/aws/route_53.rb +87 -0
  398. data/lib/aws/route_53/change_batch.rb +159 -0
  399. data/lib/aws/route_53/change_info.rb +72 -0
  400. data/lib/aws/route_53/client.rb +387 -0
  401. data/lib/aws/route_53/config.rb +18 -0
  402. data/lib/aws/route_53/errors.rb +22 -0
  403. data/lib/aws/route_53/hosted_zone.rb +111 -0
  404. data/lib/aws/route_53/hosted_zone_collection.rb +100 -0
  405. data/lib/aws/route_53/request.rb +23 -0
  406. data/lib/aws/route_53/resource_record_set.rb +237 -0
  407. data/lib/aws/route_53/resource_record_set_collection.rb +110 -0
  408. data/lib/aws/s3.rb +155 -0
  409. data/lib/aws/s3/access_control_list.rb +257 -0
  410. data/lib/aws/s3/acl_object.rb +264 -0
  411. data/lib/aws/s3/acl_options.rb +204 -0
  412. data/lib/aws/s3/bucket.rb +742 -0
  413. data/lib/aws/s3/bucket_collection.rb +160 -0
  414. data/lib/aws/s3/bucket_lifecycle_configuration.rb +458 -0
  415. data/lib/aws/s3/bucket_tag_collection.rb +109 -0
  416. data/lib/aws/s3/bucket_version_collection.rb +77 -0
  417. data/lib/aws/s3/cipher_io.rb +119 -0
  418. data/lib/aws/s3/client.rb +1700 -0
  419. data/lib/aws/s3/client/xml.rb +231 -0
  420. data/lib/aws/s3/config.rb +36 -0
  421. data/lib/aws/s3/cors_rule.rb +106 -0
  422. data/lib/aws/s3/cors_rule_collection.rb +192 -0
  423. data/lib/aws/s3/data_options.rb +185 -0
  424. data/lib/aws/s3/encryption_utils.rb +139 -0
  425. data/lib/aws/s3/errors.rb +94 -0
  426. data/lib/aws/s3/multipart_upload.rb +320 -0
  427. data/lib/aws/s3/multipart_upload_collection.rb +68 -0
  428. data/lib/aws/s3/object_collection.rb +355 -0
  429. data/lib/aws/s3/object_metadata.rb +96 -0
  430. data/lib/aws/s3/object_upload_collection.rb +77 -0
  431. data/lib/aws/s3/object_version.rb +148 -0
  432. data/lib/aws/s3/object_version_collection.rb +89 -0
  433. data/lib/aws/s3/paginated_collection.rb +75 -0
  434. data/lib/aws/s3/policy.rb +74 -0
  435. data/lib/aws/s3/prefix_and_delimiter_collection.rb +47 -0
  436. data/lib/aws/s3/prefixed_collection.rb +81 -0
  437. data/lib/aws/s3/presigned_post.rb +555 -0
  438. data/lib/aws/s3/request.rb +201 -0
  439. data/lib/aws/s3/s3_object.rb +1690 -0
  440. data/lib/aws/s3/tree.rb +118 -0
  441. data/lib/aws/s3/tree/branch_node.rb +68 -0
  442. data/lib/aws/s3/tree/child_collection.rb +104 -0
  443. data/lib/aws/s3/tree/leaf_node.rb +94 -0
  444. data/lib/aws/s3/tree/node.rb +22 -0
  445. data/lib/aws/s3/tree/parent.rb +87 -0
  446. data/lib/aws/s3/uploaded_part.rb +80 -0
  447. data/lib/aws/s3/uploaded_part_collection.rb +84 -0
  448. data/lib/aws/s3/website_configuration.rb +102 -0
  449. data/lib/aws/simple_db.rb +219 -0
  450. data/lib/aws/simple_db/attribute.rb +154 -0
  451. data/lib/aws/simple_db/attribute_collection.rb +231 -0
  452. data/lib/aws/simple_db/client.rb +287 -0
  453. data/lib/aws/simple_db/config.rb +20 -0
  454. data/lib/aws/simple_db/consistent_read_option.rb +42 -0
  455. data/lib/aws/simple_db/delete_attributes.rb +62 -0
  456. data/lib/aws/simple_db/domain.rb +121 -0
  457. data/lib/aws/simple_db/domain_collection.rb +86 -0
  458. data/lib/aws/simple_db/domain_metadata.rb +110 -0
  459. data/lib/aws/simple_db/errors.rb +55 -0
  460. data/lib/aws/simple_db/expect_condition_option.rb +45 -0
  461. data/lib/aws/simple_db/item.rb +93 -0
  462. data/lib/aws/simple_db/item_collection.rb +649 -0
  463. data/lib/aws/simple_db/item_data.rb +73 -0
  464. data/lib/aws/simple_db/put_attributes.rb +60 -0
  465. data/lib/aws/simple_db/request.rb +23 -0
  466. data/lib/aws/simple_email_service.rb +428 -0
  467. data/lib/aws/simple_email_service/client.rb +276 -0
  468. data/lib/aws/simple_email_service/config.rb +19 -0
  469. data/lib/aws/simple_email_service/email_address_collection.rb +69 -0
  470. data/lib/aws/simple_email_service/errors.rb +22 -0
  471. data/lib/aws/simple_email_service/identity.rb +209 -0
  472. data/lib/aws/simple_email_service/identity_collection.rb +81 -0
  473. data/lib/aws/simple_email_service/quotas.rb +64 -0
  474. data/lib/aws/simple_email_service/request.rb +27 -0
  475. data/lib/aws/simple_workflow.rb +228 -0
  476. data/lib/aws/simple_workflow/activity_task.rb +173 -0
  477. data/lib/aws/simple_workflow/activity_task_collection.rb +123 -0
  478. data/lib/aws/simple_workflow/activity_type.rb +131 -0
  479. data/lib/aws/simple_workflow/activity_type_collection.rb +93 -0
  480. data/lib/aws/simple_workflow/client.rb +1204 -0
  481. data/lib/aws/simple_workflow/config.rb +18 -0
  482. data/lib/aws/simple_workflow/count.rb +49 -0
  483. data/lib/aws/simple_workflow/decision_task.rb +603 -0
  484. data/lib/aws/simple_workflow/decision_task_collection.rb +225 -0
  485. data/lib/aws/simple_workflow/domain.rb +122 -0
  486. data/lib/aws/simple_workflow/domain_collection.rb +169 -0
  487. data/lib/aws/simple_workflow/errors.rb +20 -0
  488. data/lib/aws/simple_workflow/history_event.rb +276 -0
  489. data/lib/aws/simple_workflow/history_event_collection.rb +76 -0
  490. data/lib/aws/simple_workflow/option_formatters.rb +82 -0
  491. data/lib/aws/simple_workflow/request.rb +33 -0
  492. data/lib/aws/simple_workflow/resource.rb +94 -0
  493. data/lib/aws/simple_workflow/type.rb +89 -0
  494. data/lib/aws/simple_workflow/type_collection.rb +140 -0
  495. data/lib/aws/simple_workflow/workflow_execution.rb +386 -0
  496. data/lib/aws/simple_workflow/workflow_execution_collection.rb +617 -0
  497. data/lib/aws/simple_workflow/workflow_type.rb +177 -0
  498. data/lib/aws/simple_workflow/workflow_type_collection.rb +91 -0
  499. data/lib/aws/sns.rb +76 -0
  500. data/lib/aws/sns/client.rb +266 -0
  501. data/lib/aws/sns/config.rb +18 -0
  502. data/lib/aws/sns/errors.rb +22 -0
  503. data/lib/aws/sns/has_delivery_policy.rb +68 -0
  504. data/lib/aws/sns/policy.rb +47 -0
  505. data/lib/aws/sns/request.rb +23 -0
  506. data/lib/aws/sns/subscription.rb +144 -0
  507. data/lib/aws/sns/subscription_collection.rb +78 -0
  508. data/lib/aws/sns/topic.rb +403 -0
  509. data/lib/aws/sns/topic_collection.rb +62 -0
  510. data/lib/aws/sns/topic_subscription_collection.rb +54 -0
  511. data/lib/aws/sqs.rb +81 -0
  512. data/lib/aws/sqs/client.rb +258 -0
  513. data/lib/aws/sqs/config.rb +18 -0
  514. data/lib/aws/sqs/errors.rb +101 -0
  515. data/lib/aws/sqs/policy.rb +48 -0
  516. data/lib/aws/sqs/queue.rb +764 -0
  517. data/lib/aws/sqs/queue_collection.rb +174 -0
  518. data/lib/aws/sqs/received_message.rb +181 -0
  519. data/lib/aws/sqs/received_sns_message.rb +116 -0
  520. data/lib/aws/sqs/request.rb +67 -0
  521. data/lib/aws/storage_gateway.rb +73 -0
  522. data/lib/aws/storage_gateway/client.rb +472 -0
  523. data/lib/aws/storage_gateway/config.rb +18 -0
  524. data/lib/aws/storage_gateway/errors.rb +22 -0
  525. data/lib/aws/storage_gateway/request.rb +28 -0
  526. data/lib/aws/sts.rb +163 -0
  527. data/lib/aws/sts/client.rb +157 -0
  528. data/lib/aws/sts/config.rb +18 -0
  529. data/lib/aws/sts/errors.rb +22 -0
  530. data/lib/aws/sts/federated_session.rb +56 -0
  531. data/lib/aws/sts/policy.rb +30 -0
  532. data/lib/aws/sts/request.rb +29 -0
  533. data/lib/aws/sts/session.rb +48 -0
  534. data/lib/aws/version.rb +18 -0
  535. data/lib/net/http/connection_pool.rb +226 -0
  536. data/lib/net/http/connection_pool/connection.rb +189 -0
  537. data/lib/net/http/connection_pool/session.rb +126 -0
  538. data/rails/init.rb +15 -0
  539. metadata +632 -0
@@ -0,0 +1,384 @@
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
+ options[:default_value]
54
+ end
55
+
56
+ # @return [String] Returns the name this attribute will use
57
+ # in the storage backend.
58
+ def persist_as
59
+ (options[:persist_as] || @name).to_s
60
+ end
61
+
62
+ # @param [Mixed] raw_value A single value to type cast.
63
+ # @return [Mixed] Returns the type casted value.
64
+ def type_cast raw_value
65
+ self.class.type_cast(raw_value, options)
66
+ end
67
+
68
+ # @param [String] serialized_value The serialized string value.
69
+ # @return [Mixed] Returns a deserialized type-casted value.
70
+ def deserialize serialized_value
71
+ self.class.deserialize(serialized_value, options)
72
+ end
73
+
74
+ # Takes the type casted value and serializes it
75
+ # @param [Mixed] type_casted_value A single value to serialize.
76
+ # @return [Mixed] Returns the serialized value.
77
+ def serialize type_casted_value
78
+ self.class.serialize(type_casted_value, options)
79
+ end
80
+
81
+ # @param [String] serialized_value The raw value returned from AWS.
82
+ # @return [Mixed] Returns the type-casted deserialized value.
83
+ def self.deserialize serialized_value, options = {}
84
+ self.type_cast(serialized_value, options)
85
+ end
86
+
87
+ # @return [Boolean] Returns true if this attribute type can be used
88
+ # with the +:set => true+ option. Certain attirbutes can not
89
+ # be represented with multiple values (like BooleanAttr).
90
+ def self.allow_set?
91
+ raise NotImplementedError
92
+ end
93
+
94
+ # @private
95
+ protected
96
+ def self.expect klass, value, &block
97
+ unless value.is_a?(klass)
98
+ raise ArgumentError, "expected a #{klass}, got #{value.class}"
99
+ end
100
+ yield if block_given?
101
+ end
102
+
103
+ end
104
+
105
+ class StringAttr < BaseAttr
106
+
107
+ # Returns the value cast to a string. Empty strings are returned as
108
+ # nil by default. Type casting is done by calling #to_s on the value.
109
+ #
110
+ # string_attr.type_cast(123)
111
+ # # => '123'
112
+ #
113
+ # string_attr.type_cast('')
114
+ # # => nil
115
+ #
116
+ # string_attr.type_cast('', :preserve_empty_strings => true)
117
+ # # => ''
118
+ #
119
+ # @param [Mixed] raw_value
120
+ # @param [Hash] options
121
+ # @option options [Boolean] :preserve_empty_strings (false) When true,
122
+ # empty strings are preserved and not cast to nil.
123
+ # @return [String,nil] The type casted value.
124
+ def self.type_cast raw_value, options = {}
125
+ case raw_value
126
+ when nil then nil
127
+ when '' then options[:preserve_empty_strings] ? '' : nil
128
+ when String then raw_value
129
+ else raw_value.to_s
130
+ end
131
+ end
132
+
133
+ # Returns a serialized representation of the string value suitable for
134
+ # storing in SimpleDB.
135
+ # @param [String] string
136
+ # @param [Hash] options
137
+ # @return [String] The serialized string.
138
+ def self.serialize string, options = {}
139
+ unless string.is_a?(String)
140
+ msg = "expected a String value, got #{string.class}"
141
+ raise ArgumentError, msg
142
+ end
143
+ string
144
+ end
145
+
146
+ # @private
147
+ def self.allow_set?
148
+ true
149
+ end
150
+
151
+ end
152
+
153
+ class BooleanAttr < BaseAttr
154
+
155
+ def self.type_cast raw_value, options = {}
156
+ case raw_value
157
+ when nil then nil
158
+ when '' then nil
159
+ when false, 'false', '0', 0 then false
160
+ else true
161
+ end
162
+ end
163
+
164
+ def self.serialize boolean, options = {}
165
+ case boolean
166
+ when false then 0
167
+ when true then 1
168
+ else
169
+ msg = "expected a boolean value, got #{boolean.class}"
170
+ raise ArgumentError, msg
171
+ end
172
+ end
173
+
174
+ # @private
175
+ def self.allow_set?
176
+ false
177
+ end
178
+
179
+ end
180
+
181
+ class IntegerAttr < BaseAttr
182
+
183
+ # Returns value cast to an integer. Empty strings are cast to
184
+ # nil by default. Type casting is done by calling #to_i on the value.
185
+ #
186
+ # int_attribute.type_cast('123')
187
+ # #=> 123
188
+ #
189
+ # int_attribute.type_cast('')
190
+ # #=> nil
191
+ #
192
+ # @param [Mixed] raw_value The value to type cast to an integer.
193
+ # @return [Integer,nil] Returns the type casted integer or nil
194
+ def self.type_cast raw_value, options = {}
195
+ case raw_value
196
+ when nil then nil
197
+ when '' then nil
198
+ when Integer then raw_value
199
+ else
200
+ raw_value.respond_to?(:to_i) ?
201
+ raw_value.to_i :
202
+ raw_value.to_s.to_i
203
+ end
204
+ end
205
+
206
+ # Returns a serialized representation of the integer value suitable for
207
+ # storing in SimpleDB.
208
+ #
209
+ # attribute.serialize(123)
210
+ # #=> '123'
211
+ #
212
+ # @param [Integer] integer The number to serialize.
213
+ # @param [Hash] options
214
+ # @return [String] A serialized representation of the integer.
215
+ def self.serialize integer, options = {}
216
+ expect(Integer, integer) { integer }
217
+ end
218
+
219
+ # @private
220
+ def self.allow_set?
221
+ true
222
+ end
223
+
224
+ end
225
+
226
+ class FloatAttr < BaseAttr
227
+
228
+ def self.type_cast raw_value, options = {}
229
+ case raw_value
230
+ when nil then nil
231
+ when '' then nil
232
+ when Float then raw_value
233
+ else
234
+ raw_value.respond_to?(:to_f) ?
235
+ raw_value.to_f :
236
+ raw_value.to_s.to_f
237
+ end
238
+ end
239
+
240
+ def self.serialize float, options = {}
241
+ expect(Float, float) { float }
242
+ end
243
+
244
+ # @private
245
+ def self.allow_set?
246
+ true
247
+ end
248
+
249
+ end
250
+
251
+ class DateAttr < BaseAttr
252
+
253
+ # Returns value cast to a Date object. Empty strings are cast to
254
+ # nil. Values are cast first to strings and then passed to
255
+ # Date.parse. Integers are treated as timestamps.
256
+ #
257
+ # date_attribute.type_cast('2000-01-02T10:11:12Z')
258
+ # #=> #<Date: 4903091/2,0,2299161>
259
+ #
260
+ # date_attribute.type_cast(1306170146)
261
+ # #<Date: 4911409/2,0,2299161>
262
+ #
263
+ # date_attribute.type_cast('')
264
+ # #=> nil
265
+ #
266
+ # date_attribute.type_cast(nil)
267
+ # #=> nil
268
+ #
269
+ # @param [Mixed] raw_value The value to cast to a Date object.
270
+ # @param [Hash] options
271
+ # @return [Date,nil]
272
+ def self.type_cast raw_value, options = {}
273
+ case raw_value
274
+ when nil then nil
275
+ when '' then nil
276
+ when Date then raw_value
277
+ when Integer then
278
+ begin
279
+ Date.parse(Time.at(raw_value).to_s) # assumed timestamp
280
+ rescue
281
+ nil
282
+ end
283
+ else
284
+ begin
285
+ Date.parse(raw_value.to_s) # Time, DateTime or String
286
+ rescue
287
+ nil
288
+ end
289
+ end
290
+ end
291
+
292
+ # Returns a Date object encoded as a string (suitable for sorting).
293
+ #
294
+ # attribute.serialize(DateTime.parse('2001-01-01'))
295
+ # #=> '2001-01-01'
296
+ #
297
+ # @param [Date] date The date to serialize.
298
+ #
299
+ # @param [Hash] options
300
+ #
301
+ # @return [String] Returns the date object serialized to a string
302
+ # ('YYYY-MM-DD').
303
+ #
304
+ def self.serialize date, options = {}
305
+ unless date.is_a?(Date)
306
+ raise ArgumentError, "expected a Date value, got #{date.class}"
307
+ end
308
+ date.strftime('%Y-%m-%d')
309
+ end
310
+
311
+ # @private
312
+ def self.allow_set?
313
+ true
314
+ end
315
+
316
+ end
317
+
318
+ class DateTimeAttr < BaseAttr
319
+
320
+ # Returns value cast to a DateTime object. Empty strings are cast to
321
+ # nil. Values are cast first to strings and then passed to
322
+ # DateTime.parse. Integers are treated as timestamps.
323
+ #
324
+ # datetime_attribute.type_cast('2000-01-02')
325
+ # #=> #<DateTime: 4903091/2,0,2299161>
326
+ #
327
+ # datetime_attribute.type_cast(1306170146)
328
+ # #<DateTime: 106086465073/43200,-7/24,2299161>
329
+ #
330
+ # datetime_attribute.type_cast('')
331
+ # #=> nil
332
+ #
333
+ # datetime_attribute.type_cast(nil)
334
+ # #=> nil
335
+ #
336
+ # @param [Mixed] raw_value The value to cast to a DateTime object.
337
+ # @param [Hash] options
338
+ # @return [DateTime,nil]
339
+ def self.type_cast raw_value, options = {}
340
+ case raw_value
341
+ when nil then nil
342
+ when '' then nil
343
+ when DateTime then raw_value
344
+ when Integer then
345
+ begin
346
+ DateTime.parse(Time.at(raw_value).to_s) # timestamp
347
+ rescue
348
+ nil
349
+ end
350
+ else
351
+ begin
352
+ DateTime.parse(raw_value.to_s) # Time, Date or String
353
+ rescue
354
+ nil
355
+ end
356
+ end
357
+ end
358
+
359
+ # Returns a DateTime object encoded as a string (suitable for sorting).
360
+ #
361
+ # attribute.serialize(DateTime.parse('2001-01-01'))
362
+ # #=> '2001-01-01T00:00:00:Z)
363
+ #
364
+ # @param [DateTime] datetime The datetime object to serialize.
365
+ # @param [Hash] options
366
+ # @return [String] Returns the datetime object serialized to a string
367
+ # in ISO8601 format (e.g. '2011-01-02T10:11:12Z')
368
+ def self.serialize datetime, options = {}
369
+ unless datetime.is_a?(DateTime)
370
+ msg = "expected a DateTime value, got #{datetime.class}"
371
+ raise ArgumentError, msg
372
+ end
373
+ datetime.strftime('%Y-%m-%dT%H:%M:%S%Z')
374
+ end
375
+
376
+ # @private
377
+ def self.allow_set?
378
+ true
379
+ end
380
+
381
+ end
382
+ end
383
+ end
384
+ 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
+ # @private
18
+ module Conversion
19
+
20
+ # @private
21
+ def to_model
22
+ self
23
+ end
24
+
25
+ # @private
26
+ def to_key
27
+ persisted? ? [id] : nil
28
+ end
29
+
30
+ # @private
31
+ def to_param
32
+ persisted? ? to_key.join('-') : nil
33
+ end
34
+
35
+ end
36
+
37
+ end
38
+ end
@@ -0,0 +1,285 @@
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
+ # You can inspect further and get a list of changed attributes
27
+ #
28
+ # my_book.changed #=> ['title']
29
+ #
30
+ # Or you can get a more detailed description of the changes. {#changes}
31
+ # returns a hash of changed attributes (keys) with their old and new
32
+ # values.
33
+ #
34
+ # my_book.changes
35
+ # #=> { 'title' => ['My Book', 'My Awesome Book']
36
+ #
37
+ # For every configured attribute you also get a handful of methods
38
+ # for inspecting changes on that attribute. Given the following
39
+ # attribute:
40
+ #
41
+ # string_attr :title
42
+ #
43
+ # You can now call any of the following methods:
44
+ #
45
+ # * title_changed?
46
+ # * title_change
47
+ # * title_was
48
+ # * reset_title!
49
+ # * title_will_change!
50
+ #
51
+ # Given the title change from above:
52
+ #
53
+ # my_book.title_changed? #=> true
54
+ # my_book.title_change #=> ['My Book', 'My Awesome Book']
55
+ # my_book.title_was #=> ['My Book']
56
+ #
57
+ # my_book.reset_title!
58
+ # my_book.title #=> 'My Book'
59
+ #
60
+ # == In-Place Editing
61
+ #
62
+ # Dirty tracking works by comparing incoming attribute values upon
63
+ # assignment against the value that was there previously. If you
64
+ # use functions against the value that modify it (like gsub!)
65
+ # you must notify your record about the coming change.
66
+ #
67
+ # my_book.title #=> 'My Book'
68
+ # my_book.title_will_change!
69
+ # my_book.title.gsub!(/My/, 'Your')
70
+ # my_book.title_change #=> ['My Book', 'Your Book']
71
+ #
72
+ # == Partial Updates
73
+ #
74
+ # Dirty tracking makes it possible to only persist those attributes
75
+ # that have changed since they were loaded. This speeds up requests
76
+ # against AWS when saving data.
77
+ #
78
+ module DirtyTracking
79
+
80
+ # Returns true if this model has unsaved changes.
81
+ #
82
+ # b = Book.new(:title => 'My Book')
83
+ # b.changed?
84
+ # #=> true
85
+ #
86
+ # New objects and objects freshly loaded should not have any changes:
87
+ #
88
+ # b = Book.new
89
+ # b.changed? #=> false
90
+ #
91
+ # b = Book.first
92
+ # b.changed? #=> false
93
+ #
94
+ # @return [Boolean] Returns true if any of the attributes have
95
+ # unsaved changes.
96
+ def changed?
97
+ !orig_values.empty?
98
+ end
99
+
100
+ # Returns an array of attribute names that have changes.
101
+ #
102
+ # book.changed #=> []
103
+ # person.title = 'New Title'
104
+ # book.changed #=> ['title']
105
+ #
106
+ # @return [Array] Returns an array of attribute names that have
107
+ # unsaved changes.
108
+ def changed
109
+ orig_values.keys
110
+ end
111
+
112
+ # Returns the changed attributes in a hash. Keys are attribute names,
113
+ # values are two value arrays. The first value is the previous
114
+ # attribute value, the second is the current attribute value.
115
+ #
116
+ # book.title = 'New Title'
117
+ # book.changes
118
+ # #=> { 'title' => ['Old Title', 'New Title'] }
119
+ #
120
+ # @return [Hash] Returns a hash of attribute changes.
121
+ def changes
122
+ changed.inject({}) do |changes, attr_name|
123
+ changes[attr_name] = attribute_change(attr_name)
124
+ changes
125
+ end
126
+ end
127
+
128
+ # Returns true if the named attribute has unsaved changes.
129
+ #
130
+ # This is an attribute method. The following two expressions
131
+ # are equivilent:
132
+ #
133
+ # book.title_changed?
134
+ # book.attribute_changed?(:title)
135
+ #
136
+ # @param [String] attribute_name Name of the attribute to check
137
+ # for changes.
138
+ #
139
+ # @return [Boolean] Returns true if the named attribute
140
+ # has unsaved changes.
141
+ # @private
142
+ private
143
+ def attribute_changed? attribute_name
144
+ orig_values.keys.include?(attribute_name)
145
+ end
146
+
147
+ # Returns an array of the old value and the new value for
148
+ # attributes that have unsaved changes, returns nil otherwise.
149
+ #
150
+ # This is an attribute method. The following two expressions
151
+ # are equivilent:
152
+ #
153
+ # book.title_change
154
+ # book.attribute_change(:title)
155
+ #
156
+ # @example Asking for changes on an unchanged attribute
157
+ #
158
+ # book = Book.new
159
+ # book.title_change #=> nil
160
+ #
161
+ # @example Getting changed attributes on a new object
162
+ #
163
+ # book = Book.new(:title => 'My Book')
164
+ # book.title_change #=> [nil, 'My Book']
165
+ #
166
+ # @example Getting changed attributes on a loaded object
167
+ #
168
+ # book = Book.first
169
+ # book.title = 'New Title'
170
+ # book.title_change #=> ['Old Title', 'New Title']
171
+ #
172
+ # @param [String] attribute_name Name of the attribute to fetch
173
+ # a change for.
174
+ # @return [Boolean] Returns true if the named attribute
175
+ # has unsaved changes.
176
+ # @private
177
+ private
178
+ def attribute_change attribute_name
179
+ self.class.attribute_for(attribute_name) do |attribute|
180
+ if orig_values.has_key?(attribute.name)
181
+ [orig_values[attribute.name], __send__(attribute.name)]
182
+ else
183
+ nil
184
+ end
185
+ end
186
+ end
187
+
188
+ # Returns the previous value for changed attributes, or the current
189
+ # value for unchanged attributes.
190
+ #
191
+ # This is an attribute method. The following two expressions
192
+ # are equivilent:
193
+ #
194
+ # book.title_was
195
+ # book.attribute_was(:title)
196
+ #
197
+ # @example Returns the previous value for changed attributes:
198
+ #
199
+ # book = Book.where(:title => 'My Book').first
200
+ # book.title = 'New Title'
201
+ # book.title_was #=> 'My Book'
202
+ #
203
+ # @example Returns the current value for unchanged attributes:
204
+ #
205
+ # book = Book.where(:title => 'My Book').first
206
+ # book.title_was #=> 'My Book'
207
+ #
208
+ # @return Returns the previous value for changed attributes
209
+ # or the current value for unchanged attributes.
210
+ # @private
211
+ private
212
+ def attribute_was attribute_name
213
+ self.class.attribute_for(attribute_name) do |attribute|
214
+ name = attribute.name
215
+ orig_values.has_key?(name) ? orig_values[name] : __send__(name)
216
+ end
217
+ end
218
+
219
+ # Reverts any changes to the attribute, restoring its original value.
220
+ # @param [String] attribute_name Name of the attribute to reset.
221
+ # @return [nil]
222
+ # @private
223
+ private
224
+ def reset_attribute! attribute_name
225
+ __send__("#{attribute_name}=", attribute_was(attribute_name))
226
+ nil
227
+ end
228
+
229
+ # Indicate to the record that you are about to edit an attribute
230
+ # in place.
231
+ # @param [String] attribute_name Name of the attribute that will
232
+ # be changed.
233
+ # @return [nil]
234
+ # @private
235
+ private
236
+ def attribute_will_change! attribute_name
237
+ self.class.attribute_for(attribute_name) do |attribute|
238
+ name = attribute.name
239
+ unless orig_values.has_key?(name)
240
+ was = __send__(name)
241
+ begin
242
+ # booleans, nil, etc all #respond_to?(:clone), but they raise
243
+ # a TypeError when you attempt to dup them.
244
+ orig_values[name] = was.clone
245
+ rescue TypeError
246
+ orig_values[name] = was
247
+ end
248
+ end
249
+ end
250
+ nil
251
+ end
252
+
253
+ private
254
+ def orig_values
255
+ @_orig_values ||= {}
256
+ end
257
+
258
+ private
259
+ def clear_change! attribute_name
260
+ orig_values.delete(attribute_name)
261
+ end
262
+
263
+ private
264
+ def ignore_changes &block
265
+ begin
266
+ @_ignore_changes = true
267
+ yield
268
+ ensure
269
+ @_ignore_changes = false
270
+ end
271
+ end
272
+
273
+ private
274
+ def if_tracking_changes &block
275
+ yield unless @_ignore_changes
276
+ end
277
+
278
+ private
279
+ def clear_changes!
280
+ orig_values.clear
281
+ end
282
+
283
+ end
284
+ end
285
+ end