aws-sdk-v1 1.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (560) hide show
  1. checksums.yaml +7 -0
  2. data/.yardopts +7 -0
  3. data/LICENSE.txt +12 -0
  4. data/README.md +337 -0
  5. data/bin/aws-rb +179 -0
  6. data/ca-bundle.crt +3554 -0
  7. data/endpoints.json +1671 -0
  8. data/lib/aws-sdk-v1.rb +2 -0
  9. data/lib/aws-sdk.rb +1 -0
  10. data/lib/aws.rb +14 -0
  11. data/lib/aws/api_config/AutoScaling-2011-01-01.yml +1070 -0
  12. data/lib/aws/api_config/CloudFormation-2010-05-15.yml +372 -0
  13. data/lib/aws/api_config/CloudFront-2013-05-12.yml +2448 -0
  14. data/lib/aws/api_config/CloudFront-2013-08-26.yml +2599 -0
  15. data/lib/aws/api_config/CloudFront-2013-09-27.yml +2765 -0
  16. data/lib/aws/api_config/CloudFront-2013-11-11.yml +2886 -0
  17. data/lib/aws/api_config/CloudFront-2013-11-22.yml +2918 -0
  18. data/lib/aws/api_config/CloudFront-2014-01-31.yml +2934 -0
  19. data/lib/aws/api_config/CloudFront-2014-05-31.yml +3100 -0
  20. data/lib/aws/api_config/CloudSearch-2011-02-01.yml +681 -0
  21. data/lib/aws/api_config/CloudSearch-2013-01-01.yml +1164 -0
  22. data/lib/aws/api_config/CloudTrail-2013-11-01.yml +130 -0
  23. data/lib/aws/api_config/CloudWatch-2010-08-01.yml +433 -0
  24. data/lib/aws/api_config/DataPipeline-2012-10-29.yml +422 -0
  25. data/lib/aws/api_config/DirectConnect-2012-10-25.yml +735 -0
  26. data/lib/aws/api_config/DynamoDB-2011-12-05.yml +1168 -0
  27. data/lib/aws/api_config/DynamoDB-2012-08-10.yml +2105 -0
  28. data/lib/aws/api_config/EC2-2013-08-15.yml +4708 -0
  29. data/lib/aws/api_config/EC2-2013-10-01.yml +4726 -0
  30. data/lib/aws/api_config/EC2-2013-10-15.yml +4651 -0
  31. data/lib/aws/api_config/EC2-2014-02-01.yml +4755 -0
  32. data/lib/aws/api_config/EC2-2014-05-01.yml +4812 -0
  33. data/lib/aws/api_config/ELB-2012-06-01.yml +766 -0
  34. data/lib/aws/api_config/EMR-2009-03-31.yml +972 -0
  35. data/lib/aws/api_config/ElastiCache-2013-06-15.yml +1188 -0
  36. data/lib/aws/api_config/ElastiCache-2014-03-24.yml +1375 -0
  37. data/lib/aws/api_config/ElastiCache-2014-07-15.yml +1385 -0
  38. data/lib/aws/api_config/ElasticBeanstalk-2010-12-01.yml +854 -0
  39. data/lib/aws/api_config/ElasticTranscoder-2012-09-25.yml +3082 -0
  40. data/lib/aws/api_config/Glacier-2012-06-01.yml +649 -0
  41. data/lib/aws/api_config/IAM-2010-05-08.yml +1339 -0
  42. data/lib/aws/api_config/ImportExport-2010-06-01.yml +109 -0
  43. data/lib/aws/api_config/Kinesis-2013-12-02.yml +201 -0
  44. data/lib/aws/api_config/OpsWorks-2013-02-18.yml +2025 -0
  45. data/lib/aws/api_config/RDS-2013-05-15.yml +2464 -0
  46. data/lib/aws/api_config/RDS-2013-09-09.yml +2640 -0
  47. data/lib/aws/api_config/Redshift-2012-12-01.yml +2161 -0
  48. data/lib/aws/api_config/Route53-2012-12-12.yml +547 -0
  49. data/lib/aws/api_config/Route53-2013-04-01.yml +889 -0
  50. data/lib/aws/api_config/SNS-2010-03-31.yml +448 -0
  51. data/lib/aws/api_config/SQS-2012-11-05.yml +404 -0
  52. data/lib/aws/api_config/STS-2011-06-15.yml +151 -0
  53. data/lib/aws/api_config/SimpleDB-2009-04-15.yml +306 -0
  54. data/lib/aws/api_config/SimpleEmailService-2010-12-01.yml +346 -0
  55. data/lib/aws/api_config/SimpleWorkflow-2012-01-25.yml +2388 -0
  56. data/lib/aws/api_config/StorageGateway-2012-06-30.yml +748 -0
  57. data/lib/aws/api_config/StorageGateway-2013-06-30.yml +1025 -0
  58. data/lib/aws/api_config/Support-2013-04-15.yml +489 -0
  59. data/lib/aws/auto_scaling.rb +163 -0
  60. data/lib/aws/auto_scaling/activity.rb +102 -0
  61. data/lib/aws/auto_scaling/activity_collection.rb +81 -0
  62. data/lib/aws/auto_scaling/client.rb +48 -0
  63. data/lib/aws/auto_scaling/config.rb +18 -0
  64. data/lib/aws/auto_scaling/errors.rb +22 -0
  65. data/lib/aws/auto_scaling/group.rb +421 -0
  66. data/lib/aws/auto_scaling/group_collection.rb +96 -0
  67. data/lib/aws/auto_scaling/group_options.rb +155 -0
  68. data/lib/aws/auto_scaling/instance.rb +192 -0
  69. data/lib/aws/auto_scaling/instance_collection.rb +63 -0
  70. data/lib/aws/auto_scaling/launch_configuration.rb +162 -0
  71. data/lib/aws/auto_scaling/launch_configuration_collection.rb +160 -0
  72. data/lib/aws/auto_scaling/notification_configuration.rb +89 -0
  73. data/lib/aws/auto_scaling/notification_configuration_collection.rb +183 -0
  74. data/lib/aws/auto_scaling/scaling_policy.rb +142 -0
  75. data/lib/aws/auto_scaling/scaling_policy_collection.rb +72 -0
  76. data/lib/aws/auto_scaling/scaling_policy_options.rb +65 -0
  77. data/lib/aws/auto_scaling/scheduled_action.rb +141 -0
  78. data/lib/aws/auto_scaling/scheduled_action_collection.rb +202 -0
  79. data/lib/aws/auto_scaling/tag.rb +59 -0
  80. data/lib/aws/auto_scaling/tag_collection.rb +114 -0
  81. data/lib/aws/cloud_formation.rb +272 -0
  82. data/lib/aws/cloud_formation/client.rb +48 -0
  83. data/lib/aws/cloud_formation/config.rb +18 -0
  84. data/lib/aws/cloud_formation/errors.rb +22 -0
  85. data/lib/aws/cloud_formation/stack.rb +266 -0
  86. data/lib/aws/cloud_formation/stack_collection.rb +232 -0
  87. data/lib/aws/cloud_formation/stack_event.rb +73 -0
  88. data/lib/aws/cloud_formation/stack_event_collection.rb +47 -0
  89. data/lib/aws/cloud_formation/stack_options.rb +72 -0
  90. data/lib/aws/cloud_formation/stack_output.rb +53 -0
  91. data/lib/aws/cloud_formation/stack_resource.rb +117 -0
  92. data/lib/aws/cloud_formation/stack_resource_collection.rb +83 -0
  93. data/lib/aws/cloud_formation/stack_resource_summary_collection.rb +64 -0
  94. data/lib/aws/cloud_formation/stack_summary_collection.rb +123 -0
  95. data/lib/aws/cloud_front.rb +72 -0
  96. data/lib/aws/cloud_front/client.rb +57 -0
  97. data/lib/aws/cloud_front/config.rb +18 -0
  98. data/lib/aws/cloud_front/errors.rb +22 -0
  99. data/lib/aws/cloud_search.rb +73 -0
  100. data/lib/aws/cloud_search/client.rb +40 -0
  101. data/lib/aws/cloud_search/config.rb +18 -0
  102. data/lib/aws/cloud_search/errors.rb +22 -0
  103. data/lib/aws/cloud_trail.rb +72 -0
  104. data/lib/aws/cloud_trail/client.rb +35 -0
  105. data/lib/aws/cloud_trail/config.rb +18 -0
  106. data/lib/aws/cloud_trail/errors.rb +22 -0
  107. data/lib/aws/cloud_watch.rb +118 -0
  108. data/lib/aws/cloud_watch/alarm.rb +293 -0
  109. data/lib/aws/cloud_watch/alarm_collection.rb +153 -0
  110. data/lib/aws/cloud_watch/alarm_history_item.rb +50 -0
  111. data/lib/aws/cloud_watch/alarm_history_item_collection.rb +84 -0
  112. data/lib/aws/cloud_watch/client.rb +40 -0
  113. data/lib/aws/cloud_watch/config.rb +18 -0
  114. data/lib/aws/cloud_watch/errors.rb +22 -0
  115. data/lib/aws/cloud_watch/metric.rb +135 -0
  116. data/lib/aws/cloud_watch/metric_alarm_collection.rb +160 -0
  117. data/lib/aws/cloud_watch/metric_collection.rb +129 -0
  118. data/lib/aws/cloud_watch/metric_statistics.rb +69 -0
  119. data/lib/aws/core.rb +716 -0
  120. data/lib/aws/core/async_handle.rb +90 -0
  121. data/lib/aws/core/cacheable.rb +77 -0
  122. data/lib/aws/core/client.rb +787 -0
  123. data/lib/aws/core/collection.rb +263 -0
  124. data/lib/aws/core/collection/simple.rb +82 -0
  125. data/lib/aws/core/collection/with_limit_and_next_token.rb +71 -0
  126. data/lib/aws/core/collection/with_next_token.rb +97 -0
  127. data/lib/aws/core/configuration.rb +542 -0
  128. data/lib/aws/core/credential_providers.rb +639 -0
  129. data/lib/aws/core/data.rb +247 -0
  130. data/lib/aws/core/deprecations.rb +84 -0
  131. data/lib/aws/core/endpoints.rb +37 -0
  132. data/lib/aws/core/http/connection_pool.rb +369 -0
  133. data/lib/aws/core/http/curb_handler.rb +148 -0
  134. data/lib/aws/core/http/handler.rb +89 -0
  135. data/lib/aws/core/http/net_http_handler.rb +144 -0
  136. data/lib/aws/core/http/patch.rb +102 -0
  137. data/lib/aws/core/http/request.rb +259 -0
  138. data/lib/aws/core/http/response.rb +81 -0
  139. data/lib/aws/core/indifferent_hash.rb +88 -0
  140. data/lib/aws/core/inflection.rb +56 -0
  141. data/lib/aws/core/ini_parser.rb +42 -0
  142. data/lib/aws/core/json_client.rb +47 -0
  143. data/lib/aws/core/json_parser.rb +76 -0
  144. data/lib/aws/core/json_request_builder.rb +35 -0
  145. data/lib/aws/core/json_response_parser.rb +79 -0
  146. data/lib/aws/core/lazy_error_classes.rb +108 -0
  147. data/lib/aws/core/log_formatter.rb +428 -0
  148. data/lib/aws/core/managed_file.rb +32 -0
  149. data/lib/aws/core/meta_utils.rb +45 -0
  150. data/lib/aws/core/model.rb +62 -0
  151. data/lib/aws/core/naming.rb +30 -0
  152. data/lib/aws/core/option_grammar.rb +738 -0
  153. data/lib/aws/core/options/json_serializer.rb +82 -0
  154. data/lib/aws/core/options/validator.rb +155 -0
  155. data/lib/aws/core/options/xml_serializer.rb +118 -0
  156. data/lib/aws/core/page_result.rb +75 -0
  157. data/lib/aws/core/policy.rb +941 -0
  158. data/lib/aws/core/query_client.rb +41 -0
  159. data/lib/aws/core/query_error_parser.rb +24 -0
  160. data/lib/aws/core/query_request_builder.rb +47 -0
  161. data/lib/aws/core/query_response_parser.rb +35 -0
  162. data/lib/aws/core/region.rb +85 -0
  163. data/lib/aws/core/region_collection.rb +80 -0
  164. data/lib/aws/core/resource.rb +413 -0
  165. data/lib/aws/core/resource_cache.rb +40 -0
  166. data/lib/aws/core/response.rb +215 -0
  167. data/lib/aws/core/response_cache.rb +50 -0
  168. data/lib/aws/core/rest_error_parser.rb +24 -0
  169. data/lib/aws/core/rest_json_client.rb +40 -0
  170. data/lib/aws/core/rest_request_builder.rb +154 -0
  171. data/lib/aws/core/rest_response_parser.rb +66 -0
  172. data/lib/aws/core/rest_xml_client.rb +47 -0
  173. data/lib/aws/core/service_interface.rb +83 -0
  174. data/lib/aws/core/signers/base.rb +46 -0
  175. data/lib/aws/core/signers/cloud_front.rb +56 -0
  176. data/lib/aws/core/signers/s3.rb +159 -0
  177. data/lib/aws/core/signers/version_2.rb +72 -0
  178. data/lib/aws/core/signers/version_3.rb +86 -0
  179. data/lib/aws/core/signers/version_3_https.rb +61 -0
  180. data/lib/aws/core/signers/version_4.rb +228 -0
  181. data/lib/aws/core/signers/version_4/chunk_signed_stream.rb +191 -0
  182. data/lib/aws/core/uri_escape.rb +44 -0
  183. data/lib/aws/core/xml/frame.rb +245 -0
  184. data/lib/aws/core/xml/frame_stack.rb +85 -0
  185. data/lib/aws/core/xml/grammar.rb +307 -0
  186. data/lib/aws/core/xml/parser.rb +70 -0
  187. data/lib/aws/core/xml/root_frame.rb +65 -0
  188. data/lib/aws/core/xml/sax_handlers/libxml.rb +47 -0
  189. data/lib/aws/core/xml/sax_handlers/nokogiri.rb +56 -0
  190. data/lib/aws/core/xml/sax_handlers/ox.rb +41 -0
  191. data/lib/aws/core/xml/sax_handlers/rexml.rb +47 -0
  192. data/lib/aws/core/xml/stub.rb +123 -0
  193. data/lib/aws/data_pipeline.rb +72 -0
  194. data/lib/aws/data_pipeline/client.rb +36 -0
  195. data/lib/aws/data_pipeline/config.rb +18 -0
  196. data/lib/aws/data_pipeline/errors.rb +20 -0
  197. data/lib/aws/direct_connect.rb +73 -0
  198. data/lib/aws/direct_connect/client.rb +36 -0
  199. data/lib/aws/direct_connect/config.rb +18 -0
  200. data/lib/aws/direct_connect/errors.rb +22 -0
  201. data/lib/aws/dynamo_db.rb +230 -0
  202. data/lib/aws/dynamo_db/attribute_collection.rb +456 -0
  203. data/lib/aws/dynamo_db/batch_get.rb +213 -0
  204. data/lib/aws/dynamo_db/batch_write.rb +254 -0
  205. data/lib/aws/dynamo_db/binary.rb +35 -0
  206. data/lib/aws/dynamo_db/client.rb +129 -0
  207. data/lib/aws/dynamo_db/client/v20111205.rb +1266 -0
  208. data/lib/aws/dynamo_db/client/v20120810.rb +1409 -0
  209. data/lib/aws/dynamo_db/client_v2.rb +44 -0
  210. data/lib/aws/dynamo_db/config.rb +24 -0
  211. data/lib/aws/dynamo_db/errors.rb +20 -0
  212. data/lib/aws/dynamo_db/expectations.rb +40 -0
  213. data/lib/aws/dynamo_db/item.rb +133 -0
  214. data/lib/aws/dynamo_db/item_collection.rb +856 -0
  215. data/lib/aws/dynamo_db/item_data.rb +31 -0
  216. data/lib/aws/dynamo_db/keys.rb +41 -0
  217. data/lib/aws/dynamo_db/primary_key_element.rb +48 -0
  218. data/lib/aws/dynamo_db/resource.rb +33 -0
  219. data/lib/aws/dynamo_db/table.rb +492 -0
  220. data/lib/aws/dynamo_db/table_collection.rb +165 -0
  221. data/lib/aws/dynamo_db/types.rb +111 -0
  222. data/lib/aws/ec2.rb +428 -0
  223. data/lib/aws/ec2/attachment.rb +135 -0
  224. data/lib/aws/ec2/attachment_collection.rb +54 -0
  225. data/lib/aws/ec2/availability_zone.rb +86 -0
  226. data/lib/aws/ec2/availability_zone_collection.rb +43 -0
  227. data/lib/aws/ec2/block_device_mappings.rb +53 -0
  228. data/lib/aws/ec2/client.rb +154 -0
  229. data/lib/aws/ec2/collection.rb +36 -0
  230. data/lib/aws/ec2/config.rb +21 -0
  231. data/lib/aws/ec2/customer_gateway.rb +90 -0
  232. data/lib/aws/ec2/customer_gateway_collection.rb +73 -0
  233. data/lib/aws/ec2/dhcp_options.rb +106 -0
  234. data/lib/aws/ec2/dhcp_options_collection.rb +87 -0
  235. data/lib/aws/ec2/elastic_ip.rb +209 -0
  236. data/lib/aws/ec2/elastic_ip_collection.rb +93 -0
  237. data/lib/aws/ec2/errors.rb +32 -0
  238. data/lib/aws/ec2/export_task.rb +120 -0
  239. data/lib/aws/ec2/export_task_collection.rb +67 -0
  240. data/lib/aws/ec2/filtered_collection.rb +87 -0
  241. data/lib/aws/ec2/has_permissions.rb +44 -0
  242. data/lib/aws/ec2/image.rb +270 -0
  243. data/lib/aws/ec2/image_collection.rb +219 -0
  244. data/lib/aws/ec2/instance.rb +803 -0
  245. data/lib/aws/ec2/instance_collection.rb +402 -0
  246. data/lib/aws/ec2/internet_gateway.rb +122 -0
  247. data/lib/aws/ec2/internet_gateway/attachment.rb +78 -0
  248. data/lib/aws/ec2/internet_gateway_collection.rb +54 -0
  249. data/lib/aws/ec2/key_pair.rb +82 -0
  250. data/lib/aws/ec2/key_pair_collection.rb +99 -0
  251. data/lib/aws/ec2/network_acl.rb +256 -0
  252. data/lib/aws/ec2/network_acl/association.rb +56 -0
  253. data/lib/aws/ec2/network_acl/entry.rb +147 -0
  254. data/lib/aws/ec2/network_acl_collection.rb +64 -0
  255. data/lib/aws/ec2/network_interface.rb +237 -0
  256. data/lib/aws/ec2/network_interface/attachment.rb +100 -0
  257. data/lib/aws/ec2/network_interface_collection.rb +103 -0
  258. data/lib/aws/ec2/permission_collection.rb +174 -0
  259. data/lib/aws/ec2/region.rb +106 -0
  260. data/lib/aws/ec2/region_collection.rb +51 -0
  261. data/lib/aws/ec2/reserved_instances.rb +57 -0
  262. data/lib/aws/ec2/reserved_instances_collection.rb +40 -0
  263. data/lib/aws/ec2/reserved_instances_offering.rb +60 -0
  264. data/lib/aws/ec2/reserved_instances_offering_collection.rb +45 -0
  265. data/lib/aws/ec2/resource.rb +161 -0
  266. data/lib/aws/ec2/resource_tag_collection.rb +211 -0
  267. data/lib/aws/ec2/route_table.rb +205 -0
  268. data/lib/aws/ec2/route_table/association.rb +119 -0
  269. data/lib/aws/ec2/route_table/route.rb +119 -0
  270. data/lib/aws/ec2/route_table_collection.rb +72 -0
  271. data/lib/aws/ec2/security_group.rb +482 -0
  272. data/lib/aws/ec2/security_group/ip_permission.rb +135 -0
  273. data/lib/aws/ec2/security_group/ip_permission_collection.rb +82 -0
  274. data/lib/aws/ec2/security_group_collection.rb +133 -0
  275. data/lib/aws/ec2/snapshot.rb +143 -0
  276. data/lib/aws/ec2/snapshot_collection.rb +131 -0
  277. data/lib/aws/ec2/subnet.rb +161 -0
  278. data/lib/aws/ec2/subnet_collection.rb +119 -0
  279. data/lib/aws/ec2/tag.rb +81 -0
  280. data/lib/aws/ec2/tag_collection.rb +107 -0
  281. data/lib/aws/ec2/tagged_collection.rb +67 -0
  282. data/lib/aws/ec2/tagged_item.rb +85 -0
  283. data/lib/aws/ec2/volume.rb +185 -0
  284. data/lib/aws/ec2/volume_collection.rb +102 -0
  285. data/lib/aws/ec2/vpc.rb +174 -0
  286. data/lib/aws/ec2/vpc_collection.rb +70 -0
  287. data/lib/aws/ec2/vpn_connection.rb +99 -0
  288. data/lib/aws/ec2/vpn_connection/telemetry.rb +49 -0
  289. data/lib/aws/ec2/vpn_connection_collection.rb +96 -0
  290. data/lib/aws/ec2/vpn_gateway.rb +123 -0
  291. data/lib/aws/ec2/vpn_gateway/attachment.rb +45 -0
  292. data/lib/aws/ec2/vpn_gateway_collection.rb +77 -0
  293. data/lib/aws/elastic_beanstalk.rb +49 -0
  294. data/lib/aws/elastic_beanstalk/client.rb +36 -0
  295. data/lib/aws/elastic_beanstalk/config.rb +18 -0
  296. data/lib/aws/elastic_beanstalk/errors.rb +22 -0
  297. data/lib/aws/elastic_transcoder.rb +29 -0
  298. data/lib/aws/elastic_transcoder/client.rb +48 -0
  299. data/lib/aws/elastic_transcoder/config.rb +18 -0
  300. data/lib/aws/elastic_transcoder/errors.rb +23 -0
  301. data/lib/aws/elasticache.rb +49 -0
  302. data/lib/aws/elasticache/client.rb +41 -0
  303. data/lib/aws/elasticache/config.rb +18 -0
  304. data/lib/aws/elasticache/errors.rb +22 -0
  305. data/lib/aws/elb.rb +66 -0
  306. data/lib/aws/elb/availability_zone_collection.rb +138 -0
  307. data/lib/aws/elb/backend_server_policy_collection.rb +139 -0
  308. data/lib/aws/elb/client.rb +35 -0
  309. data/lib/aws/elb/config.rb +18 -0
  310. data/lib/aws/elb/errors.rb +26 -0
  311. data/lib/aws/elb/instance_collection.rb +168 -0
  312. data/lib/aws/elb/listener.rb +190 -0
  313. data/lib/aws/elb/listener_collection.rb +113 -0
  314. data/lib/aws/elb/listener_opts.rb +45 -0
  315. data/lib/aws/elb/load_balancer.rb +280 -0
  316. data/lib/aws/elb/load_balancer_collection.rb +146 -0
  317. data/lib/aws/elb/load_balancer_policy.rb +93 -0
  318. data/lib/aws/elb/load_balancer_policy_collection.rb +208 -0
  319. data/lib/aws/emr.rb +87 -0
  320. data/lib/aws/emr/client.rb +35 -0
  321. data/lib/aws/emr/config.rb +18 -0
  322. data/lib/aws/emr/errors.rb +22 -0
  323. data/lib/aws/emr/instance_group.rb +138 -0
  324. data/lib/aws/emr/instance_group_collection.rb +82 -0
  325. data/lib/aws/emr/job_flow.rb +307 -0
  326. data/lib/aws/emr/job_flow_collection.rb +183 -0
  327. data/lib/aws/errors.rb +162 -0
  328. data/lib/aws/glacier.rb +79 -0
  329. data/lib/aws/glacier/archive.rb +56 -0
  330. data/lib/aws/glacier/archive_collection.rb +146 -0
  331. data/lib/aws/glacier/client.rb +49 -0
  332. data/lib/aws/glacier/config.rb +19 -0
  333. data/lib/aws/glacier/errors.rb +22 -0
  334. data/lib/aws/glacier/resource.rb +30 -0
  335. data/lib/aws/glacier/vault.rb +145 -0
  336. data/lib/aws/glacier/vault_collection.rb +75 -0
  337. data/lib/aws/glacier/vault_notification_configuration.rb +29 -0
  338. data/lib/aws/iam.rb +408 -0
  339. data/lib/aws/iam/access_key.rb +185 -0
  340. data/lib/aws/iam/access_key_collection.rb +128 -0
  341. data/lib/aws/iam/account_alias_collection.rb +79 -0
  342. data/lib/aws/iam/client.rb +49 -0
  343. data/lib/aws/iam/collection.rb +83 -0
  344. data/lib/aws/iam/config.rb +18 -0
  345. data/lib/aws/iam/errors.rb +22 -0
  346. data/lib/aws/iam/group.rb +111 -0
  347. data/lib/aws/iam/group_collection.rb +132 -0
  348. data/lib/aws/iam/group_policy_collection.rb +47 -0
  349. data/lib/aws/iam/group_user_collection.rb +84 -0
  350. data/lib/aws/iam/login_profile.rb +111 -0
  351. data/lib/aws/iam/mfa_device.rb +52 -0
  352. data/lib/aws/iam/mfa_device_collection.rb +127 -0
  353. data/lib/aws/iam/policy.rb +46 -0
  354. data/lib/aws/iam/policy_collection.rb +188 -0
  355. data/lib/aws/iam/resource.rb +62 -0
  356. data/lib/aws/iam/server_certificate.rb +148 -0
  357. data/lib/aws/iam/server_certificate_collection.rb +138 -0
  358. data/lib/aws/iam/signing_certificate.rb +186 -0
  359. data/lib/aws/iam/signing_certificate_collection.rb +131 -0
  360. data/lib/aws/iam/user.rb +200 -0
  361. data/lib/aws/iam/user_collection.rb +133 -0
  362. data/lib/aws/iam/user_group_collection.rb +98 -0
  363. data/lib/aws/iam/user_policy.rb +90 -0
  364. data/lib/aws/iam/user_policy_collection.rb +45 -0
  365. data/lib/aws/iam/virtual_mfa_device.rb +139 -0
  366. data/lib/aws/iam/virtual_mfa_device_collection.rb +73 -0
  367. data/lib/aws/import_export.rb +73 -0
  368. data/lib/aws/import_export/client.rb +35 -0
  369. data/lib/aws/import_export/config.rb +19 -0
  370. data/lib/aws/import_export/errors.rb +22 -0
  371. data/lib/aws/kinesis.rb +53 -0
  372. data/lib/aws/kinesis/client.rb +35 -0
  373. data/lib/aws/kinesis/config.rb +18 -0
  374. data/lib/aws/kinesis/errors.rb +20 -0
  375. data/lib/aws/ops_works.rb +29 -0
  376. data/lib/aws/ops_works/client.rb +35 -0
  377. data/lib/aws/ops_works/config.rb +18 -0
  378. data/lib/aws/ops_works/errors.rb +20 -0
  379. data/lib/aws/rails.rb +195 -0
  380. data/lib/aws/rds.rb +70 -0
  381. data/lib/aws/rds/client.rb +42 -0
  382. data/lib/aws/rds/config.rb +18 -0
  383. data/lib/aws/rds/db_instance.rb +215 -0
  384. data/lib/aws/rds/db_instance_collection.rb +75 -0
  385. data/lib/aws/rds/db_snapshot.rb +163 -0
  386. data/lib/aws/rds/db_snapshot_collection.rb +89 -0
  387. data/lib/aws/rds/errors.rb +22 -0
  388. data/lib/aws/record.rb +139 -0
  389. data/lib/aws/record/abstract_base.rb +689 -0
  390. data/lib/aws/record/attributes.rb +388 -0
  391. data/lib/aws/record/conversion.rb +38 -0
  392. data/lib/aws/record/dirty_tracking.rb +287 -0
  393. data/lib/aws/record/errors.rb +143 -0
  394. data/lib/aws/record/exceptions.rb +51 -0
  395. data/lib/aws/record/hash_model.rb +204 -0
  396. data/lib/aws/record/hash_model/attributes.rb +195 -0
  397. data/lib/aws/record/hash_model/finder_methods.rb +172 -0
  398. data/lib/aws/record/hash_model/scope.rb +108 -0
  399. data/lib/aws/record/model.rb +453 -0
  400. data/lib/aws/record/model/attributes.rb +377 -0
  401. data/lib/aws/record/model/finder_methods.rb +232 -0
  402. data/lib/aws/record/model/scope.rb +212 -0
  403. data/lib/aws/record/naming.rb +31 -0
  404. data/lib/aws/record/scope.rb +203 -0
  405. data/lib/aws/record/validations.rb +694 -0
  406. data/lib/aws/record/validator.rb +246 -0
  407. data/lib/aws/record/validators/acceptance.rb +49 -0
  408. data/lib/aws/record/validators/block.rb +36 -0
  409. data/lib/aws/record/validators/confirmation.rb +41 -0
  410. data/lib/aws/record/validators/count.rb +106 -0
  411. data/lib/aws/record/validators/exclusion.rb +41 -0
  412. data/lib/aws/record/validators/format.rb +55 -0
  413. data/lib/aws/record/validators/inclusion.rb +54 -0
  414. data/lib/aws/record/validators/length.rb +105 -0
  415. data/lib/aws/record/validators/method.rb +31 -0
  416. data/lib/aws/record/validators/numericality.rb +136 -0
  417. data/lib/aws/record/validators/presence.rb +43 -0
  418. data/lib/aws/redshift.rb +51 -0
  419. data/lib/aws/redshift/client.rb +35 -0
  420. data/lib/aws/redshift/config.rb +18 -0
  421. data/lib/aws/redshift/errors.rb +22 -0
  422. data/lib/aws/route_53.rb +86 -0
  423. data/lib/aws/route_53/change_batch.rb +161 -0
  424. data/lib/aws/route_53/change_info.rb +72 -0
  425. data/lib/aws/route_53/client.rb +38 -0
  426. data/lib/aws/route_53/config.rb +18 -0
  427. data/lib/aws/route_53/errors.rb +22 -0
  428. data/lib/aws/route_53/hosted_zone.rb +134 -0
  429. data/lib/aws/route_53/hosted_zone_collection.rb +101 -0
  430. data/lib/aws/route_53/resource_record_set.rb +251 -0
  431. data/lib/aws/route_53/resource_record_set_collection.rb +110 -0
  432. data/lib/aws/s3.rb +156 -0
  433. data/lib/aws/s3/access_control_list.rb +265 -0
  434. data/lib/aws/s3/acl_object.rb +264 -0
  435. data/lib/aws/s3/acl_options.rb +204 -0
  436. data/lib/aws/s3/bucket.rb +742 -0
  437. data/lib/aws/s3/bucket_collection.rb +162 -0
  438. data/lib/aws/s3/bucket_lifecycle_configuration.rb +473 -0
  439. data/lib/aws/s3/bucket_tag_collection.rb +111 -0
  440. data/lib/aws/s3/bucket_version_collection.rb +79 -0
  441. data/lib/aws/s3/cipher_io.rb +120 -0
  442. data/lib/aws/s3/client.rb +2067 -0
  443. data/lib/aws/s3/client/xml.rb +266 -0
  444. data/lib/aws/s3/config.rb +48 -0
  445. data/lib/aws/s3/cors_rule.rb +108 -0
  446. data/lib/aws/s3/cors_rule_collection.rb +194 -0
  447. data/lib/aws/s3/data_options.rb +191 -0
  448. data/lib/aws/s3/encryption_utils.rb +146 -0
  449. data/lib/aws/s3/errors.rb +94 -0
  450. data/lib/aws/s3/multipart_upload.rb +353 -0
  451. data/lib/aws/s3/multipart_upload_collection.rb +76 -0
  452. data/lib/aws/s3/object_collection.rb +353 -0
  453. data/lib/aws/s3/object_metadata.rb +103 -0
  454. data/lib/aws/s3/object_upload_collection.rb +77 -0
  455. data/lib/aws/s3/object_version.rb +154 -0
  456. data/lib/aws/s3/object_version_collection.rb +89 -0
  457. data/lib/aws/s3/paginated_collection.rb +75 -0
  458. data/lib/aws/s3/policy.rb +74 -0
  459. data/lib/aws/s3/prefix_and_delimiter_collection.rb +47 -0
  460. data/lib/aws/s3/prefixed_collection.rb +85 -0
  461. data/lib/aws/s3/presign_v4.rb +136 -0
  462. data/lib/aws/s3/presigned_post.rb +554 -0
  463. data/lib/aws/s3/request.rb +62 -0
  464. data/lib/aws/s3/s3_object.rb +1784 -0
  465. data/lib/aws/s3/tree.rb +116 -0
  466. data/lib/aws/s3/tree/branch_node.rb +68 -0
  467. data/lib/aws/s3/tree/child_collection.rb +104 -0
  468. data/lib/aws/s3/tree/leaf_node.rb +94 -0
  469. data/lib/aws/s3/tree/node.rb +22 -0
  470. data/lib/aws/s3/tree/parent.rb +87 -0
  471. data/lib/aws/s3/uploaded_part.rb +82 -0
  472. data/lib/aws/s3/uploaded_part_collection.rb +84 -0
  473. data/lib/aws/s3/website_configuration.rb +102 -0
  474. data/lib/aws/simple_db.rb +218 -0
  475. data/lib/aws/simple_db/attribute.rb +156 -0
  476. data/lib/aws/simple_db/attribute_collection.rb +240 -0
  477. data/lib/aws/simple_db/client.rb +67 -0
  478. data/lib/aws/simple_db/config.rb +20 -0
  479. data/lib/aws/simple_db/consistent_read_option.rb +42 -0
  480. data/lib/aws/simple_db/delete_attributes.rb +62 -0
  481. data/lib/aws/simple_db/domain.rb +123 -0
  482. data/lib/aws/simple_db/domain_collection.rb +86 -0
  483. data/lib/aws/simple_db/domain_metadata.rb +110 -0
  484. data/lib/aws/simple_db/errors.rb +55 -0
  485. data/lib/aws/simple_db/expect_condition_option.rb +45 -0
  486. data/lib/aws/simple_db/item.rb +93 -0
  487. data/lib/aws/simple_db/item_collection.rb +654 -0
  488. data/lib/aws/simple_db/item_data.rb +73 -0
  489. data/lib/aws/simple_db/put_attributes.rb +60 -0
  490. data/lib/aws/simple_email_service.rb +443 -0
  491. data/lib/aws/simple_email_service/client.rb +37 -0
  492. data/lib/aws/simple_email_service/config.rb +18 -0
  493. data/lib/aws/simple_email_service/email_address_collection.rb +69 -0
  494. data/lib/aws/simple_email_service/errors.rb +22 -0
  495. data/lib/aws/simple_email_service/identity.rb +230 -0
  496. data/lib/aws/simple_email_service/identity_collection.rb +81 -0
  497. data/lib/aws/simple_email_service/quotas.rb +66 -0
  498. data/lib/aws/simple_workflow.rb +227 -0
  499. data/lib/aws/simple_workflow/activity_task.rb +178 -0
  500. data/lib/aws/simple_workflow/activity_task_collection.rb +123 -0
  501. data/lib/aws/simple_workflow/activity_type.rb +131 -0
  502. data/lib/aws/simple_workflow/activity_type_collection.rb +93 -0
  503. data/lib/aws/simple_workflow/client.rb +69 -0
  504. data/lib/aws/simple_workflow/config.rb +18 -0
  505. data/lib/aws/simple_workflow/count.rb +49 -0
  506. data/lib/aws/simple_workflow/decision_task.rb +603 -0
  507. data/lib/aws/simple_workflow/decision_task_collection.rb +223 -0
  508. data/lib/aws/simple_workflow/domain.rb +122 -0
  509. data/lib/aws/simple_workflow/domain_collection.rb +169 -0
  510. data/lib/aws/simple_workflow/errors.rb +20 -0
  511. data/lib/aws/simple_workflow/history_event.rb +276 -0
  512. data/lib/aws/simple_workflow/history_event_collection.rb +76 -0
  513. data/lib/aws/simple_workflow/option_formatters.rb +82 -0
  514. data/lib/aws/simple_workflow/resource.rb +94 -0
  515. data/lib/aws/simple_workflow/type.rb +89 -0
  516. data/lib/aws/simple_workflow/type_collection.rb +140 -0
  517. data/lib/aws/simple_workflow/workflow_execution.rb +384 -0
  518. data/lib/aws/simple_workflow/workflow_execution_collection.rb +617 -0
  519. data/lib/aws/simple_workflow/workflow_type.rb +177 -0
  520. data/lib/aws/simple_workflow/workflow_type_collection.rb +91 -0
  521. data/lib/aws/sns.rb +76 -0
  522. data/lib/aws/sns/client.rb +35 -0
  523. data/lib/aws/sns/config.rb +18 -0
  524. data/lib/aws/sns/errors.rb +22 -0
  525. data/lib/aws/sns/has_delivery_policy.rb +68 -0
  526. data/lib/aws/sns/message.rb +204 -0
  527. data/lib/aws/sns/originators/from_auto_scaling.rb +68 -0
  528. data/lib/aws/sns/policy.rb +47 -0
  529. data/lib/aws/sns/subscription.rb +165 -0
  530. data/lib/aws/sns/subscription_collection.rb +78 -0
  531. data/lib/aws/sns/topic.rb +403 -0
  532. data/lib/aws/sns/topic_collection.rb +62 -0
  533. data/lib/aws/sns/topic_subscription_collection.rb +54 -0
  534. data/lib/aws/sqs.rb +80 -0
  535. data/lib/aws/sqs/client.rb +53 -0
  536. data/lib/aws/sqs/config.rb +20 -0
  537. data/lib/aws/sqs/errors.rb +125 -0
  538. data/lib/aws/sqs/policy.rb +48 -0
  539. data/lib/aws/sqs/queue.rb +856 -0
  540. data/lib/aws/sqs/queue_collection.rb +186 -0
  541. data/lib/aws/sqs/received_message.rb +190 -0
  542. data/lib/aws/sqs/received_sns_message.rb +116 -0
  543. data/lib/aws/storage_gateway.rb +72 -0
  544. data/lib/aws/storage_gateway/client.rb +42 -0
  545. data/lib/aws/storage_gateway/config.rb +18 -0
  546. data/lib/aws/storage_gateway/errors.rb +22 -0
  547. data/lib/aws/sts.rb +164 -0
  548. data/lib/aws/sts/client.rb +55 -0
  549. data/lib/aws/sts/config.rb +18 -0
  550. data/lib/aws/sts/errors.rb +22 -0
  551. data/lib/aws/sts/federated_session.rb +56 -0
  552. data/lib/aws/sts/policy.rb +30 -0
  553. data/lib/aws/sts/session.rb +48 -0
  554. data/lib/aws/support.rb +29 -0
  555. data/lib/aws/support/client.rb +35 -0
  556. data/lib/aws/support/config.rb +18 -0
  557. data/lib/aws/support/errors.rb +20 -0
  558. data/lib/aws/version.rb +17 -0
  559. data/rails/init.rb +15 -0
  560. metadata +634 -0
@@ -0,0 +1,55 @@
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 SimpleDB
16
+
17
+ # This module contains exception classes for each of the error
18
+ # types that SimpleDB can return. You can use these classes to
19
+ # rescue specific errors, for example:
20
+ #
21
+ # begin
22
+ # SimpleDB.new.domains.mydomain.
23
+ # items["foo"].attributes.set(:color => "red")
24
+ # rescue SimpleDB::Errors::NoSuchDomain => e
25
+ # SimpleDB.new.domians.create("mydomain")
26
+ # retry
27
+ # end
28
+ #
29
+ # Each exception has:
30
+ #
31
+ # * `code`: returns the error code as a string.
32
+ # * `box_usage`: returns the box usage for the operation.
33
+ #
34
+ # All errors raised as a result of error responses from the
35
+ # service are instances of either {ClientError} or {ServerError}.
36
+ # @api private
37
+ module Errors
38
+
39
+ # @api private
40
+ GRAMMAR = Core::XML::Grammar.customize do
41
+ element("Errors") do
42
+ ignore
43
+ element("Error") do
44
+ ignore
45
+ element("BoxUsage") { float_value }
46
+ end
47
+ end
48
+ end
49
+
50
+ extend Core::LazyErrorClasses
51
+
52
+ end
53
+
54
+ end
55
+ end
@@ -0,0 +1,45 @@
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 SimpleDB
16
+
17
+ # @api private
18
+ module ExpectConditionOption
19
+
20
+ # @api private
21
+ protected
22
+ def expect_condition_opts(opts)
23
+ expected = []
24
+ opts.each do |name, value|
25
+ case name
26
+ when :if
27
+ (expected_name, expected_value) = value.to_a.first
28
+ expected << {
29
+ :name => expected_name.to_s,
30
+ :value => expected_value
31
+ }
32
+ when :unless, :unless_exists
33
+ expected << {
34
+ :name => value.to_s,
35
+ :exists => false
36
+ }
37
+ end
38
+ end
39
+ expected.empty? ? {} : expected.first
40
+ end
41
+
42
+ end
43
+
44
+ end
45
+ end
@@ -0,0 +1,93 @@
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 SimpleDB
16
+
17
+ # Represents a single item in a SimpleDB domain. You can use
18
+ # this class to delete the item or get its data. You can also
19
+ # use it to access the {AttributeCollection} for the item in
20
+ # order to add, remove, or read the item's attributes.
21
+ #
22
+ # item = AWS::SimpleDB.new.domains['mydomain'].items['item-id']
23
+ #
24
+ class Item
25
+
26
+ include Core::Model
27
+ include ExpectConditionOption
28
+ include ConsistentReadOption
29
+
30
+ # @param [Domain] domain The domain the item belongs to
31
+ # @param [String] name The name of the item in SimpleDB.
32
+ # @param [Hash] options
33
+ def initialize domain, name, options = {}
34
+ @domain = domain
35
+ @name = name
36
+ super
37
+ end
38
+
39
+ # @return [Domain] The domain this item belongs to.
40
+ attr_reader :domain
41
+
42
+ # @return [String] The item name.
43
+ attr_reader :name
44
+
45
+ # @return [AttributeCollection] A collection representing all attributes
46
+ # for this item.
47
+ def attributes
48
+ AttributeCollection.new(self)
49
+ end
50
+
51
+ # Deletes the item and all of its attributes from SimpleDB.
52
+ # @param [Hash] options
53
+ # @option options [Hash] :if Pass a hash with a single key (attribute
54
+ # name) and a single value (the attribute value). This causes the
55
+ # delete to become conditional.
56
+ # @option options [String,Symbol] :unless Pass an attribute name. This
57
+ # causes the delete to become conditional on that attribute not
58
+ # existing.
59
+ # @return [nil]
60
+ def delete options = {}
61
+ delete_opts = {}
62
+ delete_opts[:domain_name] = domain.name
63
+ delete_opts[:item_name] = name
64
+ delete_opts[:expected] = expect_condition_opts(options)
65
+ delete_opts.delete(:expected) if delete_opts[:expected].empty?
66
+ client.delete_attributes(delete_opts)
67
+ nil
68
+ end
69
+
70
+ # Returns all of the item's attributes in an {ItemData} instance.
71
+ # @return [ItemData] An object with all of the loaded attribute names
72
+ # and values for this item.
73
+ def data options = {}
74
+ get_opts = {}
75
+ get_opts[:domain_name] = domain.name
76
+ get_opts[:item_name] = name
77
+ get_opts[:consistent_read] = consistent_read(options)
78
+ r = client.get_attributes(get_opts)
79
+ ItemData.new(:name => name, :domain => domain, :response_object => r.data)
80
+ end
81
+
82
+ def == other
83
+ other.is_a?(Item) and
84
+ other.domain == domain and
85
+ other.name == name
86
+ end
87
+
88
+ alias_method :eql?, :==
89
+
90
+ end
91
+
92
+ end
93
+ end
@@ -0,0 +1,654 @@
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 SimpleDB
16
+
17
+ # Represents a collection of items in a SimpleDB domain.
18
+ class ItemCollection
19
+
20
+ # Identifies quoted regions in the string, giving access to
21
+ # the regions before and after each quoted region, for example:
22
+ # "? ? `foo?``bar?` ? 'foo?' ?".scan(OUTSIDE_QUOTES_REGEX)
23
+ # # => [["? ? ", "`foo?``bar?`", " ? "], ["", "'foo?'", " ?"]]
24
+ # @api private
25
+ OUTSIDE_QUOTES_REGEX = Regexp.compile(
26
+ '([^\'"`]*)(`(?:[^`]*(?:``))*[^`]*`|' +
27
+ '\'(?:[^\']*(?:\'\'))*[^\']*\'|' +
28
+ '"(?:[^"]*(?:""))*[^"]*")([^\'`"]*)'
29
+ )
30
+
31
+ include ConsistentReadOption
32
+
33
+ include Core::Collection::WithLimitAndNextToken
34
+
35
+ # @return [Domain] The domain the items belong to.
36
+ attr_reader :domain
37
+
38
+ # @api private
39
+ attr_reader :output_list
40
+
41
+ # @api private
42
+ attr_reader :conditions
43
+
44
+ # @api private
45
+ attr_reader :sort_instructions
46
+
47
+ # @param [Domain] domain The domain that you want an item collection for.
48
+ # @return [ItemCollection]
49
+ def initialize domain, options = {}
50
+ @domain = domain
51
+ @output_list = options[:output_list] || 'itemName()'
52
+ @conditions = options[:conditions] || []
53
+ @sort_instructions = options[:sort_instructions]
54
+ @not_null_attribute = options[:not_null_attribute]
55
+ @limit = options[:limit]
56
+ super
57
+ end
58
+
59
+ # Creates a new item in SimpleDB with the given attributes:
60
+ #
61
+ # @example
62
+ #
63
+ # domain.items.create('shirt', {
64
+ # 'colors' => ['red', 'blue'],
65
+ # 'category' => 'clearance'})
66
+ #
67
+ # @overload create(item_name, attributes)
68
+ # @param [String] item_name The name of the item as you want it stored
69
+ # in SimpleDB.
70
+ # @param [Hash] attributes A hash of attribute names and values
71
+ # you want to store in SimpleDB.
72
+ # @return [Item] Returns a reference to the object that was created.
73
+ def create item_name, *args
74
+ item = self[item_name]
75
+ item.attributes.replace(*args)
76
+ item
77
+ end
78
+
79
+ # Returns an item with the given name.
80
+ #
81
+ # @note This does not make a request to SimpleDB.
82
+ #
83
+ # You can ask for any item. The named item may or may not actually
84
+ # exist in SimpleDB.
85
+ #
86
+ # @example Get an item by symbol or string name
87
+ #
88
+ # item = domain.items[:itemname]
89
+ # item = domain.items['itemname']
90
+ #
91
+ # @param [String, Symbol] item_name name of the item to get.
92
+ # @return [Item] Returns an item with the given name.
93
+ def [] item_name
94
+ Item.new(domain, item_name.to_s)
95
+ end
96
+
97
+ # Yields to the block once for each item in the collection.
98
+ # This method can yield two type of objects:
99
+ #
100
+ # * AWS::SimpleDB::Item objects (only the item name is populated)
101
+ # * AWS::SimpleDB::ItemData objects (some or all attributes populated)
102
+ #
103
+ # The default mode of an ItemCollection is to yield Item objects with
104
+ # no populated attributes.
105
+ #
106
+ # # only receives item names from SimpleDB
107
+ # domain.items.each do |item|
108
+ # puts item.name
109
+ # puts item.class.name # => AWS::SimpleDB::Item
110
+ # end
111
+ #
112
+ # You can switch a collection into yielded {ItemData} objects by
113
+ # specifying what attributes to request:
114
+ #
115
+ # domain.items.select(:all).each do |item_data|
116
+ # puts item_data.class.name # => AWS::SimpleDB::ItemData
117
+ # puts item_data.attributes # => { 'attr-name' => 'attr-value', ... }
118
+ # end
119
+ #
120
+ # You can also pass the standard scope options to #each as well:
121
+ #
122
+ # # output the item names of the 10 most expensive items
123
+ # domain.items.each(:order => [:price, :desc], :limit => 10).each do |item|
124
+ # puts item.name
125
+ # end
126
+ #
127
+ # @yield [item] Yields once for every item in the {#domain}.
128
+ #
129
+ # @yieldparam [Item,ItemData] item If the item collection has been
130
+ # scoped by chaining `#select` or by passing the `:select` option
131
+ # then {ItemData} objects (that contain a hash of attributes) are
132
+ # yielded. If no list of attributes has been provided, then#
133
+ # {Item} objects (with no populated data) are yielded.
134
+ #
135
+ # @param options [Hash]
136
+ #
137
+ # @option options [Boolean] :consistent_read (false) Causes this
138
+ # method to yield the most current data in the domain.
139
+ #
140
+ # @option options [Mixed] :select If select is provided, then each
141
+ # will yield {ItemData} objects instead of empty {Item}.
142
+ # The `:select` option may be:
143
+ #
144
+ # * `:all` - Specifies that all attributes should requested.
145
+ #
146
+ # * A single or array of attribute names (as strings or symbols).
147
+ # This causes the named attribute(s) to be requested.
148
+ #
149
+ # @option options :where Restricts the item collection using
150
+ # {#where} before querying (see {#where}).
151
+ #
152
+ # @option options :order Changes the order in which the items
153
+ # will be yielded (see {#order}).
154
+ #
155
+ # @option options :limit [Integer] The maximum number of
156
+ # items to fetch from SimpleDB.
157
+ #
158
+ # @option options :batch_size Specifies a maximum number of records
159
+ # to fetch from SimpleDB in a single request. SimpleDB may return
160
+ # fewer items than :batch_size per request, but never more.
161
+ # Generally you should not need to specify this option.
162
+ #
163
+ # @return [String,nil] Returns a next token that can be used with
164
+ # the exact same SimpleDB select expression to get more results.
165
+ # A next token is returned ONLY if there was a limit on the
166
+ # expression, otherwise all items will be enumerated and
167
+ # nil is returned.
168
+ #
169
+ def each options = {}, &block
170
+ super
171
+ end
172
+
173
+ # @api private
174
+ def each_batch options = {}, &block
175
+ handle_query_options(options) do |collection, opts|
176
+ return collection.each_batch(opts, &block)
177
+ end
178
+ super
179
+ end
180
+
181
+ # Counts the items in the collection.
182
+ #
183
+ # domain.items.count
184
+ #
185
+ # You can specify what items to count with {#where}:
186
+ #
187
+ # domain.items.where(:color => "red").count
188
+ #
189
+ # You can also limit the number of items to count:
190
+ #
191
+ # # count up to 500 items and then stop
192
+ # domain.items.limit(500).count
193
+ #
194
+ # @param [Hash] options Options for counting items.
195
+ #
196
+ # @option options [Boolean] :consistent_read (false) Causes this
197
+ # method to yield the most current data in the domain when `true`.
198
+ #
199
+ # @option options :where Restricts the item collection using
200
+ # {#where} before querying.
201
+ #
202
+ # @option options :limit [Integer] The maximum number of
203
+ # items to count in SimpleDB.
204
+ #
205
+ # @return [Integer] The number of items counted.
206
+ #
207
+ def count options = {}, &block
208
+
209
+ handle_query_options(options) do |collection, opts|
210
+ return collection.count(opts, &block)
211
+ end
212
+
213
+ options = options.merge(:output_list => "count(*)")
214
+
215
+ count = 0
216
+ next_token = nil
217
+
218
+ begin
219
+
220
+ response = select_request(options, next_token)
221
+
222
+ if
223
+ domain_item = response.items.first and
224
+ count_attribute = domain_item.attributes.first
225
+ then
226
+ count += count_attribute.value.to_i
227
+ end
228
+
229
+ break unless next_token = response[:next_token]
230
+
231
+ end while limit.nil? || count < limit
232
+
233
+ count
234
+
235
+ end
236
+ alias_method :size, :count
237
+
238
+ # # @return [PageResult] Returns an array-based object with results.
239
+ # # Results are either {Item} or {ItemData} objects depending on
240
+ # # the selection mode (item names only or with attributes).
241
+ # #
242
+ # def page options = {}
243
+ #
244
+ # handle_query_options(options) do |collection, opts|
245
+ # return collection.page(opts)
246
+ # end
247
+ #
248
+ # super(options)
249
+ #
250
+ # end
251
+
252
+ # Specifies a list of attributes select from SimpleDB.
253
+ #
254
+ # domain.items.select('size', 'color').each do |item_data|
255
+ # puts item_data.attributes # => { 'size' => ..., :color => ... }
256
+ # end
257
+ #
258
+ # You can select all attributes by passing `:all` or '*':
259
+ #
260
+ # domain.items.select('*').each {|item_data| ... }
261
+ #
262
+ # domain.items.select(:all).each {|item_data| ... }
263
+ #
264
+ # Calling #select causes #each to yield {ItemData} objects
265
+ # with #attribute hashes, instead of {Item} objects with
266
+ # an item name.
267
+ #
268
+ # @param [Symbol, String, or Array] attributes The attributes to
269
+ # retrieve. This can be:
270
+ #
271
+ # * `:all` or '*' to request all attributes for each item
272
+ #
273
+ # * A list or array of attribute names as strings or symbols
274
+ #
275
+ # Attribute names may contain any characters that are valid
276
+ # in a SimpleDB attribute name; this method will handle
277
+ # escaping them for inclusion in the query. Note that you
278
+ # cannot use this method to select the number of items; use
279
+ # {#count} instead.
280
+ #
281
+ # @return [ItemCollection] Returns a new item collection with the
282
+ # specified list of attributes to select.
283
+ #
284
+ def select *attributes, &block
285
+
286
+ # Before select was morphed into a chainable method, it accepted
287
+ # a hash of options (e.g. :where, :order, :limit) that no longer
288
+ # make sense, but to maintain backwards compatability we still
289
+ # consume those.
290
+ #
291
+ # TODO : it would be a good idea to add a deprecation warning for
292
+ # passing options to #select
293
+ #
294
+ handle_query_options(*attributes) do |collection, *args|
295
+ return collection.select(*args, &block)
296
+ end
297
+
298
+ options = attributes.last.is_a?(Hash) ? attributes.pop : {}
299
+
300
+ output_list = case attributes.flatten
301
+ when [] then '*'
302
+ when ['*'] then '*'
303
+ when [:all] then '*'
304
+ else attributes.flatten.map{|attr| coerce_attribute(attr) }.join(', ')
305
+ end
306
+
307
+ collection = collection_with(:output_list => output_list)
308
+
309
+ if block_given?
310
+ # previously select accepted a block and it would enumerate items
311
+ # this is for backwards compatability
312
+ collection.each(options, &block)
313
+ nil
314
+ else
315
+ collection
316
+ end
317
+
318
+ end
319
+
320
+ # Returns an item collection defined by the given conditions
321
+ # in addition to any conditions defined on this collection.
322
+ # For example:
323
+ #
324
+ # items = domain.items.where(:color => 'blue').
325
+ # where('engine_type is not null')
326
+ #
327
+ # # does SELECT itemName() FROM `mydomain`
328
+ # # WHERE color = "blue" AND engine_type is not null
329
+ # items.each { |i| ... }
330
+ #
331
+ # ## Hash Conditions
332
+ #
333
+ # When `conditions` is a hash, each entry produces a condition
334
+ # on the attribute named in the hash key. For example:
335
+ #
336
+ # # produces "WHERE `foo` = 'bar'"
337
+ # domain.items.where(:foo => 'bar')
338
+ #
339
+ # You can pass an array value to use an "IN" operator instead
340
+ # of "=":
341
+ #
342
+ # # produces "WHERE `foo` IN ('bar', 'baz')"
343
+ # domain.items.where(:foo => ['bar', 'baz'])
344
+ #
345
+ # You can also pass a range value to use a "BETWEEN" operator:
346
+ #
347
+ # # produces "WHERE `foo` BETWEEN 'bar' AND 'baz'
348
+ # domain.items.where(:foo => 'bar'..'baz')
349
+ #
350
+ # # produces "WHERE (`foo` >= 'bar' AND `foo` < 'baz')"
351
+ # domain.items.where(:foo => 'bar'...'baz')
352
+ #
353
+ # ## Placeholders
354
+ #
355
+ # If `conditions` is a string and "?" appears outside of any
356
+ # quoted part of the expression, `placeholers` is expected to
357
+ # contain a value for each of the "?" characters in the
358
+ # expression. For example:
359
+ #
360
+ # # produces "WHERE foo like 'fred''s % value'"
361
+ # domain.items.where("foo like ?", "fred's % value")
362
+ #
363
+ # Array values are surrounded with parentheses when they are
364
+ # substituted for a placeholder:
365
+ #
366
+ # # produces "WHERE foo in ('1', '2')"
367
+ # domain.items.where("foo in ?", [1, 2])
368
+ #
369
+ # Note that no substitutions are made within a quoted region
370
+ # of the query:
371
+ #
372
+ # # produces "WHERE `foo?` = 'red'"
373
+ # domain.items.where("`foo?` = ?", "red")
374
+ #
375
+ # # produces "WHERE foo = 'fuzz?' AND bar = 'zap'"
376
+ # domain.items.where("foo = 'fuzz?' AND bar = ?", "zap")
377
+ #
378
+ # Also note that no attempt is made to correct for syntax:
379
+ #
380
+ # # produces "WHERE 'foo' = 'bar'", which is invalid
381
+ # domain.items.where("? = 'bar'", "foo")
382
+ #
383
+ # @return [ItemCollection] Returns a new item collection with the
384
+ # additional conditions.
385
+ #
386
+ def where conditions, *substitutions
387
+ case conditions
388
+ when String
389
+ conditions = [replace_placeholders(conditions, *substitutions)]
390
+ when Hash
391
+ conditions = conditions.map do |name, value|
392
+ name = coerce_attribute(name)
393
+ case value
394
+ when Array
395
+ "#{name} IN " + coerce_substitution(value)
396
+ when Range
397
+ if value.exclude_end?
398
+ "(#{name} >= #{coerce_substitution(value.begin)} AND " +
399
+ "#{name} < #{coerce_substitution(value.end)})"
400
+ else
401
+ "#{name} BETWEEN #{coerce_substitution(value.begin)} AND " +
402
+ coerce_substitution(value.end)
403
+ end
404
+ else
405
+ "#{name} = " + coerce_substitution(value)
406
+ end
407
+ end
408
+ end
409
+
410
+ collection_with(:conditions => self.conditions + conditions)
411
+ end
412
+
413
+ # Changes the order in which results are returned or yielded.
414
+ # For example, to get item names in descending order of
415
+ # popularity, you can do:
416
+ #
417
+ # domain.items.order(:popularity, :desc).map(&:name)
418
+ #
419
+ # @param attribute [String or Symbol] The attribute name to
420
+ # order by.
421
+ # @param order [String or Symbol] The desired order, which may be:
422
+ # * `asc` or `ascending` (the default)
423
+ # * `desc` or `descending`
424
+ # @return [ItemCollection] Returns a new item collection with the
425
+ # given ordering logic.
426
+ def order(attribute, order = nil)
427
+ sort = coerce_attribute(attribute)
428
+ sort += " DESC" if order.to_s =~ /^desc(ending)?$/
429
+ sort += " ASC" if order.to_s =~ /^asc(ending)?$/
430
+ collection_with(:sort_instructions => sort,
431
+ :not_null_attribute => attribute.to_s)
432
+ end
433
+
434
+ # Limits the number of items that are returned or yielded.
435
+ # For example, to get the 100 most popular item names:
436
+ #
437
+ # domain.items.
438
+ # order(:popularity, :desc).
439
+ # limit(100).
440
+ # map(&:name)
441
+ #
442
+ # @overload limit
443
+ # @return [Integer] Returns the current limit for the collection.
444
+ #
445
+ # @overload limit(value)
446
+ # @return [ItemCollection] Returns a collection with the given limit.
447
+ #
448
+ def limit *args
449
+ return @limit if args.empty?
450
+ collection_with(:limit => Integer(args.first))
451
+ end
452
+ alias_method :_limit, :limit # for Collection::WithLimitAndNextToken
453
+
454
+ # Applies standard scope options (e.g. :where => 'foo') and removes them from
455
+ # the options hash by calling their method (e.g. by calling #where('foo')).
456
+ # Yields only if there were scope options to apply.
457
+ # @api private
458
+ protected
459
+ def handle_query_options(*args)
460
+
461
+ options = args.last.is_a?(Hash) ? args.pop : {}
462
+
463
+ if
464
+ query_options = options.keys & [:select, :where, :order, :limit] and
465
+ !query_options.empty?
466
+ then
467
+ collection = self
468
+ query_options.each do |query_option|
469
+ option_args = options[query_option]
470
+ option_args = [option_args] unless option_args.kind_of?(Array)
471
+ options.delete(query_option)
472
+ collection = collection.send(query_option, *option_args)
473
+ end
474
+
475
+ args << options
476
+
477
+ yield(collection, *args)
478
+
479
+ end
480
+ end
481
+
482
+ protected
483
+ def _each_item next_token, max, options = {}, &block
484
+
485
+ handle_query_options(options) do |collection, opts|
486
+ return collection._each_item(next_token, max, opts, &block)
487
+ end
488
+
489
+ response = select_request(options, next_token, max)
490
+
491
+ if output_list == 'itemName()'
492
+ response.items.each do |item|
493
+ yield(self[item.name])
494
+ end
495
+ else
496
+ response.items.each do |item|
497
+ yield(ItemData.new(:domain => domain, :response_object => item))
498
+ end
499
+ end
500
+
501
+ response[:next_token]
502
+
503
+ end
504
+
505
+ protected
506
+ def select_request(options, next_token = nil, limit = nil)
507
+
508
+ opts = {}
509
+ opts[:select_expression] = select_expression(options)
510
+ opts[:consistent_read] = consistent_read(options)
511
+ opts[:next_token] = next_token if next_token
512
+
513
+ if limit
514
+ unless opts[:select_expression].gsub!(/LIMIT \d+/, "LIMIT #{limit}")
515
+ opts[:select_expression] << " LIMIT #{limit}"
516
+ end
517
+ end
518
+
519
+ client.select(opts)
520
+
521
+ end
522
+
523
+ # @api private
524
+ protected
525
+ def select_expression options = {}
526
+ expression = []
527
+ expression << "SELECT #{options[:output_list] || self.output_list}"
528
+ expression << "FROM `#{domain.name}`"
529
+ expression << where_clause
530
+ expression << order_by_clause
531
+ expression << limit_clause
532
+ expression.compact.join(' ')
533
+ end
534
+
535
+ # @api private
536
+ protected
537
+ def where_clause
538
+
539
+ conditions = self.conditions.dup
540
+
541
+ if @not_null_attribute
542
+ conditions << coerce_attribute(@not_null_attribute) + " IS NOT NULL"
543
+ end
544
+
545
+ conditions.empty? ? nil : "WHERE #{conditions.join(" AND ")}"
546
+
547
+ end
548
+
549
+ # @api private
550
+ protected
551
+ def order_by_clause
552
+ sort_instructions ? "ORDER BY #{sort_instructions}" : nil
553
+ end
554
+
555
+ # @api private
556
+ protected
557
+ def limit_clause
558
+ limit ? "LIMIT #{limit}" : nil
559
+ end
560
+
561
+ # @api private
562
+ protected
563
+ def collection_with options
564
+ ItemCollection.new(domain, {
565
+ :output_list => output_list,
566
+ :conditions => conditions,
567
+ :sort_instructions => sort_instructions,
568
+ :not_null_attribute => @not_null_attribute,
569
+ :limit => limit,
570
+ }.merge(options))
571
+ end
572
+
573
+ # @api private
574
+ protected
575
+ def replace_placeholders(str, *substitutions)
576
+ named = {}
577
+ named = substitutions.pop if substitutions.last.kind_of?(Hash)
578
+ if str =~ /['"`]/
579
+ count = 0
580
+ str = str.scan(OUTSIDE_QUOTES_REGEX).
581
+ map do |(before, quoted, after)|
582
+
583
+ (before, after) = [before, after].map do |s|
584
+ s, count =
585
+ replace_placeholders_outside_quotes(s, count, substitutions, named)
586
+ s
587
+ end
588
+ [before, quoted, after].join
589
+ end.join
590
+ else
591
+ # no quotes
592
+ str, count =
593
+ replace_placeholders_outside_quotes(str, 0, substitutions, named)
594
+ end
595
+ raise ArgumentError.new("extra value(s): #{substitutions.inspect}") unless
596
+ substitutions.empty?
597
+ str
598
+ end
599
+
600
+ # @api private
601
+ protected
602
+ def replace_placeholders_outside_quotes(str, count, substitutions, named = {})
603
+ orig_str = str.dup
604
+ str, count = replace_positional_placeders(str, count, substitutions)
605
+ str = replace_named_placeholders(orig_str, str, named)
606
+ [str, count]
607
+ end
608
+
609
+ # @api private
610
+ protected
611
+ def replace_positional_placeders(str, count, substitutions)
612
+ str = str.gsub("?") do |placeholder|
613
+ count += 1
614
+ raise ArgumentError.new("missing value for placeholder #{count}") if
615
+ substitutions.empty?
616
+ coerce_substitution(substitutions.shift)
617
+ end
618
+ [str, count]
619
+ end
620
+
621
+ # @api private
622
+ protected
623
+ def replace_named_placeholders(orig_str, str, named)
624
+ named.each do |name, value|
625
+ str = str.gsub(name.to_sym.inspect, coerce_substitution(value))
626
+ end
627
+ str.scan(/:\S+/) do |missing|
628
+ if orig_str.include?(missing)
629
+ raise ArgumentError.new("missing value for placeholder #{missing}")
630
+ end
631
+ end
632
+ str
633
+ end
634
+
635
+ # @api private
636
+ protected
637
+ def coerce_substitution(subst)
638
+ if subst.kind_of?(Array)
639
+ "(" +
640
+ subst.flatten.map { |s| coerce_substitution(s) }.join(", ") + ")"
641
+ else
642
+ "'" + subst.to_s.gsub("'", "''") + "'"
643
+ end
644
+ end
645
+
646
+ # @api private
647
+ protected
648
+ def coerce_attribute(name)
649
+ '`' + name.to_s.gsub('`', '``') + '`'
650
+ end
651
+
652
+ end
653
+ end
654
+ end