aws_sdk 3.1.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 (390) hide show
  1. data/lib/aws-sdk.rb +14 -0
  2. data/lib/aws.rb +49 -0
  3. data/lib/aws/api_config/AutoScaling-2011-01-01.yml +791 -0
  4. data/lib/aws/api_config/CloudFormation-2010-05-15.yml +303 -0
  5. data/lib/aws/api_config/DynamoDB-2011-12-05.yml +540 -0
  6. data/lib/aws/api_config/EC2-2011-12-15.yml +3638 -0
  7. data/lib/aws/api_config/EC2-2012-04-01.yml +3739 -0
  8. data/lib/aws/api_config/ELB-2011-08-15.yml +512 -0
  9. data/lib/aws/api_config/IAM-2010-05-08.yml +1221 -0
  10. data/lib/aws/api_config/SNS-2010-03-31.yml +248 -0
  11. data/lib/aws/api_config/SQS-2011-10-01.yml +314 -0
  12. data/lib/aws/api_config/STS-2011-06-15.yml +54 -0
  13. data/lib/aws/api_config/SimpleDB-2009-04-15.yml +305 -0
  14. data/lib/aws/api_config/SimpleEmailService-2010-12-01.yml +231 -0
  15. data/lib/aws/api_config/SimpleWorkflow-2012-01-25.yml +721 -0
  16. data/lib/aws/auto_scaling.rb +162 -0
  17. data/lib/aws/auto_scaling/activity.rb +102 -0
  18. data/lib/aws/auto_scaling/activity_collection.rb +82 -0
  19. data/lib/aws/auto_scaling/client.rb +765 -0
  20. data/lib/aws/auto_scaling/config.rb +18 -0
  21. data/lib/aws/auto_scaling/errors.rb +22 -0
  22. data/lib/aws/auto_scaling/group.rb +420 -0
  23. data/lib/aws/auto_scaling/group_collection.rb +96 -0
  24. data/lib/aws/auto_scaling/group_options.rb +146 -0
  25. data/lib/aws/auto_scaling/instance.rb +192 -0
  26. data/lib/aws/auto_scaling/instance_collection.rb +63 -0
  27. data/lib/aws/auto_scaling/launch_configuration.rb +150 -0
  28. data/lib/aws/auto_scaling/launch_configuration_collection.rb +144 -0
  29. data/lib/aws/auto_scaling/notification_configuration.rb +89 -0
  30. data/lib/aws/auto_scaling/notification_configuration_collection.rb +184 -0
  31. data/lib/aws/auto_scaling/request.rb +23 -0
  32. data/lib/aws/auto_scaling/scaling_policy.rb +125 -0
  33. data/lib/aws/auto_scaling/scaling_policy_collection.rb +72 -0
  34. data/lib/aws/auto_scaling/scaling_policy_options.rb +61 -0
  35. data/lib/aws/auto_scaling/scheduled_action.rb +145 -0
  36. data/lib/aws/auto_scaling/scheduled_action_collection.rb +195 -0
  37. data/lib/aws/auto_scaling/tag.rb +59 -0
  38. data/lib/aws/auto_scaling/tag_collection.rb +112 -0
  39. data/lib/aws/cloud_formation.rb +270 -0
  40. data/lib/aws/cloud_formation/client.rb +339 -0
  41. data/lib/aws/cloud_formation/config.rb +18 -0
  42. data/lib/aws/cloud_formation/errors.rb +22 -0
  43. data/lib/aws/cloud_formation/request.rb +29 -0
  44. data/lib/aws/cloud_formation/stack.rb +256 -0
  45. data/lib/aws/cloud_formation/stack_collection.rb +206 -0
  46. data/lib/aws/cloud_formation/stack_event.rb +75 -0
  47. data/lib/aws/cloud_formation/stack_event_collection.rb +47 -0
  48. data/lib/aws/cloud_formation/stack_options.rb +72 -0
  49. data/lib/aws/cloud_formation/stack_output.rb +53 -0
  50. data/lib/aws/cloud_formation/stack_resource.rb +117 -0
  51. data/lib/aws/cloud_formation/stack_resource_collection.rb +84 -0
  52. data/lib/aws/cloud_formation/stack_resource_summary_collection.rb +72 -0
  53. data/lib/aws/cloud_formation/stack_summary.rb +71 -0
  54. data/lib/aws/cloud_formation/stack_summary_collection.rb +127 -0
  55. data/lib/aws/core.rb +474 -0
  56. data/lib/aws/core/async_handle.rb +90 -0
  57. data/lib/aws/core/autoloader.rb +64 -0
  58. data/lib/aws/core/cacheable.rb +78 -0
  59. data/lib/aws/core/client.rb +541 -0
  60. data/lib/aws/core/client/query_json.rb +110 -0
  61. data/lib/aws/core/client/query_xml.rb +122 -0
  62. data/lib/aws/core/collection.rb +234 -0
  63. data/lib/aws/core/collection/limitable.rb +99 -0
  64. data/lib/aws/core/collection/simple.rb +90 -0
  65. data/lib/aws/core/configuration.rb +445 -0
  66. data/lib/aws/core/data.rb +242 -0
  67. data/lib/aws/core/default_signer.rb +67 -0
  68. data/lib/aws/core/http/curb_handler.rb +136 -0
  69. data/lib/aws/core/http/handler.rb +77 -0
  70. data/lib/aws/core/http/httparty_handler.rb +114 -0
  71. data/lib/aws/core/http/net_http_handler.rb +85 -0
  72. data/lib/aws/core/http/request.rb +250 -0
  73. data/lib/aws/core/http/response.rb +74 -0
  74. data/lib/aws/core/indifferent_hash.rb +88 -0
  75. data/lib/aws/core/inflection.rb +47 -0
  76. data/lib/aws/core/lazy_error_classes.rb +90 -0
  77. data/lib/aws/core/log_formatter.rb +454 -0
  78. data/lib/aws/core/meta_utils.rb +45 -0
  79. data/lib/aws/core/model.rb +57 -0
  80. data/lib/aws/core/naming.rb +30 -0
  81. data/lib/aws/core/option_grammar.rb +700 -0
  82. data/lib/aws/core/page_result.rb +73 -0
  83. data/lib/aws/core/policy.rb +916 -0
  84. data/lib/aws/core/resource.rb +408 -0
  85. data/lib/aws/core/resource_cache.rb +40 -0
  86. data/lib/aws/core/response.rb +202 -0
  87. data/lib/aws/core/response_cache.rb +50 -0
  88. data/lib/aws/core/service_interface.rb +61 -0
  89. data/lib/aws/core/session_signer.rb +90 -0
  90. data/lib/aws/core/signature/version_2.rb +42 -0
  91. data/lib/aws/core/signature/version_3.rb +73 -0
  92. data/lib/aws/core/signature/version_3_http.rb +72 -0
  93. data/lib/aws/core/signature/version_4.rb +138 -0
  94. data/lib/aws/core/uri_escape.rb +42 -0
  95. data/lib/aws/core/xml/frame.rb +242 -0
  96. data/lib/aws/core/xml/frame_stack.rb +85 -0
  97. data/lib/aws/core/xml/grammar.rb +299 -0
  98. data/lib/aws/core/xml/parser.rb +70 -0
  99. data/lib/aws/core/xml/root_frame.rb +65 -0
  100. data/lib/aws/core/xml/sax_handlers/libxml.rb +47 -0
  101. data/lib/aws/core/xml/sax_handlers/nokogiri.rb +55 -0
  102. data/lib/aws/core/xml/sax_handlers/ox.rb +41 -0
  103. data/lib/aws/core/xml/sax_handlers/rexml.rb +43 -0
  104. data/lib/aws/core/xml/stub.rb +123 -0
  105. data/lib/aws/dynamo_db.rb +213 -0
  106. data/lib/aws/dynamo_db/attribute_collection.rb +460 -0
  107. data/lib/aws/dynamo_db/batch_get.rb +206 -0
  108. data/lib/aws/dynamo_db/batch_write.rb +251 -0
  109. data/lib/aws/dynamo_db/client.rb +888 -0
  110. data/lib/aws/dynamo_db/config.rb +20 -0
  111. data/lib/aws/dynamo_db/errors.rb +20 -0
  112. data/lib/aws/dynamo_db/expectations.rb +40 -0
  113. data/lib/aws/dynamo_db/item.rb +130 -0
  114. data/lib/aws/dynamo_db/item_collection.rb +852 -0
  115. data/lib/aws/dynamo_db/item_data.rb +31 -0
  116. data/lib/aws/dynamo_db/keys.rb +41 -0
  117. data/lib/aws/dynamo_db/primary_key_element.rb +47 -0
  118. data/lib/aws/dynamo_db/request.rb +28 -0
  119. data/lib/aws/dynamo_db/resource.rb +33 -0
  120. data/lib/aws/dynamo_db/table.rb +489 -0
  121. data/lib/aws/dynamo_db/table_collection.rb +165 -0
  122. data/lib/aws/dynamo_db/types.rb +86 -0
  123. data/lib/aws/ec2.rb +431 -0
  124. data/lib/aws/ec2/attachment.rb +140 -0
  125. data/lib/aws/ec2/attachment_collection.rb +54 -0
  126. data/lib/aws/ec2/availability_zone.rb +87 -0
  127. data/lib/aws/ec2/availability_zone_collection.rb +43 -0
  128. data/lib/aws/ec2/block_device_mappings.rb +53 -0
  129. data/lib/aws/ec2/client.rb +4121 -0
  130. data/lib/aws/ec2/collection.rb +36 -0
  131. data/lib/aws/ec2/config.rb +18 -0
  132. data/lib/aws/ec2/config_transform.rb +63 -0
  133. data/lib/aws/ec2/customer_gateway.rb +90 -0
  134. data/lib/aws/ec2/customer_gateway_collection.rb +73 -0
  135. data/lib/aws/ec2/dhcp_options.rb +106 -0
  136. data/lib/aws/ec2/dhcp_options_collection.rb +87 -0
  137. data/lib/aws/ec2/elastic_ip.rb +157 -0
  138. data/lib/aws/ec2/elastic_ip_collection.rb +97 -0
  139. data/lib/aws/ec2/errors.rb +32 -0
  140. data/lib/aws/ec2/filtered_collection.rb +90 -0
  141. data/lib/aws/ec2/has_permissions.rb +44 -0
  142. data/lib/aws/ec2/image.rb +254 -0
  143. data/lib/aws/ec2/image_collection.rb +228 -0
  144. data/lib/aws/ec2/instance.rb +669 -0
  145. data/lib/aws/ec2/instance_collection.rb +346 -0
  146. data/lib/aws/ec2/internet_gateway.rb +122 -0
  147. data/lib/aws/ec2/internet_gateway/attachment.rb +78 -0
  148. data/lib/aws/ec2/internet_gateway_collection.rb +54 -0
  149. data/lib/aws/ec2/key_pair.rb +82 -0
  150. data/lib/aws/ec2/key_pair_collection.rb +99 -0
  151. data/lib/aws/ec2/network_acl.rb +256 -0
  152. data/lib/aws/ec2/network_acl/association.rb +56 -0
  153. data/lib/aws/ec2/network_acl/entry.rb +147 -0
  154. data/lib/aws/ec2/network_acl_collection.rb +64 -0
  155. data/lib/aws/ec2/network_interface.rb +228 -0
  156. data/lib/aws/ec2/network_interface/attachment.rb +100 -0
  157. data/lib/aws/ec2/network_interface_collection.rb +103 -0
  158. data/lib/aws/ec2/permission_collection.rb +174 -0
  159. data/lib/aws/ec2/region.rb +97 -0
  160. data/lib/aws/ec2/region_collection.rb +51 -0
  161. data/lib/aws/ec2/request.rb +22 -0
  162. data/lib/aws/ec2/reserved_instances.rb +53 -0
  163. data/lib/aws/ec2/reserved_instances_collection.rb +40 -0
  164. data/lib/aws/ec2/reserved_instances_offering.rb +58 -0
  165. data/lib/aws/ec2/reserved_instances_offering_collection.rb +39 -0
  166. data/lib/aws/ec2/resource.rb +161 -0
  167. data/lib/aws/ec2/resource_tag_collection.rb +211 -0
  168. data/lib/aws/ec2/route_table.rb +205 -0
  169. data/lib/aws/ec2/route_table/association.rb +119 -0
  170. data/lib/aws/ec2/route_table/route.rb +113 -0
  171. data/lib/aws/ec2/route_table_collection.rb +72 -0
  172. data/lib/aws/ec2/security_group.rb +458 -0
  173. data/lib/aws/ec2/security_group/egress_ip_permission_collection.rb +63 -0
  174. data/lib/aws/ec2/security_group/ingress_ip_permission_collection.rb +61 -0
  175. data/lib/aws/ec2/security_group/ip_permission.rb +128 -0
  176. data/lib/aws/ec2/security_group_collection.rb +135 -0
  177. data/lib/aws/ec2/snapshot.rb +143 -0
  178. data/lib/aws/ec2/snapshot_collection.rb +131 -0
  179. data/lib/aws/ec2/subnet.rb +161 -0
  180. data/lib/aws/ec2/subnet_collection.rb +115 -0
  181. data/lib/aws/ec2/tag.rb +81 -0
  182. data/lib/aws/ec2/tag_collection.rb +107 -0
  183. data/lib/aws/ec2/tagged_collection.rb +53 -0
  184. data/lib/aws/ec2/tagged_item.rb +85 -0
  185. data/lib/aws/ec2/volume.rb +170 -0
  186. data/lib/aws/ec2/volume_collection.rb +97 -0
  187. data/lib/aws/ec2/vpc.rb +166 -0
  188. data/lib/aws/ec2/vpc_collection.rb +70 -0
  189. data/lib/aws/ec2/vpn_connection.rb +99 -0
  190. data/lib/aws/ec2/vpn_connection/telemetry.rb +49 -0
  191. data/lib/aws/ec2/vpn_connection_collection.rb +96 -0
  192. data/lib/aws/ec2/vpn_gateway.rb +123 -0
  193. data/lib/aws/ec2/vpn_gateway/attachment.rb +45 -0
  194. data/lib/aws/ec2/vpn_gateway_collection.rb +77 -0
  195. data/lib/aws/elb.rb +65 -0
  196. data/lib/aws/elb/availability_zone_collection.rb +138 -0
  197. data/lib/aws/elb/backend_server_policy_collection.rb +140 -0
  198. data/lib/aws/elb/client.rb +539 -0
  199. data/lib/aws/elb/config.rb +18 -0
  200. data/lib/aws/elb/errors.rb +26 -0
  201. data/lib/aws/elb/instance_collection.rb +174 -0
  202. data/lib/aws/elb/listener.rb +189 -0
  203. data/lib/aws/elb/listener_collection.rb +119 -0
  204. data/lib/aws/elb/listener_opts.rb +45 -0
  205. data/lib/aws/elb/load_balancer.rb +253 -0
  206. data/lib/aws/elb/load_balancer_collection.rb +113 -0
  207. data/lib/aws/elb/load_balancer_policy.rb +93 -0
  208. data/lib/aws/elb/load_balancer_policy_collection.rb +208 -0
  209. data/lib/aws/elb/request.rb +23 -0
  210. data/lib/aws/errors.rb +122 -0
  211. data/lib/aws/iam.rb +418 -0
  212. data/lib/aws/iam/access_key.rb +180 -0
  213. data/lib/aws/iam/access_key_collection.rb +128 -0
  214. data/lib/aws/iam/account_alias_collection.rb +79 -0
  215. data/lib/aws/iam/client.rb +1609 -0
  216. data/lib/aws/iam/collection.rb +83 -0
  217. data/lib/aws/iam/config.rb +18 -0
  218. data/lib/aws/iam/errors.rb +22 -0
  219. data/lib/aws/iam/group.rb +111 -0
  220. data/lib/aws/iam/group_collection.rb +132 -0
  221. data/lib/aws/iam/group_policy_collection.rb +47 -0
  222. data/lib/aws/iam/group_user_collection.rb +84 -0
  223. data/lib/aws/iam/login_profile.rb +99 -0
  224. data/lib/aws/iam/mfa_device.rb +52 -0
  225. data/lib/aws/iam/mfa_device_collection.rb +127 -0
  226. data/lib/aws/iam/policy.rb +46 -0
  227. data/lib/aws/iam/policy_collection.rb +188 -0
  228. data/lib/aws/iam/request.rb +29 -0
  229. data/lib/aws/iam/resource.rb +71 -0
  230. data/lib/aws/iam/server_certificate.rb +141 -0
  231. data/lib/aws/iam/server_certificate_collection.rb +138 -0
  232. data/lib/aws/iam/signing_certificate.rb +169 -0
  233. data/lib/aws/iam/signing_certificate_collection.rb +131 -0
  234. data/lib/aws/iam/user.rb +205 -0
  235. data/lib/aws/iam/user_collection.rb +133 -0
  236. data/lib/aws/iam/user_group_collection.rb +98 -0
  237. data/lib/aws/iam/user_policy.rb +90 -0
  238. data/lib/aws/iam/user_policy_collection.rb +45 -0
  239. data/lib/aws/iam/virtual_mfa_device.rb +139 -0
  240. data/lib/aws/iam/virtual_mfa_device_collection.rb +73 -0
  241. data/lib/aws/rails.rb +195 -0
  242. data/lib/aws/record.rb +116 -0
  243. data/lib/aws/record/abstract_base.rb +645 -0
  244. data/lib/aws/record/attributes.rb +384 -0
  245. data/lib/aws/record/conversion.rb +38 -0
  246. data/lib/aws/record/dirty_tracking.rb +285 -0
  247. data/lib/aws/record/errors.rb +143 -0
  248. data/lib/aws/record/exceptions.rb +48 -0
  249. data/lib/aws/record/hash_model.rb +161 -0
  250. data/lib/aws/record/hash_model/attributes.rb +182 -0
  251. data/lib/aws/record/hash_model/finder_methods.rb +172 -0
  252. data/lib/aws/record/hash_model/scope.rb +108 -0
  253. data/lib/aws/record/model.rb +427 -0
  254. data/lib/aws/record/model/attributes.rb +379 -0
  255. data/lib/aws/record/model/finder_methods.rb +232 -0
  256. data/lib/aws/record/model/scope.rb +213 -0
  257. data/lib/aws/record/naming.rb +31 -0
  258. data/lib/aws/record/scope.rb +199 -0
  259. data/lib/aws/record/validations.rb +694 -0
  260. data/lib/aws/record/validator.rb +237 -0
  261. data/lib/aws/record/validators/acceptance.rb +51 -0
  262. data/lib/aws/record/validators/block.rb +38 -0
  263. data/lib/aws/record/validators/confirmation.rb +43 -0
  264. data/lib/aws/record/validators/count.rb +108 -0
  265. data/lib/aws/record/validators/exclusion.rb +43 -0
  266. data/lib/aws/record/validators/format.rb +57 -0
  267. data/lib/aws/record/validators/inclusion.rb +56 -0
  268. data/lib/aws/record/validators/length.rb +107 -0
  269. data/lib/aws/record/validators/method.rb +33 -0
  270. data/lib/aws/record/validators/numericality.rb +138 -0
  271. data/lib/aws/record/validators/presence.rb +45 -0
  272. data/lib/aws/s3.rb +135 -0
  273. data/lib/aws/s3/access_control_list.rb +250 -0
  274. data/lib/aws/s3/acl_object.rb +264 -0
  275. data/lib/aws/s3/bucket.rb +393 -0
  276. data/lib/aws/s3/bucket_collection.rb +143 -0
  277. data/lib/aws/s3/bucket_lifecycle_configuration.rb +360 -0
  278. data/lib/aws/s3/bucket_version_collection.rb +77 -0
  279. data/lib/aws/s3/client.rb +1184 -0
  280. data/lib/aws/s3/client/xml.rb +177 -0
  281. data/lib/aws/s3/config.rb +26 -0
  282. data/lib/aws/s3/data_options.rb +100 -0
  283. data/lib/aws/s3/errors.rb +81 -0
  284. data/lib/aws/s3/multipart_upload.rb +317 -0
  285. data/lib/aws/s3/multipart_upload_collection.rb +68 -0
  286. data/lib/aws/s3/object_collection.rb +337 -0
  287. data/lib/aws/s3/object_metadata.rb +96 -0
  288. data/lib/aws/s3/object_upload_collection.rb +77 -0
  289. data/lib/aws/s3/object_version.rb +143 -0
  290. data/lib/aws/s3/object_version_collection.rb +89 -0
  291. data/lib/aws/s3/paginated_collection.rb +75 -0
  292. data/lib/aws/s3/policy.rb +74 -0
  293. data/lib/aws/s3/prefix_and_delimiter_collection.rb +47 -0
  294. data/lib/aws/s3/prefixed_collection.rb +81 -0
  295. data/lib/aws/s3/presigned_post.rb +553 -0
  296. data/lib/aws/s3/request.rb +201 -0
  297. data/lib/aws/s3/s3_object.rb +1037 -0
  298. data/lib/aws/s3/tree.rb +118 -0
  299. data/lib/aws/s3/tree/branch_node.rb +68 -0
  300. data/lib/aws/s3/tree/child_collection.rb +104 -0
  301. data/lib/aws/s3/tree/leaf_node.rb +94 -0
  302. data/lib/aws/s3/tree/node.rb +22 -0
  303. data/lib/aws/s3/tree/parent.rb +87 -0
  304. data/lib/aws/s3/uploaded_part.rb +80 -0
  305. data/lib/aws/s3/uploaded_part_collection.rb +84 -0
  306. data/lib/aws/simple_db.rb +217 -0
  307. data/lib/aws/simple_db/attribute.rb +154 -0
  308. data/lib/aws/simple_db/attribute_collection.rb +231 -0
  309. data/lib/aws/simple_db/client.rb +349 -0
  310. data/lib/aws/simple_db/config.rb +20 -0
  311. data/lib/aws/simple_db/consistent_read_option.rb +42 -0
  312. data/lib/aws/simple_db/delete_attributes.rb +62 -0
  313. data/lib/aws/simple_db/domain.rb +121 -0
  314. data/lib/aws/simple_db/domain_collection.rb +113 -0
  315. data/lib/aws/simple_db/domain_metadata.rb +110 -0
  316. data/lib/aws/simple_db/errors.rb +55 -0
  317. data/lib/aws/simple_db/expect_condition_option.rb +45 -0
  318. data/lib/aws/simple_db/item.rb +93 -0
  319. data/lib/aws/simple_db/item_collection.rb +649 -0
  320. data/lib/aws/simple_db/item_data.rb +73 -0
  321. data/lib/aws/simple_db/put_attributes.rb +60 -0
  322. data/lib/aws/simple_db/request.rb +23 -0
  323. data/lib/aws/simple_email_service.rb +426 -0
  324. data/lib/aws/simple_email_service/client.rb +286 -0
  325. data/lib/aws/simple_email_service/config.rb +19 -0
  326. data/lib/aws/simple_email_service/email_address_collection.rb +69 -0
  327. data/lib/aws/simple_email_service/errors.rb +22 -0
  328. data/lib/aws/simple_email_service/identity.rb +91 -0
  329. data/lib/aws/simple_email_service/identity_collection.rb +81 -0
  330. data/lib/aws/simple_email_service/quotas.rb +64 -0
  331. data/lib/aws/simple_email_service/request.rb +29 -0
  332. data/lib/aws/simple_workflow.rb +226 -0
  333. data/lib/aws/simple_workflow/activity_task.rb +173 -0
  334. data/lib/aws/simple_workflow/activity_task_collection.rb +123 -0
  335. data/lib/aws/simple_workflow/activity_type.rb +131 -0
  336. data/lib/aws/simple_workflow/activity_type_collection.rb +93 -0
  337. data/lib/aws/simple_workflow/client.rb +1434 -0
  338. data/lib/aws/simple_workflow/config.rb +18 -0
  339. data/lib/aws/simple_workflow/count.rb +49 -0
  340. data/lib/aws/simple_workflow/decision_task.rb +601 -0
  341. data/lib/aws/simple_workflow/decision_task_collection.rb +225 -0
  342. data/lib/aws/simple_workflow/domain.rb +122 -0
  343. data/lib/aws/simple_workflow/domain_collection.rb +169 -0
  344. data/lib/aws/simple_workflow/errors.rb +20 -0
  345. data/lib/aws/simple_workflow/history_event.rb +276 -0
  346. data/lib/aws/simple_workflow/history_event_collection.rb +76 -0
  347. data/lib/aws/simple_workflow/option_formatters.rb +82 -0
  348. data/lib/aws/simple_workflow/request.rb +36 -0
  349. data/lib/aws/simple_workflow/resource.rb +94 -0
  350. data/lib/aws/simple_workflow/type.rb +89 -0
  351. data/lib/aws/simple_workflow/type_collection.rb +140 -0
  352. data/lib/aws/simple_workflow/workflow_execution.rb +386 -0
  353. data/lib/aws/simple_workflow/workflow_execution_collection.rb +617 -0
  354. data/lib/aws/simple_workflow/workflow_type.rb +177 -0
  355. data/lib/aws/simple_workflow/workflow_type_collection.rb +91 -0
  356. data/lib/aws/sns.rb +74 -0
  357. data/lib/aws/sns/client.rb +371 -0
  358. data/lib/aws/sns/config.rb +18 -0
  359. data/lib/aws/sns/errors.rb +22 -0
  360. data/lib/aws/sns/has_delivery_policy.rb +68 -0
  361. data/lib/aws/sns/policy.rb +47 -0
  362. data/lib/aws/sns/request.rb +23 -0
  363. data/lib/aws/sns/subscription.rb +144 -0
  364. data/lib/aws/sns/subscription_collection.rb +80 -0
  365. data/lib/aws/sns/topic.rb +403 -0
  366. data/lib/aws/sns/topic_collection.rb +67 -0
  367. data/lib/aws/sns/topic_subscription_collection.rb +55 -0
  368. data/lib/aws/sqs.rb +79 -0
  369. data/lib/aws/sqs/client.rb +360 -0
  370. data/lib/aws/sqs/config.rb +18 -0
  371. data/lib/aws/sqs/errors.rb +101 -0
  372. data/lib/aws/sqs/policy.rb +48 -0
  373. data/lib/aws/sqs/queue.rb +725 -0
  374. data/lib/aws/sqs/queue_collection.rb +170 -0
  375. data/lib/aws/sqs/received_message.rb +181 -0
  376. data/lib/aws/sqs/received_sns_message.rb +112 -0
  377. data/lib/aws/sqs/request.rb +43 -0
  378. data/lib/aws/sts.rb +152 -0
  379. data/lib/aws/sts/client.rb +105 -0
  380. data/lib/aws/sts/config.rb +18 -0
  381. data/lib/aws/sts/errors.rb +22 -0
  382. data/lib/aws/sts/federated_session.rb +56 -0
  383. data/lib/aws/sts/policy.rb +30 -0
  384. data/lib/aws/sts/request.rb +29 -0
  385. data/lib/aws/sts/session.rb +48 -0
  386. data/lib/net/http/connection_pool.rb +210 -0
  387. data/lib/net/http/connection_pool/connection.rb +132 -0
  388. data/lib/net/http/connection_pool/session.rb +93 -0
  389. data/lib/user.rb +49 -0
  390. metadata +433 -0
@@ -0,0 +1,90 @@
1
+ # Copyright 2011-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ module AWS
15
+ module Core
16
+
17
+ # Mixin that provides a generic callback facility for asynchronous
18
+ # tasks that can either succeed or fail.
19
+ module AsyncHandle
20
+
21
+ # Called to signal success and fire off the success and complete callbacks.
22
+ def signal_success
23
+ __send_signal(:success)
24
+ end
25
+
26
+ # Called to signal failure and fire off the failure and complete callbacks.
27
+ def signal_failure
28
+ __send_signal(:failure)
29
+ end
30
+
31
+ # Registers a callback to be called on successful completion of
32
+ # the task.
33
+ #
34
+ # handle.on_success { puts "It worked!" }
35
+ #
36
+ # If this is called when the task has already completed
37
+ # successfully, it will call the callback immediately.
38
+ def on_success(&block)
39
+ if @_async_status == :success
40
+ block.call
41
+ else
42
+ (@_async_callbacks ||= []) << { :success => block }
43
+ end
44
+ end
45
+
46
+ # Registers a callback to be called when the task fails.
47
+ #
48
+ # handle.on_failure { puts "It didn't work!" }
49
+ #
50
+ # If this is called when the task has already failed, it will
51
+ # call the callback immediately.
52
+ def on_failure(&block)
53
+ if @_async_status == :failure
54
+ block.call
55
+ else
56
+ (@_async_callbacks ||= []) << { :failure => block }
57
+ end
58
+ end
59
+
60
+ # Registers a callback to be called when the task is complete,
61
+ # regardless of its status. Yields the status to the block.
62
+ #
63
+ # handle.on_complete do |status|
64
+ # puts "It #{status == :success ? 'did' : 'did not'} work!"
65
+ # end
66
+ #
67
+ # If this is called when the task has already completed, it will
68
+ # call the callback immediately.
69
+ def on_complete(&block)
70
+ if !@_async_status.nil?
71
+ block.call(@_async_status)
72
+ else
73
+ (@_async_callbacks ||= []) << {
74
+ :failure => lambda { block.call(:failure) },
75
+ :success => lambda { block.call(:success) }
76
+ }
77
+ end
78
+ end
79
+
80
+ private
81
+ def __send_signal(kind)
82
+ @_async_status = kind
83
+ @_async_callbacks.map do |cb|
84
+ cb[kind]
85
+ end.compact.each {|block| block.call } if @_async_callbacks
86
+ end
87
+
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,64 @@
1
+ # Copyright 2011-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ require 'set'
15
+
16
+ module AWS
17
+
18
+ @@eager = false
19
+ @@autoloads = {}
20
+
21
+ def self.register_autoloads klass, prefix = nil, &block
22
+ autoloader = Core::Autoloader.new(klass, prefix)
23
+ autoloader.instance_eval(&block)
24
+ autoloader.autoloads.each_pair do |const_name, file_path|
25
+ require(file_path) if @@eager
26
+ @@autoloads["#{klass}::#{const_name}"] = file_path
27
+ end
28
+ end
29
+
30
+ def self.eager_autoload!
31
+ unless @@eager
32
+ @@eager = true
33
+ @@autoloads.values.uniq.each {|file_path| require(file_path) }
34
+ end
35
+ end
36
+
37
+ def self.autoloads
38
+ @@autoloads
39
+ end
40
+
41
+ module Core
42
+
43
+ # @private
44
+ class Autoloader
45
+
46
+ def initialize klass, prefix = nil
47
+ @klass = klass
48
+ @prefix = prefix || klass.name.gsub(/::/, '/').downcase
49
+ @autoloads = {}
50
+ end
51
+
52
+ attr_reader :autoloads
53
+
54
+ def autoload const_name, file_name
55
+ path = "#{@prefix}/#{file_name}"
56
+ @klass.autoload(const_name, path)
57
+ @autoloads[const_name] = path
58
+ end
59
+
60
+ end
61
+
62
+ end
63
+
64
+ end
@@ -0,0 +1,78 @@
1
+ # Copyright 2011-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ module AWS
15
+ module Core
16
+
17
+ # @private
18
+ module Cacheable
19
+
20
+ # @private
21
+ class NoData < StandardError; end
22
+
23
+ def self.included base
24
+ base.extend Naming unless base.respond_to?(:service_ruby_name)
25
+ end
26
+
27
+ # @private
28
+ protected
29
+ def local_cache_key
30
+ raise NotImplementedError
31
+ end
32
+
33
+ # @private
34
+ protected
35
+ def cache_key
36
+ @cache_key ||= begin
37
+ endpoint_method = self.class.service_ruby_name + "_endpoint"
38
+ config.signer.access_key_id + ":" +
39
+ config.send(endpoint_method) + ":" +
40
+ self.class.name + ":" +
41
+ local_cache_key
42
+ end
43
+ end
44
+
45
+ # @private
46
+ public
47
+ def retrieve_attribute attr, &block
48
+
49
+ if cache = AWS.response_cache
50
+
51
+ if cache.resource_cache.cached?(cache_key, attr.name)
52
+ return cache.resource_cache.get(cache_key, attr.name)
53
+ end
54
+
55
+ cache.select(*attr.request_types).each do |response|
56
+ if attributes = attributes_from_response(response)
57
+ cache.resource_cache.store(cache_key, attributes)
58
+ return attributes[attr.name] if attributes.key?(attr.name)
59
+ end
60
+ end
61
+
62
+ end
63
+
64
+ response = yield
65
+
66
+ if attributes = attributes_from_response(response)
67
+ if cache = AWS.response_cache
68
+ cache.resource_cache.store(cache_key, attributes)
69
+ end
70
+ attributes[attr.name] if attributes.key?(attr.name)
71
+ else
72
+ raise NoData.new("no data in #{response.request_type} response")
73
+ end
74
+ end
75
+
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,541 @@
1
+ # Copyright 2011-2012 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ require 'set'
15
+ require 'aws/core/client/query_xml'
16
+ require 'aws/core/client/query_json'
17
+ require 'json'
18
+
19
+ module AWS
20
+ module Core
21
+
22
+ # Base client class for all of the Amazon AWS service clients.
23
+ class Client
24
+
25
+ extend Naming
26
+
27
+ # @private
28
+ CACHEABLE_REQUESTS = Set[]
29
+
30
+ # Creates a new low-level client.
31
+ #
32
+ # == Required Options
33
+ #
34
+ # To create a client you must provide access to AWS credentials.
35
+ # There are two options:
36
+ #
37
+ # * +:signer+ -- An object that responds to +access_key_id+
38
+ # (to return the AWS Access Key ID) and to
39
+ # <code>sign(string_to_sign)</code> (to return a signature
40
+ # for a given string). An example implementation is
41
+ # AWS::Core::DefaultSigner. This option is useful if you want to
42
+ # more tightly control access to your secret access key (for
43
+ # example by moving the signature computation into a
44
+ # different process).
45
+ #
46
+ # * +:access_key_id+ and +:secret_access_key+ -- You can use
47
+ # these options to provide the AWS Access Key ID and AWS
48
+ # Secret Access Key directly to the client.
49
+ #
50
+ # == Optional
51
+ #
52
+ # * +:http_handler+ -- Any object that implements a
53
+ # <code>handle(request, response)</code> method; an example
54
+ # is BuiltinHttpHandler. This method is used to perform the
55
+ # HTTP requests that this client constructs.
56
+ #
57
+ def initialize options = {}
58
+
59
+ options = options.dup # so we don't modify the options passed in
60
+
61
+ @service_ruby_name = self.class.service_ruby_name
62
+
63
+ # translate these into service specific configuration options,
64
+ # e.g. :endpoint into :s3_endpoint
65
+ [:endpoint, :region, :port].each do |opt|
66
+ if options[opt]
67
+ options[:"#{service_ruby_name}_#{opt}"] = options.delete(opt)
68
+ end
69
+ end
70
+
71
+ @config = options.delete(:config)
72
+ @config ||= AWS.config
73
+ @config = @config.with(options)
74
+
75
+ @signer = @config.signer
76
+ @http_handler = @config.http_handler
77
+ @endpoint = config.send(:"#{service_ruby_name}_endpoint")
78
+ @port = config.send(:"#{service_ruby_name}_port")
79
+
80
+ end
81
+
82
+ # @return [Configuration] This clients configuration.
83
+ attr_reader :config
84
+
85
+ # @return [DefaultSigner,Object] Returns the signer for this client.
86
+ # This is normally a DefaultSigner, but it can be configured to
87
+ # an other object.
88
+ # @private
89
+ attr_reader :signer
90
+
91
+ # @return [String] The snake-cased ruby name for the service
92
+ # (e.g. 's3', 'iam', 'dynamo_db', etc).
93
+ # @private
94
+ attr_reader :service_ruby_name
95
+
96
+ # @return [Integer] What port this client makes requests via.
97
+ # @private
98
+ attr_reader :port
99
+
100
+ # @return [String] Returns the service endpoint (hostname) this client
101
+ # makes requests against.
102
+ # @private
103
+ attr_reader :endpoint
104
+
105
+ # @return (see Client.operations)
106
+ def operations
107
+ self.class.operations
108
+ end
109
+
110
+ # Returns a copy of the client with a different HTTP handler.
111
+ # You can pass an object like BuiltinHttpHandler or you can
112
+ # use a block; for example:
113
+ #
114
+ # s3_with_logging = s3.with_http_handler do |request, response|
115
+ # $stderr.puts request.inspect
116
+ # super
117
+ # end
118
+ #
119
+ # The block executes in the context of an HttpHandler
120
+ # instance, and +super+ delegates to the HTTP handler used by
121
+ # this client. This provides an easy way to spy on requests
122
+ # and responses. See HttpHandler, HttpRequest, and
123
+ # HttpResponse for more details on how to implement a fully
124
+ # functional HTTP handler using a different HTTP library than
125
+ # the one that ships with Ruby.
126
+ # @param handler (nil) A new http handler. Leave blank and pass a
127
+ # block to wrap the current handler with the block.
128
+ # @return [Core::Client] Returns a new instance of the client class with
129
+ # the modified or wrapped http handler.
130
+ def with_http_handler(handler = nil, &blk)
131
+ handler ||= Http::Handler.new(@http_handler, &blk)
132
+ with_options(:http_handler => handler)
133
+ end
134
+
135
+ # @param [Hash] options
136
+ # @see AWS.config detailed list of accepted options.
137
+ def with_options options
138
+ with_config(config.with(options))
139
+ end
140
+
141
+ # @param [Configuration] config The configuration object to use.
142
+ # @return [Core::Client] Returns a new client object with the given
143
+ # configuration.
144
+ def with_config config
145
+ self.class.new(:config => config)
146
+ end
147
+
148
+ # The stub returned is memoized.
149
+ # @see new_stub_for
150
+ # @private
151
+ def stub_for method_name
152
+ @stubs ||= {}
153
+ @stubs[method_name] ||= new_stub_for(method_name)
154
+ end
155
+
156
+ # Primarily used for testing, this method returns an empty psuedo
157
+ # service response without making a request. Its used primarily for
158
+ # testing the ligher level service interfaces.
159
+ # @private
160
+ def new_stub_for method_name
161
+ response = Response.new(Http::Request.new, Http::Response.new)
162
+ response.request_type = method_name
163
+ response.request_options = {}
164
+ send("simulate_#{method_name}_response", response)
165
+ response.signal_success
166
+ response
167
+ end
168
+
169
+ protected
170
+
171
+ def new_request
172
+ eval(self.class.name.sub(/::Client$/, ''))::Request.new
173
+ end
174
+
175
+ def new_response(*args, &block)
176
+ Response.new(*args, &block)
177
+ end
178
+
179
+ def make_async_request response
180
+
181
+ pauses = async_request_with_retries(response, response.http_request)
182
+
183
+ response
184
+
185
+ end
186
+
187
+ def async_request_with_retries response, http_request, retry_delays = nil
188
+
189
+ response.http_response = Http::Response.new
190
+
191
+ handle = Object.new
192
+ handle.extend AsyncHandle
193
+ handle.on_complete do |status|
194
+ case status
195
+ when :failure
196
+ response.error = StandardError.new("failed to contact the service")
197
+ response.signal_failure
198
+ when :success
199
+ populate_error(response)
200
+ retry_delays ||= sleep_durations(response)
201
+ if should_retry?(response) and !retry_delays.empty?
202
+ rebuild_http_request(response)
203
+ @http_handler.sleep_with_callback(retry_delays.shift) do
204
+ async_request_with_retries(response, response.http_request, retry_delays)
205
+ end
206
+ else
207
+ response.error ?
208
+ response.signal_failure :
209
+ response.signal_success
210
+ end
211
+ end
212
+ end
213
+
214
+ @http_handler.handle_async(http_request, response.http_response, handle)
215
+
216
+ end
217
+
218
+ def make_sync_request response
219
+ retry_server_errors do
220
+
221
+ response.http_response = http_response =
222
+ Http::Response.new
223
+
224
+ @http_handler.handle(response.http_request, http_response)
225
+
226
+ populate_error(response)
227
+ response.signal_success unless response.error
228
+ response
229
+
230
+ end
231
+ end
232
+
233
+ def retry_server_errors &block
234
+
235
+ response = yield
236
+
237
+ sleeps = sleep_durations(response)
238
+ while should_retry?(response)
239
+ break if sleeps.empty?
240
+ Kernel.sleep(sleeps.shift)
241
+ # rebuild the request to get a fresh signature
242
+ rebuild_http_request(response)
243
+ response = yield
244
+ end
245
+
246
+ response
247
+
248
+ end
249
+
250
+ def rebuild_http_request response
251
+ response.rebuild_request
252
+ response.retry_count += 1
253
+ end
254
+
255
+ def sleep_durations response
256
+ factor = scaling_factor(response)
257
+ Array.new(config.max_retries) {|n| (2 ** n) * factor }
258
+ end
259
+
260
+ def scaling_factor response
261
+ response.throttled? ? (0.5 + Kernel.rand * 0.1) : 0.3
262
+ end
263
+
264
+ def should_retry? response
265
+ response.timeout? or
266
+ response.throttled? or
267
+ response.error.kind_of?(Errors::ServerError)
268
+ end
269
+
270
+ def return_or_raise options, &block
271
+ response = yield
272
+ unless options[:async]
273
+ raise response.error if response.error
274
+ end
275
+ response
276
+ end
277
+
278
+ # Yields to the given block (which should be making a
279
+ # request and returning a {Response} object). The results of the
280
+ # request/response are logged.
281
+ #
282
+ # @param [Hash] options
283
+ # @option options [Boolean] :async
284
+ # @return [Response]
285
+ def log_client_request options, &block
286
+
287
+ # time the request, retries and all
288
+ start = Time.now
289
+ response = yield
290
+ response.duration = Time.now - start
291
+
292
+ if options[:async]
293
+ response.on_complete { log_response(response) }
294
+ else
295
+ log_response(response)
296
+ end
297
+
298
+ response
299
+
300
+ end
301
+
302
+ # Logs the response to the configured logger.
303
+ # @param [Resposne] response
304
+ # @return [nil]
305
+ def log_response response
306
+ if config.logger
307
+ message = config.log_formatter.format(response)
308
+ config.logger.send(config.log_level, message)
309
+ end
310
+ nil
311
+ end
312
+
313
+ def populate_error response
314
+ response.error = extract_error(response)
315
+ end
316
+
317
+ # If the response contains error, this method will construct
318
+ # and return an error object. If no error is contained in the
319
+ # response, then nil is returned.
320
+ # @param [Response] response
321
+ # @return [Errors::Base,nil]
322
+ def extract_error response
323
+
324
+ status = response.http_response.status
325
+
326
+ error_code, error_message = extract_error_details(response)
327
+
328
+ error_args = [
329
+ response.http_request,
330
+ response.http_response,
331
+ error_code,
332
+ error_message
333
+ ]
334
+
335
+ case
336
+ when response.timeout? then TimeoutError.new
337
+ when error_code then error_class(error_code).new(*error_args)
338
+ when status >= 500 then Errors::ServerError.new(*error_args)
339
+ when status >= 300 then Errors::ClientError.new(*error_args)
340
+ else nil # no error
341
+ end
342
+
343
+ end
344
+
345
+ # Given an error code string, this method will return an error class.
346
+ #
347
+ # AWS::EC2::Client.new.send(:error_code, 'InvalidInstanceId')
348
+ # #=> AWS::EC2::Errors::InvalidInstanceId
349
+ #
350
+ # @param [String] error_code The error code string as returned by
351
+ # the service. If this class contains periods, they will be
352
+ # converted into namespaces (e.g. 'Foo.Bar' becomes Errors::Foo::Bar).
353
+ #
354
+ # @return [Class]
355
+ #
356
+ def error_class error_code
357
+ errors_module.error_class(error_code)
358
+ end
359
+
360
+ # Returns the ::Errors module for the current client.
361
+ #
362
+ # AWS::S3::Client.new.errors_module
363
+ # #=> AWS::S3::Errors
364
+ #
365
+ # @return [Module]
366
+ #
367
+ def errors_module
368
+ AWS.const_get(self.class.to_s[/(\w+)::Client/, 1])::Errors
369
+ end
370
+
371
+ def client_request name, options, &block
372
+ return_or_raise(options) do
373
+ log_client_request(options) do
374
+
375
+ if config.stub_requests?
376
+
377
+ response = stub_for(name)
378
+ response.http_request = build_request(name, options, &block)
379
+ response.request_options = options
380
+ response
381
+
382
+ else
383
+
384
+ client = self
385
+ response = new_response { client.send(:build_request, name, options, &block) }
386
+ response.request_type = name
387
+ response.request_options = options
388
+
389
+ if
390
+ cacheable_request?(name, options) and
391
+ cache = AWS.response_cache and
392
+ cached_response = cache.cached(response)
393
+ then
394
+ cached_response.cached = true
395
+ cached_response
396
+ else
397
+ # process the http request
398
+ options[:async] ?
399
+ make_async_request(response) :
400
+ make_sync_request(response)
401
+
402
+ # process the http response
403
+ response.on_success do
404
+ send("process_#{name}_response", response)
405
+ if cache = AWS.response_cache
406
+ cache.add(response)
407
+ end
408
+ end
409
+
410
+ response
411
+
412
+ end
413
+
414
+ end
415
+
416
+ end
417
+ end
418
+ end
419
+
420
+ def cacheable_request? name, options
421
+ self.class::CACHEABLE_REQUESTS.include?(name)
422
+ end
423
+
424
+ def build_request(name, options, &block)
425
+
426
+ # we dont want to pass the async option to the configure block
427
+ opts = options.dup
428
+ opts.delete(:async)
429
+
430
+ http_request = new_request
431
+
432
+ # configure the http request
433
+ http_request.service_ruby_name = service_ruby_name
434
+ http_request.host = endpoint
435
+ http_request.port = port
436
+ http_request.region = config.send(:"#{service_ruby_name}_region")
437
+ http_request.proxy_uri = config.proxy_uri
438
+ http_request.use_ssl = config.use_ssl?
439
+ http_request.ssl_verify_peer = config.ssl_verify_peer?
440
+ http_request.ssl_ca_file = config.ssl_ca_file if config.ssl_ca_file
441
+ http_request.ssl_ca_path = config.ssl_ca_path if config.ssl_ca_path
442
+
443
+ send("configure_#{name}_request", http_request, opts, &block)
444
+
445
+ http_request.headers["user-agent"] = user_agent_string
446
+ http_request.add_authorization!(signer)
447
+
448
+ http_request
449
+
450
+ end
451
+
452
+ def user_agent_string
453
+ engine = (RUBY_ENGINE rescue nil or "ruby")
454
+ user_agent = "%s aws-sdk-ruby/#{VERSION} %s/%s %s" %
455
+ [config.user_agent_prefix, engine, RUBY_VERSION, RUBY_PLATFORM]
456
+ user_agent.strip!
457
+ if AWS.memoizing?
458
+ user_agent << " memoizing"
459
+ end
460
+ user_agent
461
+ end
462
+
463
+ # Adds a single method to the current client class. This method
464
+ # yields a request method builder that allows you to specify how:
465
+ #
466
+ # * the request is built
467
+ # * the response is processed
468
+ # * the response is stubbed for testing
469
+ #
470
+ def self.add_client_request_method method_name, options = {}, &block
471
+
472
+ self.operations << method_name
473
+
474
+ ClientRequestMethodBuilder.new(self, method_name, &block)
475
+
476
+ module_eval <<-END
477
+ def #{method_name}(*args, &block)
478
+ options = args.first ? args.first : {}
479
+ client_request(#{method_name.inspect}, options, &block)
480
+ end
481
+ END
482
+
483
+ end
484
+
485
+ # Parses the service's API configuration yaml file. This file has
486
+ # configuration that drives the request and response DSLs.
487
+ # @return [Hash]
488
+ def self.api_config
489
+ config_file =
490
+ File.dirname(File.dirname(__FILE__)) +
491
+ "/api_config/#{service_name}-#{self::API_VERSION}.yml"
492
+ YAML.load(File.read(config_file))
493
+ end
494
+
495
+ # @return [Array<Symbol>] Returns a list of service operations as
496
+ # method names supported by this client.
497
+ def self.operations
498
+ @operations ||= []
499
+ end
500
+
501
+ # @private
502
+ class ClientRequestMethodBuilder
503
+
504
+ def initialize client_class, method_name, &block
505
+ @client_class = client_class
506
+ @method_name = method_name
507
+ configure_request {|request, options|}
508
+ process_response {|response|}
509
+ simulate_response {|response|}
510
+ instance_eval(&block)
511
+ end
512
+
513
+ def configure_request options = {}, &block
514
+ name = "configure_#{@method_name}_request"
515
+ MetaUtils.class_extend_method(@client_class, name, &block)
516
+ if block.arity == 3
517
+ m = Module.new
518
+ m.module_eval(<<-END)
519
+ def #{name}(req, options, &block)
520
+ super(req, options, block)
521
+ end
522
+ END
523
+ @client_class.send(:include, m)
524
+ end
525
+ end
526
+
527
+ def process_response &block
528
+ name = "process_#{@method_name}_response"
529
+ MetaUtils.class_extend_method(@client_class, name, &block)
530
+ end
531
+
532
+ def simulate_response &block
533
+ name = "simulate_#{@method_name}_response"
534
+ MetaUtils.class_extend_method(@client_class, name, &block)
535
+ end
536
+
537
+ end
538
+
539
+ end
540
+ end
541
+ end