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,24 @@
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
+ AWS::Core::Configuration.module_eval do
15
+
16
+ add_service 'DynamoDB', 'dynamo_db', 'dynamodb.us-east-1.amazonaws.com'
17
+
18
+ add_option :dynamo_db_retry_throughput_errors, true, :boolean => true
19
+
20
+ add_option :dynamo_db_big_decimals, true, :boolean => true
21
+
22
+ add_option :dynamo_db_crc32, true, :boolean => true
23
+
24
+ end
@@ -0,0 +1,20 @@
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 DynamoDB
16
+ module Errors
17
+ extend Core::LazyErrorClasses
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,40 @@
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 DynamoDB
16
+
17
+ module Expectations
18
+
19
+ private
20
+ def expect_conditions(options)
21
+ expected = {}
22
+
23
+ options[:if].each do |name, value|
24
+ context = "expected value for attribute #{name}"
25
+ expected[name.to_s] = {
26
+ :value => format_attribute_value(value, context)
27
+ }
28
+ end if options[:if]
29
+
30
+ [options[:unless_exists]].flatten.each do |name|
31
+ expected[name.to_s] = { :exists => false }
32
+ end if options[:unless_exists]
33
+
34
+ expected
35
+ end
36
+
37
+ end
38
+
39
+ end
40
+ end
@@ -0,0 +1,133 @@
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 DynamoDB
16
+
17
+ # Represents a DynamoDB item. An item is identified by simple or
18
+ # complex primary key (according to the table schema) and consists
19
+ # of a collection of attributes. Attributes are name/value pairs
20
+ # where the value may be a string, number, string set, or number
21
+ # set.
22
+ #
23
+ # Getting an item by hash key value:
24
+ #
25
+ # item = table.items['hash-key-value']
26
+ #
27
+ # Getting an item from a table with both hash and range keys:
28
+ #
29
+ # item = table.items['hash-key','range-key']
30
+ #
31
+ class Item < Core::Resource
32
+
33
+ extend Types
34
+ include Keys
35
+ include Expectations
36
+
37
+ # @return [Table] The table in which the item is stored.
38
+ attr_reader :table
39
+
40
+ # @return [String, Numeric] The hash key value of the item.
41
+ attr_reader :hash_value
42
+
43
+ # @return [String, Numeric, nil] The range key value of the
44
+ # item, or +nil+ if the table has a simple primary key.
45
+ attr_reader :range_value
46
+
47
+ # @private
48
+ def initialize(table, *args)
49
+ opts = args.pop if args.last.kind_of?(Hash)
50
+ (@hash_value, @range_value) = args
51
+ @table = table
52
+ super(table, opts)
53
+ end
54
+
55
+ # Deletes the item.
56
+ #
57
+ # @param [Hash] options Options for deleting the item.
58
+ #
59
+ # @option options [Hash] :if Designates a conditional delete.
60
+ # The operation will fail unless the item exists and has the
61
+ # attributes in the value for this option. For example:
62
+ #
63
+ # # throws DynamoDB::Errors::ConditionalCheckFailedException
64
+ # # unless the item has "color" set to "red"
65
+ # item.delete(:if => { :color => "red" })
66
+ #
67
+ # @option options [String, Symbol, Array] :unless_exists A name
68
+ # or collection of attribute names; if the item has a value
69
+ # for any of these attributes, this method will raise
70
+ # +DynamoDB::Errors::ConditionalCheckFailedException+. For
71
+ # example:
72
+ #
73
+ # item.delete(:unless_exists => "version")
74
+ def delete(options = {})
75
+ client_opts = item_key_options(self)
76
+
77
+ expected = expect_conditions(options)
78
+ client_opts[:expected] = expected unless expected.empty?
79
+
80
+ client_opts[:return_values] = options[:return].to_s.upcase if
81
+ options[:return]
82
+
83
+ resp = client.delete_item(client_opts)
84
+
85
+ values_from_response_hash(resp.data["Attributes"]) if
86
+ options[:return] and resp.data["Attributes"]
87
+ end
88
+
89
+ # @return [Boolean] True if the item exists.
90
+ def exists?(options = {})
91
+ client_opts = item_key_options(self, options)
92
+ client_opts[:attributes_to_get] = [table.hash_key.name]
93
+ resp = client.get_item(client_opts)
94
+ resp.data.key?("Item")
95
+ end
96
+
97
+ # @return [AttributeCollection] An object representing the
98
+ # attributes of the item.
99
+ def attributes
100
+ AttributeCollection.new(self)
101
+ end
102
+
103
+ # @private
104
+ def self.new_from(op, response_object, table, *args)
105
+
106
+ config = args.last.is_a?(Hash) ? args.last : AWS.config
107
+
108
+ table.assert_schema!
109
+ hash_value =
110
+ value_from_response(response_object[table.hash_key.name])
111
+ range_value =
112
+ value_from_response(response_object[table.range_key.name]) if
113
+ table.range_key
114
+
115
+ raise "missing hash key value in put_item response" unless hash_value
116
+ raise "missing range key value in put_item response" unless
117
+ range_value || !table.range_key
118
+
119
+ super(op, response_object,
120
+ table, hash_value, range_value, *args)
121
+ end
122
+
123
+ protected
124
+ def resource_identifiers
125
+ [[:table_name, table.name],
126
+ [:hash_value, hash_value],
127
+ [:range_value, range_value]]
128
+ end
129
+
130
+ end
131
+
132
+ end
133
+ end
@@ -0,0 +1,852 @@
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 DynamoDB
16
+
17
+ # Represents a collection of DynamoDB items.
18
+ #
19
+ # You can use an item collection to:
20
+ #
21
+ # * Create an {Item}
22
+ # * Get an {Item}
23
+ # * Enumerate {Item} or {ItemData} objects
24
+ #
25
+ # == Creating an Item
26
+ #
27
+ # To create an item, just call {#create} with a hash of attributes.
28
+ #
29
+ # table = dynamo_db.tables['my-table']
30
+ # table.hash_key = [:id, :string]
31
+ #
32
+ # table.items.create('id' => 'abc', 'count' => 5, 'colors' => %w(red blue))
33
+ #
34
+ # Attribute names can be symbols/strings and values can be strings or
35
+ # numbers or arrays/sets of strings/numbers. The attributes must contain
36
+ # the hash key name/value for the item and the value must be of the
37
+ # correct type (e.g. string or number).
38
+ #
39
+ # == Getting an Item
40
+ #
41
+ # To get an item, you provide the hash key
42
+ #
43
+ # # gets a reference to the item, no request is made
44
+ # item = table.items['hash-key-value']
45
+ #
46
+ # You call methods against the item returned to get, add, update or delete
47
+ # attributes. See {Item} for more information.
48
+ #
49
+ # == Enumerating Items
50
+ #
51
+ # You can enumerate items 2 ways:
52
+ #
53
+ # * Enuemrate {Item} objects
54
+ # * Enumerate {ItemData} objects
55
+ #
56
+ # {Item} objects do not have any attribute data populated. Think of
57
+ # them as just references to the item in Amazon DynamoDB. They only
58
+ # konw the objects hash key (and optional range key).
59
+ #
60
+ # {ItemData} objects are wrappers around the actual item attributes.
61
+ #
62
+ # To enumerate {Item} objects just call each on the item collection.
63
+ #
64
+ # table.items.each do |item|
65
+ # puts item.hash_value
66
+ # end
67
+ #
68
+ # To enumerate {ItemData} objects you need to specify what attributes
69
+ # you are interested in. This will cause #each to yield {ItemData}
70
+ # objects. Call {ItemData#attributes} to get the hash of attribute
71
+ # names/values.
72
+ #
73
+ # table.items.select('id', 'category').each do |item_data|
74
+ # item_data.attributes #=> { 'id' => 'abc', 'category' => 'foo' }
75
+ # end
76
+ #
77
+ # If you want item data objects with all attributes just call select
78
+ # without a list of attributes (#select still accepts options).
79
+ #
80
+ # # request a maximum of 10 items from Amazon DynamoDB
81
+ # table.items.select(:limit => 10).each do |item_data|
82
+ # item_data.attributes #=> { 'id' => 'abc', 'category' => 'foo', ... }
83
+ # end
84
+ #
85
+ # Please note that enumerating objects is done via the scan operation.
86
+ # Refer to the Amazon DynamoDB documentation for more information
87
+ # about scanning.
88
+ #
89
+ class ItemCollection
90
+
91
+ include Core::Collection::WithLimitAndNextToken
92
+ include Types
93
+ include Expectations
94
+
95
+ # @private
96
+ def initialize(table, opts = {})
97
+ @table = table
98
+ @scan_filters = opts[:scan_filters] || {}
99
+ super
100
+ end
101
+
102
+ # @return [Table] The table to which the items in the collection
103
+ # belong.
104
+ attr_reader :table
105
+
106
+ # @private
107
+ attr_reader :scan_filters
108
+
109
+ # Creates a new item, or replaces an old item with a new item
110
+ # (including all the attributes). If an item already exists in
111
+ # the specified table with the same primary key, the new item
112
+ # completely replaces the existing item. You can perform a
113
+ # conditional put (insert a new item if one with the specified
114
+ # primary key doesn't exist), or replace an existing item if it
115
+ # has certain attribute values.
116
+ #
117
+ # items.put(:id => "abc123", :colors => ["red", "white"])
118
+ #
119
+ # @param [Hash] attributes The attributes to store with the
120
+ # item. These must include the primary key attributes for the
121
+ # table (see {Table#hash_key} and {Table#range_key}.
122
+ # Attribute names may be symbols or UTF-8 strings, and
123
+ # attribute values may be any of these types:
124
+ #
125
+ # * String
126
+ # * Array<String> or Set<String>
127
+ # * Numeric
128
+ # * Array<Numeric> or Set<Numeric>
129
+ #
130
+ # Empty sets, arrays, and strings are invalid.
131
+ #
132
+ # @param [Hash] options (<code>{}</code>) Additional options for
133
+ # storing the item.
134
+ #
135
+ # @option options [Hash] :if Designates a conditional put. The
136
+ # operation will fail unless the item exists and has the
137
+ # attributes in the value for this option. For example:
138
+ #
139
+ # # throws DynamoDB::Errors::ConditionalCheckFailedException
140
+ # # unless the item has "color" set to "red"
141
+ # items.put(
142
+ # { :foo => "Bar" },
143
+ # :if => { :color => "red" }
144
+ # )
145
+ #
146
+ # @option options [String, Symbol, Array] :unless_exists A name
147
+ # or collection of attribute names; if the item already exists
148
+ # and has a value for any of these attributes, this method
149
+ # will raise
150
+ # +DynamoDB::Errors::ConditionalCheckFailedException+. For example:
151
+ #
152
+ # items.put({ :id => "abc123" }, :unless_exists => "id")
153
+ #
154
+ # @option options [Symbol] :return If set to +:all_old+, this
155
+ # method will return a hash containing the previous values of
156
+ # all attributes for the item that was overwritten. If this
157
+ # option is set to +:none+, or if it is set to +:all_old+ and
158
+ # no item currently exists with the same primary key values,
159
+ # the method will return +nil+.
160
+ #
161
+ # @return [Item] An object representing the item that was
162
+ # stored. Note that the SDK retains only the item's primary
163
+ # key values in memory; if you access the attributes of the
164
+ # item using the returned object, the SDK will contact the
165
+ # service to retrieve those attributes. The +:return+ option
166
+ # may be used to change the return value of this method.
167
+ def create attributes, options = {}
168
+ table.assert_schema!
169
+
170
+ attributes = attributes.inject({}) do |hash, (key, value)|
171
+ context = "value for attribute #{key}"
172
+ hash.update(key.to_s => format_attribute_value(value, context))
173
+ end
174
+
175
+ client_opts = {
176
+ :table_name => table.name,
177
+ :item => attributes
178
+ }
179
+
180
+ expected = expect_conditions(options)
181
+ client_opts[:expected] = expected unless expected.empty?
182
+
183
+ client_opts[:return_values] = options[:return].to_s.upcase if
184
+ options[:return]
185
+
186
+ resp = client.put_item(client_opts)
187
+
188
+ item = Item.new_from(:put_item, attributes, table)
189
+
190
+ if options[:return]
191
+ values_from_response_hash(resp.data["Attributes"])
192
+ else
193
+ item
194
+ end
195
+ end
196
+ alias_method :put, :create
197
+
198
+ # Returns an object representing an item in the table,
199
+ # identified by its hash key value. This method will raise an
200
+ # exception unless the table has a schema loaded or configured,
201
+ # or if the table has a composite primary key.
202
+ #
203
+ # table.hash_key = [:id, :string]
204
+ # item = table.items["abc123"]
205
+ #
206
+ # @param [String, Numeric] hash_value The hash key value for the
207
+ # item. The type of this parameter must match the type in the
208
+ # table's schema, but currently the SDK makes no attempt to
209
+ # validate the key.
210
+ #
211
+ # @return [Item]
212
+ def [] hash_value
213
+ table.assert_schema!
214
+ raise(ArgumentError,
215
+ "table has a range key; use #at instead of #[]") unless
216
+ table.simple_key?
217
+ Item.new(table, hash_value)
218
+ end
219
+
220
+ # Returns an object representing an item in the table,
221
+ # identified by its hash key value and conditionally its range
222
+ # key value. This method will raise an exception unless the
223
+ # table has a schema loaded or configured. The type of each
224
+ # parameter must match the type in the table's schema, but
225
+ # currently the SDK makes no attempt to validate the key
226
+ # elements.
227
+ #
228
+ # table.hash_key = [:id, :string]
229
+ # table.range_key = [:range, :number]
230
+ # item = table.items.at("abc123", 12)
231
+ #
232
+ # @param [String, Numeric] hash_value The hash key value for the
233
+ # item.
234
+ #
235
+ # @param [String, Numeric] range_value The range key value for
236
+ # the item. This parameter is required when the table has a
237
+ # composite primary key, and it may not be specified when the
238
+ # table has a simple primary key.
239
+ #
240
+ # @return [Item]
241
+ def at hash_value, range_value = nil
242
+ table.assert_schema!
243
+ if table.composite_key? and !range_value
244
+ raise ArgumentError, "a range key value is required for this table"
245
+ end
246
+ Item.new(table, hash_value, range_value)
247
+ end
248
+ alias_method :[], :at
249
+
250
+ # Provides a convenient syntax for expressing scan filters.
251
+ #
252
+ # table.items.where(:path).begins_with("users/")
253
+ #
254
+ class FilterBuilder
255
+
256
+ include Types
257
+
258
+ attr_reader :items
259
+
260
+ attr_reader :attribute
261
+
262
+ # @private
263
+ def initialize(items, attribute)
264
+ @items = items
265
+ @attribute = attribute
266
+ end
267
+
268
+ # Filters the collection to include only those items where the
269
+ # value of this attribute is equal to the argument.
270
+ #
271
+ # @param [String, Numeric] value The value to compare against.
272
+ #
273
+ # @return [ItemCollection] A new item collection filtered by
274
+ # this condition.
275
+ def equals value
276
+ @items.with_filter(attribute, "EQ", value)
277
+ end
278
+
279
+ # Filters the collection to include only those items where the
280
+ # value of this attribute is not equal to the argument.
281
+ #
282
+ # @param [String, Numeric] value The value to compare against.
283
+ #
284
+ # @return [ItemCollection] A new item collection filtered by
285
+ # this condition.
286
+ def not_equal_to value
287
+ @items.with_filter(attribute, "NE", value)
288
+ end
289
+
290
+ # Filters the collection to include only those items where the
291
+ # value of this attribute is less than the argument.
292
+ #
293
+ # @param [String, Numeric] value The value to compare against.
294
+ #
295
+ # @return [ItemCollection] A new item collection filtered by
296
+ # this condition.
297
+ def less_than value
298
+ @items.with_filter(attribute, "LT", value)
299
+ end
300
+
301
+ # Filters the collection to include only those items where the
302
+ # value of this attribute is greater than the argument.
303
+ #
304
+ # @param [String, Numeric] value The value to compare against.
305
+ #
306
+ # @return [ItemCollection] A new item collection filtered by
307
+ # this condition.
308
+ def greater_than value
309
+ @items.with_filter(attribute, "GT", value)
310
+ end
311
+
312
+ # Filters the collection to include only those items where the
313
+ # value of this attribute is less than or equal to the
314
+ # argument.
315
+ #
316
+ # @param [String, Numeric] value The value to compare against.
317
+ #
318
+ # @return [ItemCollection] A new item collection filtered by
319
+ # this condition.
320
+ def lte value
321
+ @items.with_filter(attribute, "LE", value)
322
+ end
323
+
324
+ # Filters the collection to include only those items where the
325
+ # value of this attribute is greater than or equal to the
326
+ # argument.
327
+ #
328
+ # @param [String, Numeric] value The value to compare against.
329
+ #
330
+ # @return [ItemCollection] A new item collection filtered by
331
+ # this condition.
332
+ def gte value
333
+ @items.with_filter(attribute, "GE", value)
334
+ end
335
+
336
+ # Filters the collection to include only those items where
337
+ # this attribute does not exist.
338
+ #
339
+ # @return [ItemCollection] A new item collection filtered by
340
+ # this condition.
341
+ def is_null
342
+ @items.with_filter(attribute, "NULL")
343
+ end
344
+
345
+ # Filters the collection to include only those items where
346
+ # this attribute exists.
347
+ #
348
+ # @return [ItemCollection] A new item collection filtered by
349
+ # this condition.
350
+ def not_null
351
+ @items.with_filter(attribute, "NOT_NULL")
352
+ end
353
+
354
+ # Filters the collection to include only those items where
355
+ # this attribute contains the argument. If the attribute
356
+ # value is a set, this filter matches items where the argument
357
+ # is one of the values in the set. If the attribute value is
358
+ # a string, this filter matches items where the argument
359
+ # (which must be a string) is a substring of the attribute
360
+ # value.
361
+ #
362
+ # @param [String, Numeric] value The value to compare against.
363
+ #
364
+ # @return [ItemCollection] A new item collection filtered by
365
+ # this condition.
366
+ def contains value
367
+ @items.with_filter(attribute, "CONTAINS", value)
368
+ end
369
+
370
+ # Filters the collection to include only those items where
371
+ # this attribute does not contain the argument. If the
372
+ # attribute value is a set, this filter matches items where
373
+ # the argument is not present in the set. If the attribute
374
+ # value is a string, this filter matches items where the
375
+ # argument (which must be a string) is not a substring of the
376
+ # attribute value.
377
+ #
378
+ # @param [String, Numeric] value The value to compare against.
379
+ #
380
+ # @return [ItemCollection] A new item collection filtered by
381
+ # this condition.
382
+ def does_not_contain value
383
+ @items.with_filter(attribute, "NOT_CONTAINS", value)
384
+ end
385
+
386
+ # Filters the collection to include only those items where
387
+ # this attribute begins with the argument.
388
+ #
389
+ # @param [String] value The value to compare against.
390
+ #
391
+ # @return [ItemCollection] A new item collection filtered by
392
+ # this condition.
393
+ def begins_with value
394
+ @items.with_filter(attribute, "BEGINS_WITH", value)
395
+ end
396
+
397
+ # Filters the collection to include only those items where
398
+ # this attribute equals one of the arguments.
399
+ #
400
+ # @param [Array<String, Numeric>] values The values to compare
401
+ # against.
402
+ #
403
+ # @return [ItemCollection] A new item collection filtered by
404
+ # this condition.
405
+ def in *values
406
+ @items.with_filter(attribute, "IN", *values)
407
+ end
408
+
409
+ # Filters the collection to include only those items where
410
+ # this attribute is between the two arguments.
411
+ #
412
+ # @param [String, Numeric] min The minimum value.
413
+ #
414
+ # @param [String, Numeric] max The maximum value.
415
+ #
416
+ # @return [ItemCollection] A new item collection filtered by
417
+ # this condition.
418
+ def between min, max
419
+ @items.with_filter(attribute, "BETWEEN", min, max)
420
+ end
421
+
422
+ end
423
+
424
+ # @overload where(attributes)
425
+ #
426
+ # table.items.where(:name => "Fred")
427
+ #
428
+ # @param [Hash] attributes The returned collection will be
429
+ # filtered such that each item contains the attributes and
430
+ # values in this map.
431
+ #
432
+ # @return [ItemCollection] A collection where all the items
433
+ # have the provided attributes and values.
434
+ #
435
+ # @overload where(attribute_name)
436
+ #
437
+ # table.items.where(:name).equals("Fred")
438
+ #
439
+ # @return [FilterBuilder] An object that allows you to specify
440
+ # a filter on the provided attribute name.
441
+ def where(filter)
442
+ case filter
443
+ when Hash
444
+ filter.inject(self) do |items, (name, value)|
445
+ case value
446
+ when nil
447
+ items.with_filter(name.to_s, "NULL")
448
+ when Range
449
+ items.with_filter(name.to_s, "BETWEEN", value.begin, value.end)
450
+ else
451
+ items.with_filter(name.to_s, "EQ", value)
452
+ end
453
+ end
454
+ when String, Symbol
455
+ FilterBuilder.new(self, filter.to_s)
456
+ end
457
+ end
458
+ alias_method :and, :where
459
+
460
+ # Iterates over all the items in the collection using a scan
461
+ # operation. A scan operation scans the entire table. You can
462
+ # specify filters to apply to the results to refine the values
463
+ # returned to you, after the complete scan. Amazon DynamoDB puts
464
+ # a 1MB limit on the scan (the limit applies before the results
465
+ # are filtered). A scan can result in no table data meeting the
466
+ # filter criteria.
467
+ #
468
+ # For more information about filtering the collection
469
+ # see the {#where} method.
470
+ #
471
+ # @param [Hash] options Options for iterating the collection.
472
+ #
473
+ # @yieldparam [Item] item Each item in the collection.
474
+ #
475
+ # @option options [Integer] :limit The maximum number of items to yield.
476
+ #
477
+ # @option options [Integer] :batch_size The maximum number of items
478
+ # to retrieve with each service request.
479
+ def each(options = {}, &block)
480
+
481
+ if conditions = options.delete(:where)
482
+ return where(conditions).each(options, &block)
483
+ end
484
+
485
+ table.assert_schema!
486
+
487
+ options = options.merge(:table_name => table.name)
488
+ options[:scan_filter] = scan_filters unless scan_filters.empty?
489
+
490
+ unless options[:count] or options[:item_data]
491
+ options[:attributes_to_get] = [table.hash_key.name]
492
+ options[:attributes_to_get] << table.range_key.name if
493
+ table.composite_key?
494
+ end
495
+
496
+ super(options, &block)
497
+ end
498
+
499
+ # Retrieves data about the items in the collection. This method
500
+ # works like {#each}, except that it returns or yields
501
+ # {ItemData} instances instead of {Item} instances. This is
502
+ # useful if you want to use the attributes of the item in a loop
503
+ # or retain them in memory. Also, unlike {#each} which always
504
+ # requests only the primary key attributes of the items, this
505
+ # method allows you to specify which attributes to retrieve from
506
+ # DynamoDB.
507
+ #
508
+ # # fetch all attributes for a collection of items
509
+ # items.select { |data| p data.attributes }
510
+ #
511
+ # # fetch only the "color" attribute of each item
512
+ # items.select(:color) { |data| p data.attributes["color"] }
513
+ #
514
+ # # use client-side filtering to delete a subset of the items
515
+ # items.select do |data|
516
+ # data.item.delete if data.attributes.size % 2 == 0
517
+ # end
518
+ #
519
+ # @overload select(*attributes, options = {})
520
+ #
521
+ # @param [Array<String, Symbol>] attributes Specifies which
522
+ # attributes to retrieve from the service. By default all
523
+ # attributes are retrieved. If the last argument is a hash,
524
+ # it may contain options for iterating the items in the
525
+ # collection. See the {#each} method for more information
526
+ # about these options.
527
+ #
528
+ # @param [Hash] options
529
+ #
530
+ # @option options [Integer] :limit The maximum number of records to
531
+ # select (scan). If more records are requested than can
532
+ # be returned in a single response, multiple requests
533
+ # will be made.
534
+ #
535
+ # @yieldparam [ItemData] data The data for each item in the
536
+ # collection. The attributes of each item will be populated
537
+ # in the ItemData object; however, {ItemData#item} will not be
538
+ # populated unless the requested attributes include all
539
+ # elements of the table's primary key. For example, if a
540
+ # table has a composite primary key, this method will only
541
+ # populate {ItemData#item} if the list of requested attributes
542
+ # includes both the hash key and range key attributes.
543
+ #
544
+ # @return [Enumerator, nil] If a block is given, this method
545
+ # returns nil. Otherwise, it returns an enumerator for the
546
+ # values that would have been yielded to the block.
547
+ #
548
+ def select *attributes, &block
549
+
550
+ options = {}
551
+ options = attributes.pop if attributes.last.kind_of?(Hash)
552
+ options = options.merge(:item_data => true)
553
+ options[:attributes_to_get] =
554
+ attributes.map { |att| att.to_s } unless
555
+ attributes.empty?
556
+
557
+ if block_given?
558
+ each(options, &block)
559
+ else
560
+ enumerator(options)
561
+ end
562
+
563
+ end
564
+
565
+ # Counts the items in the collection using a table scan. The
566
+ # count applies to the items that match all the filters on the
567
+ # collection. For example:
568
+ #
569
+ # # count the blue items
570
+ # items.where(:color => "blue").count
571
+ #
572
+ # @param [Hash] options Options for counting the items.
573
+ #
574
+ # @option options [Integer] :max_requests The maximum number of
575
+ # requests to make.
576
+ #
577
+ # @option options [Integer] :limit The maximum count; the return
578
+ # value will be less than or equal to the value of this
579
+ # option.
580
+ #
581
+ # @option options [Integer] :batch_size DynamoDB will scan up to
582
+ # 1MB of data on each request; you can use this option to
583
+ # further limit the number of items scanned on each request.
584
+ #
585
+ # @return [Integer]
586
+ def count options = {}
587
+ options = options.merge(:count => true)
588
+
589
+ # since each with :count yields the per-page counts, each with
590
+ # :limit and :count effectively limits the number of requests,
591
+ # not the number of items
592
+ limit = options.delete(:limit)
593
+ options[:limit] = options.delete(:max_requests) if
594
+ options.key?(:max_requests)
595
+
596
+ # it usually doesn't make sense to ask for more items than you
597
+ # care about counting
598
+ options[:batch_size] ||= limit if limit
599
+
600
+ enumerator(options).inject(0) do |sum, n|
601
+ return limit if limit && sum + n >= limit
602
+ sum + n
603
+ end
604
+ end
605
+
606
+ RANGE_KEY_OPTIONS = {
607
+ :range_less_than => "LT",
608
+ :range_greater_than => "GT",
609
+ :range_lte => "LE",
610
+ :range_gte => "GE",
611
+ :range_begins_with => "BEGINS_WITH"
612
+ }
613
+
614
+ # Queries the items in the table by primary key values. This
615
+ # operation is generally more efficient than the scan operation,
616
+ # which always scans the whole table. A Query operation
617
+ # searches for a specific range of keys satisfying a given set
618
+ # of key conditions and does not have the added step of
619
+ # filtering out results.
620
+ #
621
+ # # find all items with a given hash key value
622
+ # items.query(:hash_value => "abc123")
623
+ #
624
+ # # get only the colors attribute of each item
625
+ # items.query(
626
+ # :hash_value => "abc123",
627
+ # :select => [:colors])
628
+ #
629
+ # # find only the items where the range key is between two values
630
+ # items.query(
631
+ # :hash_value => "abc123",
632
+ # :range_value => 1..100
633
+ # )
634
+ #
635
+ # @note This method is only valid for tables with a composite
636
+ # primary key.
637
+ #
638
+ # @param [Hash] options Options for the query. +:hash_value+ is
639
+ # required. Only one of the following options may be set:
640
+ #
641
+ # * +:range_value+
642
+ # * +:range_greater_than+
643
+ # * +:range_less_than+
644
+ # * +:range_gte+
645
+ # * +:range_lte+
646
+ # * +:range_begins_with+
647
+ #
648
+ # @option [Boolean] :scan_index_forward (true) Specifies which
649
+ # order records will be returned. Defaults to returning them
650
+ # in ascending range key order. Pass false to reverse this.
651
+ #
652
+ # @option :select (nil) By default {#query} yields {Item}
653
+ # objects without any attribute data. If you want to select
654
+ # specific attributes, pass a list of them to :select.
655
+ #
656
+ # :select => [:id, :category, :size]
657
+ #
658
+ # If you want to select ALL attributes, pass the symbol +:all+
659
+ #
660
+ # :select => :all
661
+ #
662
+ # @option options [String, Numeric] :hash_value Attribute value
663
+ # of the hash component of the composite primary key.
664
+ #
665
+ # @option options [Array<String, Symbol>, String, Symbol] :select
666
+ # Attribute name or names to retrieve. When this option is
667
+ # set, the returned or yielded items will be instances of
668
+ # {ItemData} instead of {Item}. The special value +:all+
669
+ # indicates that all attributes should be retrieved and
670
+ # returned in ItemData instances.
671
+ #
672
+ # @option options [String, Numeric, Range] :range_value
673
+ # Specifies which range key values to find in the table. If
674
+ # this is a Range, the query will return items with range key
675
+ # values between the beginning and end of the range
676
+ # (inclusive). If it is a string or number, the query will
677
+ # return only the item with that range key value.
678
+ #
679
+ # @option options [String, Numeric] :range_greater_than Matches
680
+ # items where the range key value is greater than this value.
681
+ #
682
+ # @option options [String, Numeric] :range_less_than Matches
683
+ # items where the range key value is less than this value.
684
+ #
685
+ # @option options [String, Numeric] :range_gte Matches items
686
+ # where the range key value is greater than or equal to this
687
+ # value.
688
+ #
689
+ # @option options [String, Numeric] :range_lte Matches items
690
+ # where the range key value is less than or equal to this
691
+ # value.
692
+ #
693
+ # @option options [String, Numeric] :range_begins_with Matches
694
+ # items where the range key value begins with this value.
695
+ # This option is only valid if the range key is a string.
696
+ #
697
+ def query(options = {}, &block)
698
+
699
+ options = options.merge(:query => true)
700
+
701
+ raise ArgumentError, "a hash key value is required" unless
702
+ options[:hash_value]
703
+
704
+ options[:hash_key_value] =
705
+ format_attribute_value(options.delete(:hash_value))
706
+
707
+ range = options.delete(:range_value)
708
+ range_op = nil
709
+ value_list = []
710
+ if range and range.kind_of?(Range)
711
+ value_list = [format_attribute_value(range.begin),
712
+ format_attribute_value(range.end)]
713
+ range_op = "BETWEEN"
714
+ elsif range
715
+ value_list = [format_attribute_value(range)]
716
+ range_op = "EQ"
717
+ end
718
+
719
+ RANGE_KEY_OPTIONS.each do |name, op|
720
+ if value = options.delete(name)
721
+ raise(ArgumentError,
722
+ "only one range key condition is supported") if range_op
723
+ range_op = op
724
+ value_list = [format_attribute_value(value)]
725
+ end
726
+ end
727
+
728
+ options[:range_key_condition] = {
729
+ :attribute_value_list => value_list,
730
+ :comparison_operator => range_op
731
+ } if range_op
732
+
733
+ if select = options.delete(:select)
734
+ options[:item_data] = true
735
+ options[:attributes_to_get] = select.map do |att|
736
+ att.to_s
737
+ end unless select == :all
738
+ end
739
+
740
+ if block
741
+ each(options, &block)
742
+ else
743
+ enumerator(options)
744
+ end
745
+ end
746
+
747
+ # @private
748
+ def with_filter attribute, op, *values
749
+
750
+ values = values.map {|value| format_attribute_value(value) }
751
+
752
+ filter = {
753
+ :attribute_value_list => values,
754
+ :comparison_operator => op
755
+ }
756
+
757
+ if scan_filters.key?(attribute)
758
+ raise(ArgumentError, "conflicting filters for attribute #{attribute}")
759
+ end
760
+
761
+ refine(:scan_filters => scan_filters.merge(attribute => filter))
762
+
763
+ end
764
+
765
+ # @private
766
+ def refine(opts)
767
+ opts = {
768
+ :scan_filters => scan_filters
769
+ }.merge(opts)
770
+ self.class.new(table, opts)
771
+ end
772
+
773
+ protected
774
+ def _each_item next_token, limit, options = {}, &block
775
+
776
+ options[:exclusive_start_key] = next_token if next_token
777
+
778
+ options[:limit] = limit if limit
779
+
780
+ method = options.delete(:query) ? :query : :scan
781
+
782
+ mode = case
783
+ when options.delete(:item_data) then :item_data
784
+ when options[:count] then :count
785
+ else :item
786
+ end
787
+
788
+ response = client.send(method, options)
789
+
790
+ _yield_items(mode, response, &block)
791
+
792
+ response.data["LastEvaluatedKey"]
793
+
794
+ end
795
+
796
+ protected
797
+ def _yield_items mode, response, &block
798
+
799
+ case mode
800
+
801
+ # yield the count of items matching
802
+ when :count
803
+ yield(response.data["Count"])
804
+
805
+ # yeild item data objects
806
+ when :item_data
807
+
808
+ table.assert_schema!
809
+
810
+ #construct_items =
811
+ # (true if request_includes_key?(response.request_options))
812
+
813
+ construct_items = request_includes_key?(response.request_options)
814
+
815
+ response.data["Items"].each do |i|
816
+ attributes = values_from_response_hash(i)
817
+
818
+ item = nil
819
+ item = Item.new_from(:put_item, i, table) if construct_items
820
+
821
+ item_data = ItemData.new(:item => item, :attributes => attributes)
822
+
823
+ yield(item_data)
824
+
825
+ end
826
+
827
+ # yield item objects
828
+ when :item
829
+ response.data["Items"].each do |i|
830
+ item = Item.new_from(:put_item, i, table)
831
+ yield(item)
832
+ end
833
+
834
+ end
835
+
836
+ end
837
+
838
+ protected
839
+ def request_includes_key?(options)
840
+ requested_atts = options[:attributes_to_get]
841
+ requested_atts.nil? or
842
+ (table.simple_key? &&
843
+ requested_atts.include?(table.hash_key.name)) or
844
+ (table.composite_key? &&
845
+ requested_atts.include?(table.hash_key.name) &&
846
+ requested_atts.include?(table.range_key.name))
847
+ end
848
+
849
+ end
850
+
851
+ end
852
+ end