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,89 @@
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
+ class RDS
16
+ class DBSnapshotCollection
17
+
18
+ include Core::Collection::WithLimitAndNextToken
19
+
20
+ # @private
21
+ def initialize options = {}
22
+ @filters = options[:filters] || {}
23
+ super
24
+ end
25
+
26
+ # @param [String] db_snapshot_id
27
+ # @return [DBSnapshot] Returns a {DBSnapshot} with the given ID.
28
+ def [] db_snapshot_id
29
+ DBSnapshot.new(db_snapshot_id, :config => config)
30
+ end
31
+
32
+ # Filters the DB snapshots to those beloning to a single db instance.
33
+ # You may pass the ID of a db instance or a {DBInstance} object.
34
+ #
35
+ # @param [String,DBInstance] db_instance A db instance identifier
36
+ # string or a {DBInstance} object.
37
+ #
38
+ # @return [DBSnapshotCollection]
39
+ #
40
+ def db_instance db_instance
41
+ id = db_instance.is_a?(Core::Model) ? db_instance.id : db_instance
42
+ filter(:db_instance_identifier, id.to_s.downcase)
43
+ end
44
+
45
+ # Filters the DB snapshots to those of a given snapshot type.
46
+ # @param [String] snapshot_type
47
+ # @return [DBSnapshotCollection]
48
+ def with_type snapshot_type
49
+ filter(:snapshot_type, snapshot_type)
50
+ end
51
+ alias_method :type, :with_type
52
+
53
+ # @param [String,Symbol] name
54
+ # @param [Mixed] value
55
+ # @return [DBSnapshotCollection]
56
+ def filter name, value
57
+ options = {}
58
+ options[:filters] = @filters.merge(name.to_s.to_sym => value)
59
+ options[:config] = config
60
+ DBSnapshotCollection.new(options)
61
+ end
62
+
63
+ protected
64
+
65
+ def _each_item marker, max_records, options = {}, &block
66
+
67
+ options = @filters.merge(options)
68
+ options[:marker] = marker if marker
69
+ options[:max_records] = [[20,max_records].max,100].min if max_records
70
+
71
+ response = client.describe_db_snapshots(options)
72
+ response.data[:db_snapshots].each do |details|
73
+
74
+ db_snapshot = DBSnapshot.new_from(
75
+ :describe_db_snapshots,
76
+ details,
77
+ details[:db_snapshot_identifier],
78
+ :config => config)
79
+
80
+ yield(db_snapshot)
81
+
82
+ end
83
+
84
+ response.data[:marker]
85
+ end
86
+
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,22 @@
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
+ class RDS
16
+ module Errors
17
+
18
+ extend Core::LazyErrorClasses
19
+
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,23 @@
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
+ class RDS
16
+
17
+ # @private
18
+ class Request < Core::Http::Request
19
+ include Core::Signature::Version2
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,116 @@
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 'set'
15
+
16
+ module AWS
17
+
18
+ # AWS::Record is an ORM built on top of AWS services.
19
+ module Record
20
+
21
+ AWS.register_autoloads(self) do
22
+ autoload :Base, 'model'
23
+ autoload :Model, 'model'
24
+ autoload :HashModel, 'hash_model'
25
+ end
26
+
27
+ # @private
28
+ class RecordNotFound < StandardError; end
29
+
30
+ # Sets a prefix to be applied to all SimpleDB domains associated with
31
+ # AWS::Record::Base classes.
32
+ #
33
+ # AWS::Record.domain_prefix = 'production_'
34
+ #
35
+ # class Product < AWS::Record::Base
36
+ # set_shard_name 'products'
37
+ # end
38
+ #
39
+ # p = Product.new
40
+ # p.shard #=> 'products'
41
+ # p.save # the product is persisted to the 'production-products' domain
42
+ #
43
+ # @param [String] prefix A prefix to append to all domains. This is useful
44
+ # for grouping domains used by one application with a single prefix.
45
+ #
46
+ def self.domain_prefix= prefix
47
+ @domain_prefix = prefix
48
+ end
49
+
50
+ # @return [String,nil] The string that is prepended to all domain names.
51
+ def self.domain_prefix
52
+ @domain_prefix
53
+ end
54
+
55
+ # Sets a prefix to be applied to all DynamoDB tables associated
56
+ # with {AWS::Record::HashModel} and {AWS::Record::ListModel}
57
+ # classes.
58
+ #
59
+ # AWS::Record.table_prefix = 'production_'
60
+ #
61
+ # class Product < AWS::Record::HashModel
62
+ # set_shard_name 'products'
63
+ # end
64
+ #
65
+ # p = Product.new
66
+ # p.shard #=> 'products'
67
+ # p.save # the product is persisted to the 'production-products' table
68
+ #
69
+ # @param [String] prefix A prefix to append to all tables. This is
70
+ # useful for grouping tables used by one application with a
71
+ # single prefix.
72
+ #
73
+ def self.table_prefix= prefix
74
+ @table_prefix = prefix
75
+ end
76
+
77
+ # @return [String,nil] The string that is prepended to all table names.
78
+ def self.table_prefix
79
+ @table_prefix
80
+ end
81
+
82
+ # A utility method for casting values into an array.
83
+ #
84
+ # * nil is returned as an empty array, []
85
+ # * Arrays are returned unmodified
86
+ # * Everything else is returned as the sole element of an array
87
+ #
88
+ # @param [Object] value
89
+ # @return [Array] The value cast into an array
90
+ # @private
91
+ def self.as_array value
92
+ case value
93
+ when nil then []
94
+ when Set then value.to_a
95
+ when Array then value
96
+ else [value]
97
+ end
98
+ end
99
+
100
+ # A utility method for casting values into
101
+ #
102
+ # * Sets are returned unmodified
103
+ # * everything else is passed through #{as_array} and then into a new Set
104
+ #
105
+ # @param [Object] value
106
+ # @return [Set] The value cast into a Set.
107
+ # @private
108
+ def self.as_set value
109
+ case value
110
+ when Set then value
111
+ else Set.new(as_array(value))
112
+ end
113
+ end
114
+
115
+ end
116
+ end
@@ -0,0 +1,701 @@
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 'uuidtools'
15
+ require 'set'
16
+
17
+ require 'aws/record/scope'
18
+ require 'aws/record/naming'
19
+ require 'aws/record/validations'
20
+ require 'aws/record/dirty_tracking'
21
+ require 'aws/record/conversion'
22
+ require 'aws/record/errors'
23
+ require 'aws/record/exceptions'
24
+
25
+ module AWS
26
+ module Record
27
+ module AbstractBase
28
+
29
+ def self.extended base
30
+
31
+ base.send(:extend, ClassMethods)
32
+ base.send(:include, InstanceMethods)
33
+ base.send(:include, DirtyTracking)
34
+ base.send(:extend, Validations)
35
+
36
+ # these 3 modules are for rails 3+ active model compatability
37
+ base.send(:extend, Naming)
38
+ base.send(:include, Naming)
39
+ base.send(:include, Conversion)
40
+
41
+ end
42
+
43
+ module InstanceMethods
44
+
45
+ # Constructs a new record.
46
+ #
47
+ # @param [Hash] attributes Attributes that should be bulk assigned
48
+ # to this record. You can also specify the shard (i.e. domain
49
+ # or table) this record should persist to via +:shard+).
50
+ #
51
+ # @option attributes [String] :shard The domain/table this record
52
+ # should persist to. If this is omitted, it will persist to the
53
+ # class default shard (which defaults to the class name).
54
+ #
55
+ # @return [Model,HashModel] Returns a new (non-persisted) record.
56
+ # Call {#save} to persist changes to AWS.
57
+ #
58
+ def initialize attributes = {}
59
+
60
+ attributes = attributes.dup
61
+
62
+ # supporting :domain for backwards compatability, :shard is prefered
63
+ @_shard = attributes.delete(:domain)
64
+ @_shard ||= attributes.delete('domain')
65
+ @_shard ||= attributes.delete(:shard)
66
+ @_shard ||= attributes.delete('shard')
67
+ @_shard = self.class.shard_name(@_shard)
68
+
69
+ @_data = {}
70
+ assign_default_values
71
+ bulk_assign(attributes)
72
+
73
+ end
74
+
75
+ # @return [String] Returns the name of the shard this record
76
+ # is persisted to or will be persisted to. Defaults to the
77
+ # domain/table named after this record class.
78
+ def shard
79
+ @_shard
80
+ end
81
+ alias_method :domain, :shard # for backwards compatability
82
+
83
+ # The id for each record is auto-generated. The default strategy
84
+ # generates uuid strings.
85
+ # @return [String] Returns the id string (uuid) for this record. Retuns
86
+ # nil if this is a new record that has not been persisted yet.
87
+ def id
88
+ @_id
89
+ end
90
+
91
+ # @return [Hash] A hash with attribute names as hash keys (strings) and
92
+ # attribute values (of mixed types) as hash values.
93
+ def attributes
94
+ attributes = Core::IndifferentHash.new
95
+ attributes['id'] = id if persisted?
96
+ self.class.attributes.keys.inject(attributes) do |hash,attr_name|
97
+ hash.merge(attr_name => __send__(attr_name))
98
+ end
99
+ end
100
+
101
+ # Acts like {#update} but does not call {#save}.
102
+ #
103
+ # record.attributes = { :name => 'abc', :age => 20 }
104
+ #
105
+ # @param [Hash] attributes A hash of attributes to set on this record
106
+ # without calling save.
107
+ #
108
+ # @return [Hash] Returns the attribute hash that was passed in.
109
+ #
110
+ def attributes= attributes
111
+ bulk_assign(attributes)
112
+ end
113
+
114
+ # Persistence indicates if the record has been saved previously or not.
115
+ #
116
+ # @example
117
+ # @recipe = Recipe.new(:name => 'Buttermilk Pancackes')
118
+ # @recipe.persisted? #=> false
119
+ # @recipe.save!
120
+ # @recipe.persisted? #=> true
121
+ #
122
+ # @return [Boolean] Returns true if this record has been persisted.
123
+ def persisted?
124
+ !!@_persisted
125
+ end
126
+
127
+ # @return [Boolean] Returns true if this record has not been persisted
128
+ # to SimpleDB.
129
+ def new_record?
130
+ !persisted?
131
+ end
132
+
133
+ # @param [Hash] opts Pass :validate => false to skip validations
134
+ # @return [Boolean] Returns true if this record has no validation errors.
135
+ def valid? opts = {}
136
+ opts = {} if opts.nil?
137
+ opts = {:validate => true}.merge(opts)
138
+ run_validations if opts[:validate]
139
+ errors.empty?
140
+ end
141
+
142
+ def errors
143
+ @errors ||= Errors.new
144
+ end
145
+
146
+ # Creates new records, updates existing records.
147
+ # @param [Hash] opts Pass :validate => false to skip validations
148
+ # @return [Boolean] Returns true if the record saved without errors,
149
+ # false otherwise.
150
+ def save opts = {}
151
+ if valid?(opts)
152
+ persisted? ? update : create
153
+ clear_changes!
154
+ true
155
+ else
156
+ false
157
+ end
158
+ end
159
+
160
+ # Creates new records, updates exsting records. If there is a validation
161
+ # error then an exception is raised.
162
+ # @raise [InvalidRecordError] Raised when the record has validation
163
+ # errors and can not be saved.
164
+ # @return [true] Returns true after a successful save.
165
+ def save!
166
+ raise InvalidRecordError.new(self) unless save
167
+ true
168
+ end
169
+
170
+ # Bulk assigns the attributes and then saves the record.
171
+ # @param [Hash] attribute_hash A hash of attribute names (keys) and
172
+ # attribute values to assign to this record.
173
+ # @return (see #save)
174
+ def update_attributes attribute_hash
175
+ bulk_assign(attribute_hash)
176
+ save
177
+ end
178
+
179
+ # Bulk assigns the attributes and then saves the record. Raises
180
+ # an exception (AWS::Record::InvalidRecordError) if the record is not
181
+ # valid.
182
+ # @param (see #update_attributes)
183
+ # @return [true]
184
+ def update_attributes! attribute_hash
185
+ if update_attributes(attribute_hash)
186
+ true
187
+ else
188
+ raise InvalidRecordError.new(self)
189
+ end
190
+ end
191
+
192
+ # Deletes the record.
193
+ # @return [true]
194
+ def delete
195
+ if persisted?
196
+ if deleted?
197
+ raise 'unable to delete, this object has already been deleted'
198
+ else
199
+ delete_storage
200
+ @_deleted = true
201
+ end
202
+ else
203
+ raise 'unable to delete, this object has not been saved yet'
204
+ end
205
+ end
206
+ alias_method :destroy, :delete
207
+
208
+ # @return [Boolean] Returns true if this instance object has been deleted.
209
+ def deleted?
210
+ persisted? ? !!@_deleted : false
211
+ end
212
+
213
+ # If you define a custom setter, you use #[]= to set the value
214
+ # on the record.
215
+ #
216
+ # class Book < AWS::Record::Model
217
+ #
218
+ # string_attr :name
219
+ #
220
+ # # replace the default #author= method
221
+ # def author= name
222
+ # self['author'] = name.blank? ? 'Anonymous' : name
223
+ # end
224
+ #
225
+ # end
226
+ #
227
+ # @param [String,Symbol] The attribute name to set a value for
228
+ # @param attribute_value The value to assign.
229
+ protected
230
+ def []= attribute_name, new_value
231
+ self.class.attribute_for(attribute_name) do |attribute|
232
+
233
+ if_tracking_changes do
234
+ original_value = type_cast(attribute, attribute_was(attribute.name))
235
+ incoming_value = type_cast(attribute, new_value)
236
+ if original_value == incoming_value
237
+ clear_change!(attribute.name)
238
+ else
239
+ attribute_will_change!(attribute.name)
240
+ end
241
+ end
242
+
243
+ @_data[attribute.name] = new_value
244
+
245
+ end
246
+ end
247
+
248
+ # Returns the typecasted value for the named attribute.
249
+ #
250
+ # book = Book.new(:title => 'My Book')
251
+ # book['title'] #=> 'My Book'
252
+ # book.title #=> 'My Book'
253
+ #
254
+ # === Intended Use
255
+ #
256
+ # This method's primary use is for getting/setting the value for
257
+ # an attribute inside a custom method:
258
+ #
259
+ # class Book < AWS::Record::Model
260
+ #
261
+ # string_attr :title
262
+ #
263
+ # def title
264
+ # self['title'] ? self['title'].upcase : nil
265
+ # end
266
+ #
267
+ # end
268
+ #
269
+ # book = Book.new(:title => 'My Book')
270
+ # book.title #=> 'MY BOOK'
271
+ #
272
+ # @param [String,Symbol] attribute_name The name of the attribute to fetch
273
+ # a value for.
274
+ # @return The current type-casted value for the named attribute.
275
+ protected
276
+ def [] attribute_name
277
+ self.class.attribute_for(attribute_name) do |attribute|
278
+ type_cast(attribute, @_data[attribute.name])
279
+ end
280
+ end
281
+
282
+ protected
283
+ def create
284
+ populate_id
285
+ touch_timestamps('created_at', 'updated_at')
286
+ increment_optimistic_lock_value
287
+ create_storage
288
+ @_persisted = true
289
+ end
290
+
291
+ private
292
+ def update
293
+ return unless changed?
294
+ touch_timestamps('updated_at')
295
+ increment_optimistic_lock_value
296
+ update_storage
297
+ end
298
+
299
+ protected
300
+ def populate_id
301
+ @_id = UUIDTools::UUID.random_create.to_s.downcase
302
+ end
303
+
304
+ protected
305
+ def touch_timestamps *attributes
306
+ now = Time.now
307
+ attributes.each do |attr_name|
308
+ if
309
+ self.class.attributes[attr_name] and
310
+ !attribute_changed?(attr_name)
311
+ # don't touch timestamps the user modified
312
+ then
313
+ __send__("#{attr_name}=", now)
314
+ end
315
+ end
316
+ end
317
+
318
+ protected
319
+ def increment_optimistic_lock_value
320
+ if_locks_optimistically do |lock_attr|
321
+ if value = self[lock_attr.name]
322
+ self[lock_attr.name] = value + 1
323
+ else
324
+ self[lock_attr.name] = 1
325
+ end
326
+ end
327
+ end
328
+
329
+ protected
330
+ def if_locks_optimistically &block
331
+ if opt_lock_attr = self.class.optimistic_locking_attr
332
+ yield(opt_lock_attr)
333
+ end
334
+ end
335
+
336
+ protected
337
+ def opt_lock_conditions
338
+ conditions = {}
339
+ if_locks_optimistically do |lock_attr|
340
+ if was = attribute_was(lock_attr.name)
341
+ conditions[:if] = { lock_attr.name => lock_attr.serialize(was) }
342
+ else
343
+ conditions[:unless_exists] = lock_attr.name
344
+ end
345
+ end
346
+ conditions
347
+ end
348
+
349
+ private
350
+ def assign_default_values
351
+ # populate default attribute values
352
+ ignore_changes do
353
+ self.class.attributes.values.each do |attribute|
354
+ begin
355
+ # copy default values down so methods like #gsub! don't
356
+ # modify the default values for other objects
357
+ @_data[attribute.name] = attribute.default_value.clone
358
+ rescue TypeError
359
+ @_data[attribute.name] = attribute.default_value
360
+ end
361
+ end
362
+ end
363
+ end
364
+
365
+ private
366
+ def bulk_assign hash
367
+ flatten_date_parts(hash).each_pair do |attr_name, attr_value|
368
+ __send__("#{attr_name}=", attr_value)
369
+ end
370
+ end
371
+
372
+ private
373
+ # Rails date and time select helpers split date and time
374
+ # attributes into multiple values for form submission.
375
+ # These attributes get named things like 'created_at(1i)'
376
+ # and represent year/month/day/hour/min/sec parts of
377
+ # the date/time.
378
+ #
379
+ # This method converts these attributes back into a single
380
+ # value and converts them to Date and DateTime objects.
381
+ def flatten_date_parts attributes
382
+
383
+ multi_attributes = Set.new
384
+
385
+ hash = attributes.inject({}) do |hash,(key,value)|
386
+ # collects attribuets like "created_at(1i)" into an array of parts
387
+ if key =~ /\(/
388
+ key, index = key.to_s.split(/\(|i\)/)
389
+ hash[key] ||= []
390
+ hash[key][index.to_i - 1] = value.to_i
391
+ multi_attributes << key
392
+ else
393
+ hash[key] = value
394
+ end
395
+ hash
396
+ end
397
+
398
+ # convert multiattribute values into date/time objects
399
+ multi_attributes.each do |key|
400
+
401
+ values = hash[key]
402
+
403
+ hash[key] = case values.size
404
+ when 0 then nil
405
+ when 2
406
+ now = Time.now
407
+ Time.local(now.year, now.month, now.day, values[0], values[1], 0, 0)
408
+ when 3 then Date.new(*values)
409
+ else DateTime.new(*values)
410
+ end
411
+
412
+ end
413
+
414
+ hash
415
+
416
+ end
417
+
418
+ private
419
+ def type_cast attribute, raw
420
+ if attribute.set?
421
+ values = Record.as_array(raw).inject([]) do |values,value|
422
+ values << attribute.type_cast(value)
423
+ values
424
+ end
425
+ Set.new(values.compact)
426
+ else
427
+ attribute.type_cast(raw)
428
+ end
429
+ end
430
+
431
+ private
432
+ def serialize_attributes
433
+
434
+ hash = {}
435
+ self.class.attributes.each_pair do |attribute_name,attribute|
436
+ value = serialize_attribute(attribute, @_data[attribute_name])
437
+ unless [nil, []].include?(value)
438
+ hash[attribute_name] = value
439
+ end
440
+ end
441
+
442
+ # simple db does not support persisting items without attribute values
443
+ raise EmptyRecordError.new(self) if hash.empty?
444
+
445
+ hash
446
+
447
+ end
448
+
449
+ private
450
+ def serialize_attribute attribute, raw_value
451
+ type_casted_value = type_cast(attribute, raw_value)
452
+ case type_casted_value
453
+ when nil then nil
454
+ when Set then type_casted_value.map{|v| attribute.serialize(v) }
455
+ else attribute.serialize(type_casted_value)
456
+ end
457
+ end
458
+
459
+ # @private
460
+ protected
461
+ def hydrate id, data
462
+
463
+ # @todo need to do something about partial hyrdation of attributes
464
+
465
+ @_id = id
466
+
467
+ # New objects are populated with default values, but we don't
468
+ # want these values to hang around when hydrating persisted values
469
+ # (those values may have been blanked out before save).
470
+ self.class.attributes.values.each do |attribute|
471
+ @_data[attribute.name] = nil
472
+ end
473
+
474
+ ignore_changes do
475
+ bulk_assign(deserialize_item_data(data))
476
+ end
477
+
478
+ @_persisted = true
479
+
480
+ end
481
+
482
+ protected
483
+ def create_storage
484
+ raise NotImplementedError
485
+ end
486
+
487
+ protected
488
+ def update_storage
489
+ raise NotImplementedError
490
+ end
491
+
492
+ protected
493
+ def delete_storage
494
+ raise NotImplementedError
495
+ end
496
+
497
+ end
498
+
499
+ module ClassMethods
500
+
501
+ # Allows you to override the default shard name for this class.
502
+ # The shard name defaults to the class name.
503
+ # @param [String] name
504
+ def set_shard_name name
505
+ @_shard_name = name
506
+ end
507
+ alias_method :set_domain_name, :set_shard_name
508
+ alias_method :shard_name=, :set_shard_name
509
+
510
+ # Returns the name of the shard this class will persist records
511
+ # into by default.
512
+ #
513
+ # @param [String] name Defaults to the name of this class.
514
+ # @return [String] Returns the full prefixed domain name for this class.
515
+ def shard_name name = nil
516
+ case name
517
+ when nil
518
+ @_shard_name || self.name
519
+ when AWS::DynamoDB::Table
520
+ name.name.gsub(/^#{Record::table_prefix}/, '')
521
+ when AWS::SimpleDB::Domain
522
+ name.name.gsub(/^#{Record::domain_prefix}/, '')
523
+ else name
524
+ end
525
+ end
526
+ alias_method :domain_name, :shard_name
527
+
528
+ # Adds a scoped finder to this class.
529
+ #
530
+ # class Book < AWS::Record::Model
531
+ # scope :top_10, order(:popularity, :desc).limit(10)
532
+ # end
533
+ #
534
+ # Book.top_10.to_a
535
+ # #=> [#<Book...>, #<Book...>]
536
+ #
537
+ # Book.top_10.first
538
+ # #=> #<Book...>
539
+ #
540
+ # You can also provide a block that accepts params for the scoped
541
+ # finder. This block should return a scope.
542
+ #
543
+ # class Book < AWS::Record::Model
544
+ # scope :by_author, lambda {|name| where(:author => name) }
545
+ # end
546
+ #
547
+ # # top 10 books by the author 'John Doe'
548
+ # Book.by_author('John Doe').top_10
549
+ #
550
+ # @param [Symbol] name The name of the scope. Scope names should be
551
+ # method-safe and should not conflict with any other class methods.
552
+ #
553
+ # @param [Scope] scope
554
+ #
555
+ def scope name, scope = nil, &block
556
+
557
+ method_definition = scope ? lambda { scope } : block
558
+
559
+ extend(Module.new { define_method(name, &method_definition) })
560
+
561
+ end
562
+
563
+ # Creates an object (or multiple if you pass an array of attributes).
564
+ # The {#save} method is called on the object(s) after construction.
565
+ # The object(s) are returned wether or not the object(s) are valid.
566
+ #
567
+ # class Book < AWS::Record::Model
568
+ # string_attr :title
569
+ # end
570
+ #
571
+ # book = Book.create(:title => "The big book of tests")
572
+ # book.persisted?
573
+ # #=> true
574
+ #
575
+ # books = Book.create([{:title => 'abc'}, {:title => 'xyz'}])
576
+ # books.each(&:persisted?)
577
+ # #=> [true, true]
578
+ #
579
+ def create attributes = {}
580
+ create_impl(attributes, :create, :save)
581
+ end
582
+
583
+ # Creates an object (or multiple if you pass an array of attributes).
584
+ # The {#save!} method is called on the object(s) after construction.
585
+ # If the object(s) are not valid, then an error is raised.
586
+ #
587
+ # class Book < AWS::Record::Model
588
+ # string_attr :title
589
+ # validates_presence_of :title
590
+ # end
591
+ #
592
+ # book = Book.create!(:title => "The big book of tests")
593
+ # book.persisted?
594
+ # #=> true
595
+ #
596
+ # book = Book.create!()
597
+ # #=> raises AWS::Record::InvalidRecordError
598
+ #
599
+ def create! attributes = {}
600
+ create_impl(attributes, :create!, :save!)
601
+ end
602
+
603
+ # @private
604
+ def new_scope
605
+ self::Scope.new(self)
606
+ end
607
+
608
+ def optimistic_locking attribute_name = :version_id
609
+ attribute = integer_attr(attribute_name)
610
+ @optimistic_locking_attr = attribute
611
+ end
612
+
613
+ # @return [Boolean] Returns true if this class is configured to
614
+ # perform optimistic locking.
615
+ def optimistic_locking?
616
+ !!@optimistic_locking_attr
617
+ end
618
+
619
+ @private
620
+ def optimistic_locking_attr
621
+ @optimistic_locking_attr
622
+ end
623
+
624
+ # @return [Hash<String,Attribute>] Returns a hash of all of the
625
+ # configured attributes for this class.
626
+ def attributes
627
+ @attributes ||= {}
628
+ end
629
+
630
+ # @private
631
+ def attribute_for attribute_name, &block
632
+ unless attribute = attributes[attribute_name.to_s]
633
+ raise UndefinedAttributeError.new(attribute_name.to_s)
634
+ end
635
+ block_given? ? yield(attribute) : attribute
636
+ end
637
+
638
+ # @private
639
+ def add_attribute attribute
640
+
641
+ attr_name = attribute.name
642
+
643
+ attributes[attr_name] = attribute
644
+
645
+ # setter
646
+ define_method("#{attr_name}=") do |value|
647
+ self[attr_name] = value
648
+ end
649
+
650
+ # getter
651
+ define_method(attr_name) do
652
+ self[attr_name]
653
+ end
654
+
655
+ # before type-cast getter
656
+ define_method("#{attr_name}_before_type_cast") do
657
+ @_data[attr_name]
658
+ end
659
+
660
+ ## dirty tracking methods
661
+
662
+ define_method("#{attr_name}_changed?") do
663
+ attribute_changed?(attr_name)
664
+ end
665
+
666
+ define_method("#{attr_name}_change") do
667
+ attribute_change(attr_name)
668
+ end
669
+
670
+ define_method("#{attr_name}_was") do
671
+ attribute_was(attr_name)
672
+ end
673
+
674
+ define_method("#{attr_name}_will_change!") do
675
+ attribute_will_change!(attr_name)
676
+ end
677
+
678
+ define_method("reset_#{attr_name}!") do
679
+ reset_attribute!(attr_name)
680
+ end
681
+
682
+ attribute
683
+
684
+ end
685
+
686
+ private
687
+
688
+ def create_impl attributes = {}, create_method = :create, save_method = :save
689
+ if attributes.is_a?(Array)
690
+ attributes.map {|attr| send(create_method, attr) }
691
+ else
692
+ obj = new(attributes)
693
+ obj.send(save_method)
694
+ obj
695
+ end
696
+ end
697
+
698
+ end
699
+ end
700
+ end
701
+ end