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,135 @@
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 'aws/core'
15
+ require 'aws/s3/config'
16
+
17
+ module AWS
18
+
19
+ # Provides an expressive, object-oriented interface to Amazon S3.
20
+ #
21
+ # To use Amazon S3 you must first
22
+ # {sign up here}[http://aws.amazon.com/s3/].
23
+ #
24
+ # For more information about Amazon S3, see:
25
+ #
26
+ # * {Amazon S3}[http://aws.amazon.com/s3/]
27
+ # * {Amazon S3 Documentation}[http://aws.amazon.com/documentation/s3/]
28
+ #
29
+ # == Credentials
30
+ #
31
+ # You can setup default credentials for all AWS services via
32
+ # AWS.config:
33
+ #
34
+ # AWS.config(
35
+ # :access_key_id => 'YOUR_ACCESS_KEY_ID',
36
+ # :secret_access_key => 'YOUR_SECRET_ACCESS_KEY')
37
+ #
38
+ # Or you can set them directly on the S3 interface:
39
+ #
40
+ # s3 = AWS::S3.new(
41
+ # :access_key_id => 'YOUR_ACCESS_KEY_ID',
42
+ # :secret_access_key => 'YOUR_SECRET_ACCESS_KEY')
43
+ #
44
+ # == Buckets Keys and Objects
45
+ #
46
+ # S3 stores objects in buckets.
47
+ #
48
+ # To create a bucket:
49
+ #
50
+ # bucket = s3.buckets.create('mybucket')
51
+ #
52
+ # To get a bucket:
53
+ #
54
+ # bucket = s3.buckets[:mybucket]
55
+ # bucket = s3.buckets['mybucket']
56
+ #
57
+ # Listing buckets:
58
+ #
59
+ # s3.buckets.each do |bucket|
60
+ # puts bucket.name
61
+ # end
62
+ #
63
+ # See {Bucket} and {BucketCollection} for more information on working
64
+ # with S3 buckets.
65
+ #
66
+ # == Listing Objects
67
+ #
68
+ # Enumerating objects in a bucket:
69
+ #
70
+ # bucket.objects.each do |object|
71
+ # puts object.key #=> no data is fetched from s3, just a list of keys
72
+ # end
73
+ #
74
+ # You can limit the list of objects with a prefix, or explore the objects
75
+ # in a bucket as a tree. See {ObjectCollection} for more information.
76
+ #
77
+ # == Reading and Writing to S3
78
+ #
79
+ # Each object in a bucket has a unique key.
80
+ #
81
+ # photo = s3.buckets['mybucket'].objects['photo.jpg']
82
+ #
83
+ # Writing to an S3Object:
84
+ #
85
+ # photo.write(File.read('/some/photo.jpg'))
86
+ #
87
+ # Reading from an S3Object:
88
+ #
89
+ # File.open("/some/path/on/disk.jpg", "w") do |f|
90
+ # f.write(photo.read)
91
+ # end
92
+ #
93
+ # See {S3Object} for more information on reading and writing to S3.
94
+ #
95
+ class S3
96
+
97
+ AWS.register_autoloads(self) do
98
+ autoload :AccessControlList, 'access_control_list'
99
+ autoload :ACLObject, 'acl_object'
100
+ autoload :Bucket, 'bucket'
101
+ autoload :BucketCollection, 'bucket_collection'
102
+ autoload :BucketLifecycleConfiguration, 'bucket_lifecycle_configuration'
103
+ autoload :BucketVersionCollection, 'bucket_version_collection'
104
+ autoload :Client, 'client'
105
+ autoload :DataOptions, 'data_options'
106
+ autoload :Errors, 'errors'
107
+ autoload :MultipartUpload, 'multipart_upload'
108
+ autoload :MultipartUploadCollection, 'multipart_upload_collection'
109
+ autoload :ObjectCollection, 'object_collection'
110
+ autoload :ObjectMetadata, 'object_metadata'
111
+ autoload :ObjectUploadCollection, 'object_upload_collection'
112
+ autoload :ObjectVersion, 'object_version'
113
+ autoload :ObjectVersionCollection, 'object_version_collection'
114
+ autoload :PaginatedCollection, 'paginated_collection'
115
+ autoload :Policy, 'policy'
116
+ autoload :PrefixAndDelimiterCollection, 'prefix_and_delimiter_collection'
117
+ autoload :PrefixedCollection, 'prefixed_collection'
118
+ autoload :PresignedPost, 'presigned_post'
119
+ autoload :Request, 'request'
120
+ autoload :S3Object, 's3_object'
121
+ autoload :Tree, 'tree'
122
+ autoload :UploadedPart, 'uploaded_part'
123
+ autoload :UploadedPartCollection, 'uploaded_part_collection'
124
+ end
125
+
126
+ include Core::ServiceInterface
127
+
128
+ # @return [BucketCollection] Returns a collection that represents all
129
+ # buckets in the account.
130
+ def buckets
131
+ BucketCollection.new(:config => @config)
132
+ end
133
+
134
+ end
135
+ end
@@ -0,0 +1,250 @@
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
+ class S3
16
+
17
+ # Represents an access control list for S3 objects and buckets. For example:
18
+ #
19
+ # acl = AccessControlList.new
20
+ # acl.grant(:full_control).
21
+ # to(:canonical_user_id => "8a6925ce4adf588a4f21c32aa379004fef")
22
+ # acl.to_xml # => '<AccessControlPolicy>...'
23
+ #
24
+ # You can also construct an AccessControlList from a hash:
25
+ #
26
+ # AccessControlList.new(
27
+ # :owner => { :id => "8a6925ce4adf588a4f21c32aa379004fef" },
28
+ # :grants => [{ :grantee => {
29
+ # :canonical_user_id => "8a6925ce4adf588a4f21c32aa379004fef",
30
+ # },
31
+ # :permission => :full_control }]
32
+ # )
33
+ #
34
+ # @see ACLObject
35
+ #
36
+ # @attr [AccessControlList::Owner] owner The owner of the access
37
+ # control list. You can set this as a hash, for example:
38
+ # acl.owner = { :id => '8a6925ce4adf588a4f21c32aa379004fef' }
39
+ # This attribute is required when setting an ACL.
40
+ #
41
+ # @attr [list of AccessControlList::Grant] grants The list of
42
+ # grants. You can set this as a list of hashes, for example:
43
+ # acl.grants = [{ :grantee => { :canonical_user_id =>
44
+ # "8a6925ce4adf588a4f21c32aa379004fef" },
45
+ # :permission => :full_control }]
46
+ class AccessControlList
47
+
48
+ # Represents an ACL owner. In the default ACL, this is the
49
+ # bucket owner.
50
+ #
51
+ # @attr [String] id The canonical user ID of the ACL owner.
52
+ # This attribute is required when setting an ACL.
53
+ #
54
+ # @attr [String] display_name The display name of the ACL
55
+ # owner. This value is ignored when setting an ACL.
56
+ class Owner
57
+ include ACLObject
58
+
59
+ string_attr "ID", :required => true
60
+ string_attr "DisplayName"
61
+ end
62
+
63
+ # Represents a user who is granted some kind of permission
64
+ # through a Grant. There are three ways to specify a grantee:
65
+ #
66
+ # * You can specify the canonical user ID, for example. When
67
+ # you read an ACL from S3, all grantees will be identified
68
+ # this way, and the display_name attribute will also be provided.
69
+ #
70
+ # Grantee.new(:canonical_user_id => "8a6925ce4adf588a4f21c32aa379004fef")
71
+ #
72
+ # * You can specify the e-mail address of an AWS customer, for example:
73
+ # Grantee.new(:amazon_customer_email => 'foo@example.com')
74
+ #
75
+ # * You can specify a group URI, for example:
76
+ # Grantee.new(:group_uri => 'http://acs.amazonaws.com/groups/global/AllUsers')
77
+ # For more details about group URIs, see:
78
+ # http://docs.amazonwebservices.com/AmazonS3/latest/dev/ACLOverview.html
79
+ #
80
+ # When constructing a grantee, you must provide a value for
81
+ # exactly one of the following attributes:
82
+ #
83
+ # * +amazon_customer_email+
84
+ # * +canonical_user_id+
85
+ # * +group_uri+
86
+ #
87
+ # @attr [String] amazon_customer_email The e-mail address of
88
+ # an AWS customer.
89
+ #
90
+ # @attr [String] canonical_user_id The canonical user ID of an
91
+ # AWS customer.
92
+ #
93
+ # @attr [String] group_uri A URI that identifies a particular
94
+ # group of users.
95
+ #
96
+ # @attr [String] display_name The display name associated with
97
+ # the grantee. This is provided by S3 when reading an ACL.
98
+ class Grantee
99
+ include ACLObject
100
+
101
+ SIGNAL_ATTRIBUTES = [:amazon_customer_email,
102
+ :canonical_user_id,
103
+ :group_uri]
104
+
105
+ string_attr "EmailAddress", :method_name => "amazon_customer_email"
106
+ string_attr "ID", :method_name => "canonical_user_id"
107
+ string_attr "URI", :method_name => "group_uri"
108
+ string_attr "DisplayName"
109
+
110
+ # (see ACLObject#validate!)
111
+ def validate!
112
+ attr = signal_attribute
113
+ raise "missing amazon_customer_email, canonical_user_id, "+
114
+ "or group_uri" unless attr
115
+ raise "display_name is invalid with #{attr}" if
116
+ attr != :canonical_user_id and display_name
117
+ end
118
+
119
+ # @private
120
+ def stag
121
+ if attr = signal_attribute
122
+ super + " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"" +
123
+ " xsi:type=\"#{type_for_attr(attr)}\""
124
+ else
125
+ super
126
+ end
127
+ end
128
+
129
+ # @private
130
+ def signal_attribute
131
+ SIGNAL_ATTRIBUTES.find { |att| send(att) }
132
+ end
133
+
134
+ # @private
135
+ def type_for_attr(attr)
136
+ { :amazon_customer_email => "AmazonCustomerByEmail",
137
+ :canonical_user_id => "CanonicalUser",
138
+ :group_uri => "Group" }[attr]
139
+ end
140
+
141
+ end
142
+
143
+ # Represents the permission being granted in a Grant object.
144
+ # Typically you will not need to construct an instance of this
145
+ # class directly.
146
+ # @see Grant#permission
147
+ class Permission
148
+ include ACLObject
149
+
150
+ # The permission expressed as a symbol following Ruby
151
+ # conventions. For example, S3's FULL_CONTROL permission
152
+ # will be returned as +:full_control+.
153
+ attr_reader :name
154
+
155
+ # @private
156
+ def initialize(name)
157
+ raise "expected string or symbol" unless
158
+ name.respond_to?(:to_str) or name.respond_to?(:to_sym)
159
+ @name = name.to_sym
160
+ end
161
+
162
+ def body_xml
163
+ name.to_s.upcase
164
+ end
165
+
166
+ end
167
+
168
+ # Represents a single grant in an ACL. Both +grantee+ and
169
+ # +permission+ are required for each grant when setting an
170
+ # ACL.
171
+ #
172
+ # See
173
+ # http://docs.amazonwebservices.com/AmazonS3/latest/dev/ACLOverview.html
174
+ # for more information on how grantees and permissions are
175
+ # interpreted by S3.
176
+ #
177
+ # @attr [Grantee] grantee The user or users who are granted
178
+ # access according to this grant. You can specify this as a
179
+ # hash:
180
+ # grant.grantee = { :amazon_customer_email => "foo@example.com" }
181
+ #
182
+ # @attr [Permission or Symbol] permission The type of
183
+ # permission that is granted by this grant. Valid values are:
184
+ # * +:read+
185
+ # * +:write+
186
+ # * +:read_acp+
187
+ # * +:write_acp+
188
+ # * +:full_control+
189
+ class Grant
190
+
191
+ include ACLObject
192
+
193
+ object_attr Grantee, :required => true
194
+ object_attr Permission, :required => true, :cast => Symbol
195
+
196
+ end
197
+
198
+ include ACLObject
199
+
200
+ # @private
201
+ def stag
202
+ super()+" xmlns=\"http://s3.amazonaws.com/doc/2006-03-01/\""
203
+ end
204
+
205
+ # @private
206
+ def element_name
207
+ "AccessControlPolicy"
208
+ end
209
+
210
+ class GrantBuilder
211
+
212
+ # @private
213
+ def initialize(acl, grant)
214
+ @acl = acl
215
+ @grant = grant
216
+ end
217
+
218
+ # Specifies the grantee.
219
+ #
220
+ # @param [Grantee or Hash] grantee A Grantee object or hash;
221
+ # for example:
222
+ # acl.grant(:full_control).to(:amazon_customer_email => "foo@example.com")
223
+ def to(grantee)
224
+ @grant.grantee = grantee
225
+ @acl.grants << @grant
226
+ end
227
+
228
+ end
229
+
230
+ # Convenience method for constructing a new grant and adding
231
+ # it to the ACL. Example usage:
232
+ #
233
+ # acl.grants.size # => 0
234
+ # acl.grant(:full_control).
235
+ # to(:canonical_user_id => "8a6925ce4adf588a4f21c32aa379004fef")
236
+ # acl.grants.size # => 1
237
+ #
238
+ # @return [GrantBuilder]
239
+ def grant(permission)
240
+ GrantBuilder.new(self, Grant.new(:permission => permission))
241
+ end
242
+
243
+ object_attr Owner, :required => true
244
+ object_list_attr("AccessControlList", Grant,
245
+ :required => true, :method_name => :grants)
246
+
247
+ end
248
+
249
+ end
250
+ end
@@ -0,0 +1,264 @@
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 'rexml/text'
15
+
16
+ module AWS
17
+ class S3
18
+
19
+ # Common methods for AccessControlList and related objects.
20
+ module ACLObject
21
+
22
+ # @private
23
+ def initialize(opts = {}); end
24
+
25
+ # @private
26
+ def body_xml; ""; end
27
+
28
+ # @private
29
+ def stag
30
+ element_name
31
+ end
32
+
33
+ # @private
34
+ def element_name
35
+ self.class.name[/::([^:]*)$/, 1]
36
+ end
37
+
38
+ # Returns the XML representation of the object. Generally
39
+ # you'll want to call this on an AccessControlList object,
40
+ # which will yield an XML representation of the ACL that you
41
+ # can send to S3.
42
+ def to_s
43
+ if body_xml.empty?
44
+ "<#{stag}/>"
45
+ else
46
+ "<#{stag}>#{body_xml}</#{element_name}>"
47
+ end
48
+ end
49
+
50
+ # (see #to_s)
51
+ def to_xml
52
+ to_s
53
+ end
54
+
55
+ # Returns true if and only if this object is valid according
56
+ # to S3's published ACL schema. In particular, this will
57
+ # check that all required attributes are provided and that
58
+ # they are of the correct type.
59
+ def valid?
60
+ validate!
61
+ rescue => e
62
+ false
63
+ else
64
+ true
65
+ end
66
+
67
+ # Raises an exception unless this object is valid according to
68
+ # S3's published ACL schema.
69
+ # @see #valid?
70
+ def validate!; end
71
+
72
+ # @private
73
+ def validate_input(name, value, context = nil)
74
+ send("validate_#{name}_input!", value, context)
75
+ end
76
+
77
+ # @private
78
+ module ClassMethods
79
+
80
+ def string_attr(element_name, options = {})
81
+ method_name = options[:method_name] ||
82
+ Core::Inflection.ruby_name(element_name)
83
+
84
+ attr_accessor(method_name)
85
+ setter_option(method_name)
86
+ string_input_validator(method_name)
87
+ validate_string(method_name) if options[:required]
88
+ body_xml_string_content(element_name, method_name)
89
+ end
90
+
91
+ def object_attr(klass, options = {})
92
+ base_name = klass.name[/::([^:]*)$/, 1]
93
+ method_name = Core::Inflection.ruby_name(base_name)
94
+ cast = options[:cast] || Hash
95
+
96
+ attr_reader(method_name)
97
+ setter_option(method_name)
98
+ object_setter(klass, method_name, cast)
99
+ object_input_validator(klass, base_name, method_name, cast)
100
+ validate_object(method_name) if options[:required]
101
+ body_xml_content(method_name)
102
+ end
103
+
104
+ def object_list_attr(list_element, klass, options = {})
105
+ base_name = klass.name[/::([^:]*)$/, 1]
106
+ method_name = Core::Inflection.ruby_name(options[:method_name].to_s || list_element)
107
+ default_value = nil
108
+ default_value = [] if options[:required]
109
+
110
+ attr_reader(method_name)
111
+ setter_option(method_name) { [] if options[:required] }
112
+ object_list_setter(klass, method_name)
113
+ object_list_input_validator(klass, base_name, method_name)
114
+ validate_list(method_name)
115
+ body_xml_list_content(list_element, method_name)
116
+ end
117
+
118
+ def setter_option(method_name)
119
+ Core::MetaUtils.class_extend_method(self, :initialize) do |*args|
120
+ opts = args.last || {}
121
+ instance_variable_set("@#{method_name}", yield) if block_given?
122
+ key = method_name.to_sym
123
+
124
+ if opts.has_key?(key)
125
+ value = opts[key]
126
+ validate_input(method_name, value, "for #{method_name} option")
127
+ self.send("#{method_name}=", value)
128
+ end
129
+ super(opts)
130
+ end
131
+ end
132
+
133
+ def string_input_validator(method_name)
134
+ input_validator(method_name) do |value, context|
135
+ raise ArgumentError.new("expected string"+context) unless
136
+ value.respond_to?(:to_str)
137
+ end
138
+ end
139
+
140
+ def object_input_validator(klass, base_name, method_name, cast)
141
+ input_validator(method_name) do |value, context|
142
+ if value.kind_of?(cast)
143
+ klass.new(value).validate!
144
+ else
145
+ raise ArgumentError.new("expected #{base_name} object or hash"+context) unless
146
+ value.nil? or value.kind_of? klass
147
+ end
148
+ end
149
+ end
150
+
151
+ def object_list_input_validator(klass, base_name, method_name)
152
+ input_validator(method_name) do |value, context|
153
+ raise ArgumentError.new("expected array"+context) unless value.kind_of?(Array)
154
+ value.each do |member|
155
+ if member.kind_of?(Hash)
156
+ klass.new(member).validate!
157
+ else
158
+ raise ArgumentError.new("expected array#{context} "+
159
+ "to contain #{base_name} objects "+
160
+ "or hashes") unless
161
+ member.kind_of? klass
162
+ end
163
+ end
164
+ end
165
+ end
166
+
167
+ def input_validator(method_name, &blk)
168
+ validator = "__validator__#{blk.object_id}"
169
+ Core::MetaUtils.class_extend_method(self, validator, &blk)
170
+ Core::MetaUtils.class_extend_method(self, "validate_#{method_name}_input!") do |*args|
171
+ (value, context) = args
172
+ context = " "+context if context
173
+ context ||= ""
174
+ send(validator, value, context)
175
+ end
176
+ end
177
+
178
+ def object_setter(klass, method_name, cast)
179
+ define_method("#{method_name}=") do |value|
180
+ validate_input(method_name, value)
181
+ if value.kind_of?(cast)
182
+ value = klass.new(value)
183
+ end
184
+ instance_variable_set("@#{method_name}", value)
185
+ end
186
+ end
187
+
188
+ def object_list_setter(klass, method_name)
189
+ define_method("#{method_name}=") do |value|
190
+ validate_input(method_name, value)
191
+ list = value.map do |member|
192
+ if member.kind_of?(Hash)
193
+ klass.new(member)
194
+ else
195
+ member
196
+ end
197
+ end
198
+ instance_variable_set("@#{method_name}", list)
199
+ end
200
+ end
201
+
202
+ def validate_string(method_name)
203
+ Core::MetaUtils.class_extend_method(self, :validate!) do
204
+ super()
205
+ raise "missing #{method_name}" unless send(method_name)
206
+ end
207
+ end
208
+
209
+ def validate_object(method_name)
210
+ Core::MetaUtils.class_extend_method(self, :validate!) do
211
+ super()
212
+ raise "missing #{method_name}" unless send(method_name)
213
+ send(method_name).validate!
214
+ end
215
+ end
216
+
217
+ def validate_list(method_name)
218
+ Core::MetaUtils.class_extend_method(self, :validate!) do
219
+ super()
220
+ raise "missing #{method_name}" unless send(method_name)
221
+ send(method_name).each { |member| member.validate! }
222
+ end
223
+ end
224
+
225
+ def body_xml_string_content(element_name, method_name)
226
+ add_xml_child(method_name) do |value|
227
+ normalized = REXML::Text.normalize(value.to_s)
228
+ "<#{element_name}>#{normalized}</#{element_name}>"
229
+ end
230
+ end
231
+
232
+ def body_xml_content(method_name)
233
+ add_xml_child(method_name) { |value| value.to_s }
234
+ end
235
+
236
+ def body_xml_list_content(list_element, method_name)
237
+ add_xml_child(method_name) do |list|
238
+ list_content = list.map { |member| member.to_s }.join
239
+ if list_content.empty?
240
+ "<#{list_element}/>"
241
+ else
242
+ "<#{list_element}>#{list_content}</#{list_element}>"
243
+ end
244
+ end
245
+ end
246
+
247
+ def add_xml_child(method_name)
248
+ Core::MetaUtils.class_extend_method(self, :body_xml) do
249
+ xml = super()
250
+ value = send(method_name)
251
+ xml += yield(value) if value
252
+ xml
253
+ end
254
+ end
255
+
256
+ end
257
+
258
+ def self.included(m)
259
+ m.extend(ClassMethods)
260
+ end
261
+
262
+ end
263
+ end
264
+ end