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,45 @@
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 MetaUtils
19
+
20
+ def extend_method(object, name, &block)
21
+ object.extend(
22
+ Module.new do
23
+ define_method(name, &block)
24
+ end
25
+ )
26
+ end
27
+ module_function :extend_method
28
+
29
+ def class_extend_method(klass, name, &block)
30
+ klass.send(:include,
31
+ Module.new do
32
+ define_method(name, &block)
33
+ end
34
+ )
35
+ end
36
+ module_function :class_extend_method
37
+
38
+ def extend(object, &block)
39
+ object.extend(Module.new(&block))
40
+ end
41
+ module_function :extend
42
+
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,57 @@
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 Model
19
+
20
+ # @private
21
+ def initialize(*args)
22
+ options = args.last.kind_of?(Hash) ? args.last : {}
23
+ @config = case
24
+ when options[:config] then options[:config]
25
+ when args.first.respond_to?(:config) then args.first.config
26
+ else AWS.config
27
+ end
28
+ end
29
+
30
+ # @return [Configuration] Returns the configuration for this object.
31
+ attr_reader :config
32
+
33
+ # Each class including this module has its own client class.
34
+ # Generally it is the service namespace suffixed by client:
35
+ #
36
+ # * s3_client
37
+ # * simple_db_client
38
+ #
39
+ # @return Retruns the proper client class for the given model.
40
+ def client
41
+ @config.send("#{config_prefix}_client")
42
+ end
43
+
44
+ # @return [String] The short name of the service as used in coniguration.
45
+ # (e.g. SimpleDB::Client.config_prefix #=> 'simple_db')
46
+ def config_prefix
47
+ Inflection.ruby_name(self.class.to_s.split(/::/)[1])
48
+ end
49
+
50
+ # @return [String] A sensible default inspect string.
51
+ def inspect
52
+ "<#{self.class}>"
53
+ end
54
+
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,30 @@
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 Naming
19
+
20
+ def service_name
21
+ self.name.split(/::/)[1]
22
+ end
23
+
24
+ def service_ruby_name
25
+ @service_ruby_name ||= Inflection.ruby_name(service_name)
26
+ end
27
+
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,700 @@
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 'base64'
15
+ require 'bigdecimal'
16
+ require 'json'
17
+
18
+ module AWS
19
+ module Core
20
+
21
+ # @private
22
+ class OptionGrammar
23
+
24
+ # @private
25
+ class DefaultOption; end
26
+
27
+ # @private
28
+ class FormatError < ArgumentError
29
+ attr_accessor :expectation
30
+ attr_accessor :context_description
31
+
32
+ def initialize(expectation, context)
33
+ @expectation = expectation
34
+ @context_description = context
35
+ end
36
+
37
+ def to_s
38
+ "expected #{expectation} for #{context_description}"
39
+ end
40
+ end
41
+
42
+ # @private
43
+ module Descriptors
44
+
45
+ # @private
46
+ module NoArgs
47
+ def apply(option)
48
+ option.extend self
49
+ end
50
+ end
51
+
52
+ module Timestamp
53
+
54
+ extend NoArgs
55
+
56
+ def validate(value, context = nil)
57
+ true
58
+ # raise format_error("timestamp value", context) unless
59
+ # case value
60
+ # when String
61
+ # value =~ /^\d+$/ or value =~ /^\d{4}-\d{2}-d{2}T\d{2}:\d{2}:\d{2}Z$/
62
+ # when String then value =~ /^2009-12-04T20:56:05.000Z\d+$/
63
+ # when Integer then true
64
+ # when DateTime then true
65
+ # when Timestamp then true
66
+ # when Date then true
67
+ # else false
68
+ # end
69
+ # end
70
+ # value.respond_to? :to_str
71
+ end
72
+
73
+ def encode_value(value)
74
+ value.to_s
75
+ # value.to_s
76
+ # case value
77
+ # when Integer
78
+ # when
79
+ # case value
80
+ # when nil, '' then nil
81
+ # when DateTime then raw
82
+ # when Integer then DateTime.parse(Time.at(raw).to_s) # timestamp
83
+ # else DateTime.parse(raw.to_s) # work with Time, Date and String objects
84
+ # end
85
+ end
86
+ end
87
+
88
+ # @private
89
+ module String
90
+
91
+ extend NoArgs
92
+
93
+ def validate(value, context = nil)
94
+ raise format_error("string value", context) unless
95
+ value.respond_to? :to_str
96
+ end
97
+
98
+ def encode_value(value)
99
+ value.to_s
100
+ end
101
+
102
+ end
103
+
104
+ # @private
105
+ module Blob
106
+
107
+ extend NoArgs
108
+
109
+ def validate(value, context = nil)
110
+ raise format_error("string value", context) unless
111
+ value.respond_to? :to_str
112
+ end
113
+
114
+ def encode_value(value)
115
+ Base64.encode64(value.to_s)
116
+ end
117
+
118
+ end
119
+
120
+ # @private
121
+ module Integer
122
+
123
+ extend NoArgs
124
+
125
+ def validate(value, context = nil)
126
+ raise format_error("integer value", context) unless
127
+ value.respond_to? :to_int
128
+ end
129
+
130
+ def encode_value(value)
131
+ value.to_s
132
+ end
133
+
134
+ end
135
+
136
+ Long = Integer
137
+
138
+ # @private
139
+ module Boolean
140
+
141
+ extend NoArgs
142
+
143
+ def validate(value, context = nil)
144
+ raise format_error("boolean value", context) unless
145
+ value == true || value == false
146
+ end
147
+
148
+ def encode_value(value)
149
+ value.to_s
150
+ end
151
+
152
+ end
153
+
154
+ # @private
155
+ module Required
156
+ extend NoArgs
157
+ def required?; true; end
158
+ end
159
+
160
+ # @private
161
+ module Rename
162
+ def self.apply(option, new_name)
163
+ new_name = Inflection.ruby_name(new_name)
164
+ MetaUtils.extend_method(option, :ruby_name) { new_name }
165
+ end
166
+ end
167
+
168
+ # @private
169
+ module Pattern
170
+
171
+ # def validate value, context = nil
172
+ # unless value =~ regex
173
+ # raise format_error("value to match #{regex}", context)
174
+ # end
175
+ # end
176
+ #
177
+ # def self.apply option, regex
178
+ # option.extend(self)
179
+ # MetaUtils.extend_method(option, :regex) { regex }
180
+ # end
181
+
182
+ def self.apply *args
183
+ end
184
+
185
+ end
186
+
187
+ # @private
188
+ module ListMethods
189
+
190
+ module ClassMethods
191
+
192
+ def apply(option, member_descriptors)
193
+ super(option)
194
+ member_option = option.member_option if option.respond_to?(:member_option)
195
+ member_option ||= ListMember.new
196
+ member_option = member_option.extend_with_config(*member_descriptors)
197
+ MetaUtils.extend_method(option, :member_option) { member_option }
198
+ end
199
+
200
+ end
201
+
202
+ module InstanceMethods
203
+
204
+ def validate(value, context = nil)
205
+ raise format_error("enumerable value", context) unless
206
+ value.respond_to? :each
207
+ i = 0
208
+ value.each do |member|
209
+ i += 1
210
+ member_option.validate(member,
211
+ "member #{i} of #{context_description(context)}")
212
+ end
213
+ end
214
+
215
+ def request_params(value, prefix = nil)
216
+ params = []
217
+ value.each do |v|
218
+ name = prefixed_name(prefix) + join + (params.size + 1).to_s
219
+ params << member_option.request_params(v, name)
220
+ end
221
+ return [Http::Request::Param.new(prefixed_name(prefix), "")] if params.empty?
222
+ params
223
+ end
224
+
225
+ def hash_format(value)
226
+ value.map do |v|
227
+ member_option.hash_format(v)
228
+ end
229
+ end
230
+
231
+ def join
232
+ '.'
233
+ end
234
+
235
+ end
236
+
237
+ end
238
+
239
+ module List
240
+
241
+ extend NoArgs
242
+ extend ListMethods::ClassMethods
243
+ include ListMethods::InstanceMethods
244
+
245
+ end
246
+
247
+ module MemberedList
248
+
249
+ extend NoArgs
250
+ extend ListMethods::ClassMethods
251
+ include ListMethods::InstanceMethods
252
+
253
+ def join
254
+ '.member.'
255
+ end
256
+
257
+ end
258
+
259
+ class ListMember < DefaultOption
260
+
261
+ def initialize options = {}
262
+ super("##list-member##")
263
+ @prefix = options[:prefix] || ''
264
+ end
265
+
266
+ def prefixed_name(prefix)
267
+ "#{prefix}#{@prefix}"
268
+ end
269
+
270
+ end
271
+
272
+ # @private
273
+ module Structure
274
+
275
+ extend NoArgs
276
+
277
+ def self.apply(option, members)
278
+ options = {}
279
+ options = option.member_options.inject({}) do |memo, member_option|
280
+ memo[member_option.name] = member_option
281
+ memo
282
+ end if option.respond_to?(:member_options)
283
+
284
+ super(option)
285
+
286
+ members.each do |(name, descriptors)|
287
+ member_option = options[name] || DefaultOption.new(name)
288
+ member_option = member_option.extend_with_config(*descriptors)
289
+ options[name] = member_option
290
+ end
291
+
292
+ MetaUtils.extend_method(option, :member_options) { options.values }
293
+ by_ruby_name = options.values.inject({}) do |memo, member_option|
294
+ memo[member_option.ruby_name] = member_option
295
+ memo[member_option.name] = member_option
296
+ memo
297
+ end
298
+ MetaUtils.extend_method(option, :member_option) { |n| by_ruby_name[n] }
299
+ end
300
+
301
+ def validate(value, context = nil)
302
+ raise format_error("hash value", context) unless
303
+ value.respond_to?(:to_hash)
304
+
305
+ context = context_description(context)
306
+
307
+ value.each do |name, v|
308
+ name = name.to_s
309
+ raise ArgumentError.new("unexpected key #{name} for #{context}") unless
310
+ member_option(name)
311
+ member_option(name).validate(v, "key #{name} of #{context}")
312
+ end
313
+
314
+ member_options.each do |option|
315
+ raise ArgumentError.new("missing required key #{option.ruby_name} for #{context}") if
316
+ option.required? and
317
+ !value.has_key?(option.ruby_name) and
318
+ !value.has_key?(option.ruby_name.to_sym) and
319
+ !value.has_key?(option.name)
320
+ end
321
+ end
322
+
323
+ def request_params(values, prefix = nil)
324
+ values.map do |name, value|
325
+ name = name.to_s
326
+ member_option(name).request_params(value, prefixed_name(prefix))
327
+ end.flatten
328
+ end
329
+
330
+ def hash_format(hash)
331
+ hash.inject({}) do |hash, (name, value)|
332
+ option = member_option(name.to_s)
333
+ hash[option.name] = option.hash_format(value)
334
+ hash
335
+ end
336
+ end
337
+
338
+ end
339
+
340
+ module Map
341
+
342
+ def self.apply option, members = {}
343
+
344
+ option.extend self
345
+
346
+ key_option = option.key_option
347
+ if key_descriptors = members[:key]
348
+ key_option = key_option.extend_with_config(*key_descriptors)
349
+ MetaUtils.extend_method(option, :key_option) { key_option }
350
+ end
351
+
352
+ value_option = option.value_option
353
+ if value_descriptors = members[:value]
354
+ value_option = value_option.extend_with_config(*value_descriptors)
355
+ MetaUtils.extend_method(option, :value_option) { value_option }
356
+ end
357
+
358
+ key_option.param_name = members[:key_param] if members[:key_param]
359
+ value_option.param_name = members[:value_param] if members[:value_param]
360
+
361
+ end
362
+
363
+ def validate(value, context = nil)
364
+
365
+ raise format_error("hash value", context) unless
366
+ value.respond_to?(:to_hash)
367
+
368
+ context = context_description(context)
369
+
370
+ value.each do |key, value|
371
+ key_option.validate(key, "key of #{context}")
372
+ value_option.validate(value, "value at key #{key} of #{context}")
373
+ end
374
+
375
+ end
376
+
377
+ def request_params values, prefix = nil
378
+ values.inject([]) do |params, (key,value)|
379
+
380
+ index = params.size / 2 + 1
381
+ common_prefix = "#{prefixed_name(prefix)}.#{index}."
382
+
383
+ key_name = common_prefix + key_option.param_name
384
+ value_name = common_prefix + value_option.param_name
385
+
386
+ params << Http::Request::Param.new(key_name, key)
387
+ params << Http::Request::Param.new(value_name, value)
388
+
389
+ end
390
+ end
391
+
392
+
393
+ def hash_format(value)
394
+ value.inject({}) do |hash, (key, value)|
395
+ hash[key_option.hash_format(key)] =
396
+ value_option.hash_format(value)
397
+ hash
398
+ end
399
+ end
400
+
401
+ def key_option
402
+ @_key_option ||= MapOption.new("key")
403
+ end
404
+
405
+ def value_option
406
+ @_value_option ||= MapOption.new("value")
407
+ end
408
+
409
+ end
410
+
411
+ module Bigdecimal
412
+
413
+ extend NoArgs
414
+
415
+ def validate(value, context = nil)
416
+ raise format_error("decimal value", context) unless
417
+ value.kind_of?(Numeric) or
418
+ value.respond_to?(:to_int)
419
+ end
420
+
421
+ def hash_format(value)
422
+ BigDecimal(value.to_s)
423
+ end
424
+
425
+ end
426
+
427
+ # @private
428
+ module Boolean
429
+ extend NoArgs
430
+ end
431
+
432
+ end
433
+
434
+ class DefaultOption
435
+
436
+ attr_reader :name
437
+
438
+ def initialize(name)
439
+ @name = name
440
+ end
441
+
442
+ def ruby_name
443
+ Inflection.ruby_name(name)
444
+ end
445
+
446
+ def request_params(value, prefix = nil)
447
+ [Http::Request::Param.new(prefixed_name(prefix), encode_value(value))]
448
+ end
449
+
450
+ def hash_format(value)
451
+ value
452
+ end
453
+
454
+ def prefixed_name(prefix)
455
+ return "#{prefix}.#{name}" if prefix
456
+ name
457
+ end
458
+
459
+ def encode_value(value)
460
+ value
461
+ end
462
+
463
+ def required?
464
+ false
465
+ end
466
+
467
+ def format_error(expected, context = nil)
468
+ context = context_description(context)
469
+ FormatError.new(expected, context)
470
+ end
471
+
472
+ def context_description(context)
473
+ context or "option #{ruby_name}"
474
+ end
475
+
476
+ def extend_with_config(*descriptors)
477
+ option = clone
478
+ descriptors.each do |desc|
479
+ if desc.kind_of?(Hash)
480
+ (name, arg) = desc.to_a.first
481
+ next if name == :documentation
482
+ else
483
+ name = desc
484
+ arg = nil
485
+ end
486
+ class_name = Inflection.class_name(name.to_s)
487
+ mod = Descriptors::const_get(class_name)
488
+ if arg
489
+ mod.apply(option, arg)
490
+ else
491
+ mod.apply(option)
492
+ end
493
+ end
494
+ option
495
+ end
496
+
497
+ include Descriptors::String
498
+
499
+ end
500
+
501
+ # @private
502
+ module ModuleMethods
503
+
504
+ include Inflection
505
+
506
+ def customize(config = [])
507
+ m = Class.new(self)
508
+ supported_options = m.supported_options.inject({}) do |memo, opt|
509
+ memo[opt.name] = opt
510
+ memo
511
+ end
512
+ config.each do |option_config|
513
+ if config.kind_of?(Hash)
514
+ (name, value_desc) = option_config
515
+ else
516
+ (name, value_desc) = parse_option(option_config)
517
+ end
518
+ option = supported_options[name] || DefaultOption.new(name)
519
+ option = option.extend_with_config(*value_desc)
520
+ supported_options[option.name] = option
521
+ end
522
+
523
+ supported_ary = supported_options.values
524
+ MetaUtils.extend_method(m, :supported_options) { supported_ary }
525
+ supported_ruby_names = supported_ary.inject({}) do |memo, opt|
526
+ memo[opt.ruby_name] = opt
527
+ memo
528
+ end
529
+ MetaUtils.extend_method(m, :option) { |n| supported_ruby_names[n] }
530
+ supported_ary.each do |opt|
531
+ MetaUtils.extend_method(m, "validate_#{opt.ruby_name}") do |value|
532
+ opt.validate(value)
533
+ end
534
+ end
535
+
536
+ m
537
+ end
538
+
539
+ def option(name)
540
+ nil
541
+ end
542
+
543
+ def supported_options
544
+ []
545
+ end
546
+
547
+ def validate(options)
548
+ options.each do |name, value|
549
+ name = name.to_s
550
+ raise ArgumentError.new("unexpected option #{name}") unless
551
+ option(name)
552
+ option(name).validate(value)
553
+ end
554
+ supported_options.each do |option|
555
+ raise ArgumentError.new("missing required option #{option.ruby_name}") unless
556
+ !option.required? ||
557
+ options.has_key?(option.ruby_name) || options.has_key?(option.ruby_name.to_sym)
558
+ end
559
+ end
560
+
561
+ # Returns the options in AWS/Query format
562
+ def request_params(options)
563
+ validate(options)
564
+ options.map do |(name, value)|
565
+ name = name.to_s
566
+ option(name).request_params(value)
567
+ end.flatten
568
+ end
569
+
570
+ # Returns the options as a hash (which is used to generate JSON
571
+ # in to_json).
572
+ def to_h(options)
573
+ validate(options)
574
+ options.inject({}) do |hash, (name, value)|
575
+ option = self.option(name.to_s)
576
+ hash[option.name] = option.hash_format(value)
577
+ hash
578
+ end
579
+ end
580
+
581
+ # Returns the options in JSON format
582
+ def to_json(options)
583
+ to_h(options).to_json
584
+ end
585
+
586
+ def included(m)
587
+ m.extend(self::ModuleMethods)
588
+ end
589
+
590
+ protected
591
+ def parse_option(option)
592
+ value_desc = nil
593
+ if option.kind_of? Hash
594
+ raise ArgumentError.new("passed empty hash where an option was expected") if
595
+ option.empty?
596
+
597
+ raise ArgumentError.new("too many entries in option description") if
598
+ option.size > 1
599
+
600
+ (name, value_desc) = option.to_a.first
601
+ name = name.to_s
602
+
603
+ raise ArgumentError.new("expected an array for "+
604
+ "value description of option #{name},"+
605
+ "got #{value_desc.inspect}") unless
606
+ value_desc.nil? or value_desc.kind_of?(Array)
607
+ else
608
+ name = option
609
+ end
610
+
611
+ value_desc ||= []
612
+
613
+ [name, value_desc]
614
+ end
615
+
616
+ protected
617
+ def apply_required_descriptor(m, name)
618
+ name = ruby_name(name)
619
+ MetaUtils.extend_method(m, :validate) do |opts|
620
+ raise ArgumentError.new("missing required option #{name}") unless
621
+ opts.key? name or opts.key? name.to_sym
622
+ end
623
+ end
624
+
625
+ protected
626
+ def apply_integer_descriptor(m, name)
627
+ MetaUtils.extend_method(m, "validate_#{ruby_name(name)}") do |value|
628
+ raise ArgumentError.new("expected integer value for option #{ruby_name(name)}") unless
629
+ value.respond_to? :to_int
630
+ end
631
+ end
632
+
633
+ protected
634
+ def apply_string_descriptor(m, name)
635
+ MetaUtils.extend_method(m, "validate_#{ruby_name(name)}") do |value|
636
+ raise ArgumentError.new("expected string value for option #{ruby_name(name)}") unless
637
+ value.respond_to? :to_str
638
+ end
639
+ end
640
+
641
+ protected
642
+ def apply_list_descriptor(m, name, arg)
643
+ MetaUtils.extend_method(m, "validate_#{ruby_name(name)}") do |value|
644
+ raise ArgumentError.new("expected value for option #{ruby_name(name)} "+
645
+ "to respond to #each") unless
646
+ value.respond_to? :each
647
+ end
648
+ MetaUtils.extend_method(m, "params_for_#{ruby_name(name)}") do |value|
649
+ i = 0
650
+ values = []
651
+ value.each do |member|
652
+ i += 1
653
+ values << Http::Request::Param.new(name+"."+i.to_s, member.to_s)
654
+ end
655
+ if i > 0
656
+ values
657
+ else
658
+ Http::Request::Param.new(name, "")
659
+ end
660
+ end
661
+ end
662
+
663
+ protected
664
+ def apply_rename_descriptor(m, name, new_name)
665
+ name = ruby_name(name)
666
+ MetaUtils.extend_method(m, :validate) do |opts|
667
+ raise ArgumentError.new("unexpected option foo") if
668
+ opts.key?(name) or opts.key?(name.to_sym)
669
+
670
+ opts = opts.dup
671
+ opts[name] = opts[new_name] if opts.key?(new_name)
672
+ opts[name.to_sym] = opts[new_name.to_sym] if opts.key?(new_name.to_sym)
673
+ opts.delete(new_name)
674
+ opts.delete(new_name.to_sym)
675
+ super(opts)
676
+ end
677
+
678
+ # couldn't find a better way to alias a class method
679
+ method = m.method("params_for_#{name}")
680
+ MetaUtils.extend_method(m, "params_for_#{new_name}") do |value|
681
+ method.call(value)
682
+ end
683
+ end
684
+
685
+ end
686
+
687
+ class MapOption < DefaultOption
688
+ def param_name
689
+ @param_name || name
690
+ end
691
+ def param_name= name
692
+ @param_name = name
693
+ end
694
+ end
695
+
696
+ extend ModuleMethods
697
+
698
+ end
699
+ end
700
+ end