aws-sdk-euca 1.8.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (539) hide show
  1. data/.yardopts +5 -0
  2. data/LICENSE.txt +12 -0
  3. data/README.rdoc +189 -0
  4. data/ca-bundle.crt +3895 -0
  5. data/lib/aws-sdk-euca.rb +79 -0
  6. data/lib/aws-sdk.rb +79 -0
  7. data/lib/aws.rb +14 -0
  8. data/lib/aws/api_config/AutoScaling-2011-01-01.yml +825 -0
  9. data/lib/aws/api_config/CloudFormation-2010-05-15.yml +322 -0
  10. data/lib/aws/api_config/CloudFront-2012-05-05.yml +2102 -0
  11. data/lib/aws/api_config/CloudSearch-2011-02-01.yml +681 -0
  12. data/lib/aws/api_config/CloudWatch-2010-08-01.yml +433 -0
  13. data/lib/aws/api_config/DataPipeline-2012-10-29.yml +422 -0
  14. data/lib/aws/api_config/DynamoDB-2011-12-05.yml +1160 -0
  15. data/lib/aws/api_config/EC2-2013-02-01.yml +4368 -0
  16. data/lib/aws/api_config/ELB-2012-06-01.yml +597 -0
  17. data/lib/aws/api_config/EMR-2009-03-31.yml +370 -0
  18. data/lib/aws/api_config/ElastiCache-2012-03-09.yml +777 -0
  19. data/lib/aws/api_config/ElastiCache-2012-11-15.yml +979 -0
  20. data/lib/aws/api_config/ElasticBeanstalk-2010-12-01.yml +823 -0
  21. data/lib/aws/api_config/ElasticTranscoder-2012-09-25.yml +1036 -0
  22. data/lib/aws/api_config/Glacier-2012-06-01.yml +618 -0
  23. data/lib/aws/api_config/IAM-2010-05-08.yml +1222 -0
  24. data/lib/aws/api_config/ImportExport-2010-06-01.yml +109 -0
  25. data/lib/aws/api_config/OpsWorks-2013-02-18.yml +1463 -0
  26. data/lib/aws/api_config/RDS-2012-09-17.yml +1861 -0
  27. data/lib/aws/api_config/RDS-2013-02-12.yml +2377 -0
  28. data/lib/aws/api_config/Redshift-2012-12-01.yml +1149 -0
  29. data/lib/aws/api_config/Route53-2012-02-29.yml +380 -0
  30. data/lib/aws/api_config/Route53-2012-12-12.yml +547 -0
  31. data/lib/aws/api_config/SNS-2010-03-31.yml +249 -0
  32. data/lib/aws/api_config/SQS-2012-11-05.yml +317 -0
  33. data/lib/aws/api_config/STS-2011-06-15.yml +81 -0
  34. data/lib/aws/api_config/SimpleDB-2009-04-15.yml +306 -0
  35. data/lib/aws/api_config/SimpleEmailService-2010-12-01.yml +346 -0
  36. data/lib/aws/api_config/SimpleWorkflow-2012-01-25.yml +2358 -0
  37. data/lib/aws/api_config/StorageGateway-2012-06-30.yml +748 -0
  38. data/lib/aws/auto_scaling.rb +164 -0
  39. data/lib/aws/auto_scaling/activity.rb +102 -0
  40. data/lib/aws/auto_scaling/activity_collection.rb +82 -0
  41. data/lib/aws/auto_scaling/client.rb +521 -0
  42. data/lib/aws/auto_scaling/config.rb +18 -0
  43. data/lib/aws/auto_scaling/errors.rb +22 -0
  44. data/lib/aws/auto_scaling/group.rb +420 -0
  45. data/lib/aws/auto_scaling/group_collection.rb +96 -0
  46. data/lib/aws/auto_scaling/group_options.rb +146 -0
  47. data/lib/aws/auto_scaling/instance.rb +192 -0
  48. data/lib/aws/auto_scaling/instance_collection.rb +63 -0
  49. data/lib/aws/auto_scaling/launch_configuration.rb +158 -0
  50. data/lib/aws/auto_scaling/launch_configuration_collection.rb +154 -0
  51. data/lib/aws/auto_scaling/notification_configuration.rb +89 -0
  52. data/lib/aws/auto_scaling/notification_configuration_collection.rb +184 -0
  53. data/lib/aws/auto_scaling/request.rb +29 -0
  54. data/lib/aws/auto_scaling/scaling_policy.rb +142 -0
  55. data/lib/aws/auto_scaling/scaling_policy_collection.rb +72 -0
  56. data/lib/aws/auto_scaling/scaling_policy_options.rb +64 -0
  57. data/lib/aws/auto_scaling/scheduled_action.rb +145 -0
  58. data/lib/aws/auto_scaling/scheduled_action_collection.rb +195 -0
  59. data/lib/aws/auto_scaling/tag.rb +59 -0
  60. data/lib/aws/auto_scaling/tag_collection.rb +112 -0
  61. data/lib/aws/cloud_formation.rb +272 -0
  62. data/lib/aws/cloud_formation/client.rb +369 -0
  63. data/lib/aws/cloud_formation/config.rb +18 -0
  64. data/lib/aws/cloud_formation/errors.rb +22 -0
  65. data/lib/aws/cloud_formation/request.rb +29 -0
  66. data/lib/aws/cloud_formation/stack.rb +255 -0
  67. data/lib/aws/cloud_formation/stack_collection.rb +209 -0
  68. data/lib/aws/cloud_formation/stack_event.rb +75 -0
  69. data/lib/aws/cloud_formation/stack_event_collection.rb +47 -0
  70. data/lib/aws/cloud_formation/stack_options.rb +72 -0
  71. data/lib/aws/cloud_formation/stack_output.rb +53 -0
  72. data/lib/aws/cloud_formation/stack_resource.rb +117 -0
  73. data/lib/aws/cloud_formation/stack_resource_collection.rb +84 -0
  74. data/lib/aws/cloud_formation/stack_resource_summary_collection.rb +64 -0
  75. data/lib/aws/cloud_formation/stack_summary_collection.rb +123 -0
  76. data/lib/aws/cloud_front.rb +73 -0
  77. data/lib/aws/cloud_front/client.rb +1307 -0
  78. data/lib/aws/cloud_front/config.rb +18 -0
  79. data/lib/aws/cloud_front/errors.rb +22 -0
  80. data/lib/aws/cloud_front/request.rb +44 -0
  81. data/lib/aws/cloud_search.rb +74 -0
  82. data/lib/aws/cloud_search/client.rb +558 -0
  83. data/lib/aws/cloud_search/config.rb +18 -0
  84. data/lib/aws/cloud_search/errors.rb +22 -0
  85. data/lib/aws/cloud_search/request.rb +23 -0
  86. data/lib/aws/cloud_watch.rb +119 -0
  87. data/lib/aws/cloud_watch/alarm.rb +272 -0
  88. data/lib/aws/cloud_watch/alarm_collection.rb +153 -0
  89. data/lib/aws/cloud_watch/alarm_history_item.rb +50 -0
  90. data/lib/aws/cloud_watch/alarm_history_item_collection.rb +84 -0
  91. data/lib/aws/cloud_watch/client.rb +247 -0
  92. data/lib/aws/cloud_watch/config.rb +18 -0
  93. data/lib/aws/cloud_watch/errors.rb +22 -0
  94. data/lib/aws/cloud_watch/metric.rb +135 -0
  95. data/lib/aws/cloud_watch/metric_alarm_collection.rb +160 -0
  96. data/lib/aws/cloud_watch/metric_collection.rb +131 -0
  97. data/lib/aws/cloud_watch/metric_statistics.rb +69 -0
  98. data/lib/aws/cloud_watch/request.rb +23 -0
  99. data/lib/aws/core.rb +587 -0
  100. data/lib/aws/core/async_handle.rb +90 -0
  101. data/lib/aws/core/autoloader.rb +64 -0
  102. data/lib/aws/core/cacheable.rb +78 -0
  103. data/lib/aws/core/client.rb +691 -0
  104. data/lib/aws/core/collection.rb +267 -0
  105. data/lib/aws/core/collection/simple.rb +82 -0
  106. data/lib/aws/core/collection/with_limit_and_next_token.rb +71 -0
  107. data/lib/aws/core/collection/with_next_token.rb +97 -0
  108. data/lib/aws/core/configuration.rb +546 -0
  109. data/lib/aws/core/credential_providers.rb +461 -0
  110. data/lib/aws/core/data.rb +247 -0
  111. data/lib/aws/core/http/curb_handler.rb +155 -0
  112. data/lib/aws/core/http/handler.rb +89 -0
  113. data/lib/aws/core/http/net_http_handler.rb +128 -0
  114. data/lib/aws/core/http/request.rb +263 -0
  115. data/lib/aws/core/http/response.rb +81 -0
  116. data/lib/aws/core/indifferent_hash.rb +88 -0
  117. data/lib/aws/core/inflection.rb +56 -0
  118. data/lib/aws/core/json_client.rb +47 -0
  119. data/lib/aws/core/json_parser.rb +76 -0
  120. data/lib/aws/core/json_request_builder.rb +35 -0
  121. data/lib/aws/core/json_response_parser.rb +79 -0
  122. data/lib/aws/core/lazy_error_classes.rb +90 -0
  123. data/lib/aws/core/log_formatter.rb +462 -0
  124. data/lib/aws/core/managed_file.rb +32 -0
  125. data/lib/aws/core/meta_utils.rb +45 -0
  126. data/lib/aws/core/model.rb +57 -0
  127. data/lib/aws/core/naming.rb +30 -0
  128. data/lib/aws/core/option_grammar.rb +735 -0
  129. data/lib/aws/core/options/json_serializer.rb +82 -0
  130. data/lib/aws/core/options/validator.rb +155 -0
  131. data/lib/aws/core/options/xml_serializer.rb +118 -0
  132. data/lib/aws/core/page_result.rb +75 -0
  133. data/lib/aws/core/policy.rb +916 -0
  134. data/lib/aws/core/query_client.rb +41 -0
  135. data/lib/aws/core/query_error_parser.rb +24 -0
  136. data/lib/aws/core/query_request_builder.rb +47 -0
  137. data/lib/aws/core/query_response_parser.rb +35 -0
  138. data/lib/aws/core/resource.rb +413 -0
  139. data/lib/aws/core/resource_cache.rb +40 -0
  140. data/lib/aws/core/response.rb +208 -0
  141. data/lib/aws/core/response_cache.rb +50 -0
  142. data/lib/aws/core/rest_error_parser.rb +24 -0
  143. data/lib/aws/core/rest_json_client.rb +40 -0
  144. data/lib/aws/core/rest_request_builder.rb +146 -0
  145. data/lib/aws/core/rest_response_parser.rb +66 -0
  146. data/lib/aws/core/rest_xml_client.rb +47 -0
  147. data/lib/aws/core/service_interface.rb +61 -0
  148. data/lib/aws/core/signature/version_2.rb +56 -0
  149. data/lib/aws/core/signature/version_3.rb +77 -0
  150. data/lib/aws/core/signature/version_3_https.rb +54 -0
  151. data/lib/aws/core/signature/version_4.rb +135 -0
  152. data/lib/aws/core/signer.rb +46 -0
  153. data/lib/aws/core/uri_escape.rb +44 -0
  154. data/lib/aws/core/xml/frame.rb +244 -0
  155. data/lib/aws/core/xml/frame_stack.rb +85 -0
  156. data/lib/aws/core/xml/grammar.rb +307 -0
  157. data/lib/aws/core/xml/parser.rb +70 -0
  158. data/lib/aws/core/xml/root_frame.rb +65 -0
  159. data/lib/aws/core/xml/sax_handlers/libxml.rb +47 -0
  160. data/lib/aws/core/xml/sax_handlers/nokogiri.rb +55 -0
  161. data/lib/aws/core/xml/sax_handlers/ox.rb +41 -0
  162. data/lib/aws/core/xml/sax_handlers/rexml.rb +43 -0
  163. data/lib/aws/core/xml/stub.rb +123 -0
  164. data/lib/aws/data_pipeline.rb +73 -0
  165. data/lib/aws/data_pipeline/client.rb +339 -0
  166. data/lib/aws/data_pipeline/config.rb +18 -0
  167. data/lib/aws/data_pipeline/errors.rb +20 -0
  168. data/lib/aws/data_pipeline/request.rb +26 -0
  169. data/lib/aws/dynamo_db.rb +206 -0
  170. data/lib/aws/dynamo_db/attribute_collection.rb +461 -0
  171. data/lib/aws/dynamo_db/batch_get.rb +213 -0
  172. data/lib/aws/dynamo_db/batch_write.rb +252 -0
  173. data/lib/aws/dynamo_db/binary.rb +35 -0
  174. data/lib/aws/dynamo_db/client.rb +904 -0
  175. data/lib/aws/dynamo_db/config.rb +24 -0
  176. data/lib/aws/dynamo_db/errors.rb +20 -0
  177. data/lib/aws/dynamo_db/expectations.rb +40 -0
  178. data/lib/aws/dynamo_db/item.rb +133 -0
  179. data/lib/aws/dynamo_db/item_collection.rb +852 -0
  180. data/lib/aws/dynamo_db/item_data.rb +31 -0
  181. data/lib/aws/dynamo_db/keys.rb +41 -0
  182. data/lib/aws/dynamo_db/primary_key_element.rb +48 -0
  183. data/lib/aws/dynamo_db/request.rb +26 -0
  184. data/lib/aws/dynamo_db/resource.rb +33 -0
  185. data/lib/aws/dynamo_db/table.rb +491 -0
  186. data/lib/aws/dynamo_db/table_collection.rb +165 -0
  187. data/lib/aws/dynamo_db/types.rb +111 -0
  188. data/lib/aws/ec2.rb +440 -0
  189. data/lib/aws/ec2/attachment.rb +140 -0
  190. data/lib/aws/ec2/attachment_collection.rb +54 -0
  191. data/lib/aws/ec2/availability_zone.rb +86 -0
  192. data/lib/aws/ec2/availability_zone_collection.rb +43 -0
  193. data/lib/aws/ec2/block_device_mappings.rb +53 -0
  194. data/lib/aws/ec2/client.rb +3621 -0
  195. data/lib/aws/ec2/collection.rb +36 -0
  196. data/lib/aws/ec2/config.rb +18 -0
  197. data/lib/aws/ec2/config_transform.rb +63 -0
  198. data/lib/aws/ec2/customer_gateway.rb +90 -0
  199. data/lib/aws/ec2/customer_gateway_collection.rb +73 -0
  200. data/lib/aws/ec2/dhcp_options.rb +106 -0
  201. data/lib/aws/ec2/dhcp_options_collection.rb +87 -0
  202. data/lib/aws/ec2/elastic_ip.rb +208 -0
  203. data/lib/aws/ec2/elastic_ip_collection.rb +97 -0
  204. data/lib/aws/ec2/errors.rb +32 -0
  205. data/lib/aws/ec2/export_task.rb +120 -0
  206. data/lib/aws/ec2/export_task_collection.rb +67 -0
  207. data/lib/aws/ec2/filtered_collection.rb +89 -0
  208. data/lib/aws/ec2/has_permissions.rb +44 -0
  209. data/lib/aws/ec2/image.rb +264 -0
  210. data/lib/aws/ec2/image_collection.rb +228 -0
  211. data/lib/aws/ec2/instance.rb +796 -0
  212. data/lib/aws/ec2/instance_collection.rb +372 -0
  213. data/lib/aws/ec2/internet_gateway.rb +122 -0
  214. data/lib/aws/ec2/internet_gateway/attachment.rb +78 -0
  215. data/lib/aws/ec2/internet_gateway_collection.rb +54 -0
  216. data/lib/aws/ec2/key_pair.rb +82 -0
  217. data/lib/aws/ec2/key_pair_collection.rb +99 -0
  218. data/lib/aws/ec2/network_acl.rb +256 -0
  219. data/lib/aws/ec2/network_acl/association.rb +56 -0
  220. data/lib/aws/ec2/network_acl/entry.rb +147 -0
  221. data/lib/aws/ec2/network_acl_collection.rb +64 -0
  222. data/lib/aws/ec2/network_interface.rb +228 -0
  223. data/lib/aws/ec2/network_interface/attachment.rb +100 -0
  224. data/lib/aws/ec2/network_interface_collection.rb +103 -0
  225. data/lib/aws/ec2/permission_collection.rb +174 -0
  226. data/lib/aws/ec2/region.rb +106 -0
  227. data/lib/aws/ec2/region_collection.rb +51 -0
  228. data/lib/aws/ec2/request.rb +21 -0
  229. data/lib/aws/ec2/reserved_instances.rb +56 -0
  230. data/lib/aws/ec2/reserved_instances_collection.rb +40 -0
  231. data/lib/aws/ec2/reserved_instances_offering.rb +60 -0
  232. data/lib/aws/ec2/reserved_instances_offering_collection.rb +39 -0
  233. data/lib/aws/ec2/resource.rb +161 -0
  234. data/lib/aws/ec2/resource_tag_collection.rb +211 -0
  235. data/lib/aws/ec2/route_table.rb +205 -0
  236. data/lib/aws/ec2/route_table/association.rb +119 -0
  237. data/lib/aws/ec2/route_table/route.rb +119 -0
  238. data/lib/aws/ec2/route_table_collection.rb +72 -0
  239. data/lib/aws/ec2/security_group.rb +484 -0
  240. data/lib/aws/ec2/security_group/ip_permission.rb +135 -0
  241. data/lib/aws/ec2/security_group/ip_permission_collection.rb +82 -0
  242. data/lib/aws/ec2/security_group_collection.rb +135 -0
  243. data/lib/aws/ec2/snapshot.rb +143 -0
  244. data/lib/aws/ec2/snapshot_collection.rb +132 -0
  245. data/lib/aws/ec2/subnet.rb +161 -0
  246. data/lib/aws/ec2/subnet_collection.rb +115 -0
  247. data/lib/aws/ec2/tag.rb +81 -0
  248. data/lib/aws/ec2/tag_collection.rb +107 -0
  249. data/lib/aws/ec2/tagged_collection.rb +53 -0
  250. data/lib/aws/ec2/tagged_item.rb +85 -0
  251. data/lib/aws/ec2/volume.rb +174 -0
  252. data/lib/aws/ec2/volume_collection.rb +101 -0
  253. data/lib/aws/ec2/vpc.rb +166 -0
  254. data/lib/aws/ec2/vpc_collection.rb +70 -0
  255. data/lib/aws/ec2/vpn_connection.rb +99 -0
  256. data/lib/aws/ec2/vpn_connection/telemetry.rb +49 -0
  257. data/lib/aws/ec2/vpn_connection_collection.rb +96 -0
  258. data/lib/aws/ec2/vpn_gateway.rb +123 -0
  259. data/lib/aws/ec2/vpn_gateway/attachment.rb +45 -0
  260. data/lib/aws/ec2/vpn_gateway_collection.rb +77 -0
  261. data/lib/aws/elastic_beanstalk.rb +50 -0
  262. data/lib/aws/elastic_beanstalk/client.rb +867 -0
  263. data/lib/aws/elastic_beanstalk/config.rb +18 -0
  264. data/lib/aws/elastic_beanstalk/errors.rb +22 -0
  265. data/lib/aws/elastic_beanstalk/request.rb +29 -0
  266. data/lib/aws/elastic_transcoder.rb +30 -0
  267. data/lib/aws/elastic_transcoder/client.rb +672 -0
  268. data/lib/aws/elastic_transcoder/config.rb +18 -0
  269. data/lib/aws/elastic_transcoder/errors.rb +23 -0
  270. data/lib/aws/elastic_transcoder/request.rb +30 -0
  271. data/lib/aws/elasticache.rb +50 -0
  272. data/lib/aws/elasticache/client.rb +920 -0
  273. data/lib/aws/elasticache/config.rb +18 -0
  274. data/lib/aws/elasticache/errors.rb +22 -0
  275. data/lib/aws/elasticache/request.rb +23 -0
  276. data/lib/aws/elb.rb +67 -0
  277. data/lib/aws/elb/availability_zone_collection.rb +138 -0
  278. data/lib/aws/elb/backend_server_policy_collection.rb +139 -0
  279. data/lib/aws/elb/client.rb +500 -0
  280. data/lib/aws/elb/config.rb +18 -0
  281. data/lib/aws/elb/errors.rb +26 -0
  282. data/lib/aws/elb/instance_collection.rb +173 -0
  283. data/lib/aws/elb/listener.rb +190 -0
  284. data/lib/aws/elb/listener_collection.rb +113 -0
  285. data/lib/aws/elb/listener_opts.rb +45 -0
  286. data/lib/aws/elb/load_balancer.rb +281 -0
  287. data/lib/aws/elb/load_balancer_collection.rb +134 -0
  288. data/lib/aws/elb/load_balancer_policy.rb +93 -0
  289. data/lib/aws/elb/load_balancer_policy_collection.rb +208 -0
  290. data/lib/aws/elb/request.rb +29 -0
  291. data/lib/aws/emr.rb +86 -0
  292. data/lib/aws/emr/client.rb +330 -0
  293. data/lib/aws/emr/config.rb +18 -0
  294. data/lib/aws/emr/errors.rb +22 -0
  295. data/lib/aws/emr/instance_group.rb +138 -0
  296. data/lib/aws/emr/instance_group_collection.rb +82 -0
  297. data/lib/aws/emr/job_flow.rb +306 -0
  298. data/lib/aws/emr/job_flow_collection.rb +185 -0
  299. data/lib/aws/emr/request.rb +23 -0
  300. data/lib/aws/errors.rb +162 -0
  301. data/lib/aws/glacier.rb +80 -0
  302. data/lib/aws/glacier/archive.rb +56 -0
  303. data/lib/aws/glacier/archive_collection.rb +146 -0
  304. data/lib/aws/glacier/client.rb +286 -0
  305. data/lib/aws/glacier/config.rb +19 -0
  306. data/lib/aws/glacier/errors.rb +22 -0
  307. data/lib/aws/glacier/request.rb +34 -0
  308. data/lib/aws/glacier/resource.rb +30 -0
  309. data/lib/aws/glacier/vault.rb +145 -0
  310. data/lib/aws/glacier/vault_collection.rb +75 -0
  311. data/lib/aws/glacier/vault_notification_configuration.rb +29 -0
  312. data/lib/aws/iam.rb +420 -0
  313. data/lib/aws/iam/access_key.rb +180 -0
  314. data/lib/aws/iam/access_key_collection.rb +128 -0
  315. data/lib/aws/iam/account_alias_collection.rb +79 -0
  316. data/lib/aws/iam/client.rb +1092 -0
  317. data/lib/aws/iam/collection.rb +83 -0
  318. data/lib/aws/iam/config.rb +18 -0
  319. data/lib/aws/iam/errors.rb +22 -0
  320. data/lib/aws/iam/group.rb +111 -0
  321. data/lib/aws/iam/group_collection.rb +132 -0
  322. data/lib/aws/iam/group_policy_collection.rb +47 -0
  323. data/lib/aws/iam/group_user_collection.rb +84 -0
  324. data/lib/aws/iam/login_profile.rb +99 -0
  325. data/lib/aws/iam/mfa_device.rb +52 -0
  326. data/lib/aws/iam/mfa_device_collection.rb +127 -0
  327. data/lib/aws/iam/policy.rb +46 -0
  328. data/lib/aws/iam/policy_collection.rb +188 -0
  329. data/lib/aws/iam/request.rb +29 -0
  330. data/lib/aws/iam/resource.rb +62 -0
  331. data/lib/aws/iam/server_certificate.rb +141 -0
  332. data/lib/aws/iam/server_certificate_collection.rb +138 -0
  333. data/lib/aws/iam/signing_certificate.rb +169 -0
  334. data/lib/aws/iam/signing_certificate_collection.rb +131 -0
  335. data/lib/aws/iam/user.rb +205 -0
  336. data/lib/aws/iam/user_collection.rb +133 -0
  337. data/lib/aws/iam/user_group_collection.rb +98 -0
  338. data/lib/aws/iam/user_policy.rb +90 -0
  339. data/lib/aws/iam/user_policy_collection.rb +45 -0
  340. data/lib/aws/iam/virtual_mfa_device.rb +139 -0
  341. data/lib/aws/iam/virtual_mfa_device_collection.rb +73 -0
  342. data/lib/aws/import_export.rb +73 -0
  343. data/lib/aws/import_export/client.rb +109 -0
  344. data/lib/aws/import_export/config.rb +19 -0
  345. data/lib/aws/import_export/errors.rb +22 -0
  346. data/lib/aws/import_export/request.rb +23 -0
  347. data/lib/aws/ops_works.rb +30 -0
  348. data/lib/aws/ops_works/client.rb +713 -0
  349. data/lib/aws/ops_works/config.rb +18 -0
  350. data/lib/aws/ops_works/errors.rb +20 -0
  351. data/lib/aws/ops_works/request.rb +27 -0
  352. data/lib/aws/rails.rb +195 -0
  353. data/lib/aws/rds.rb +71 -0
  354. data/lib/aws/rds/client.rb +2228 -0
  355. data/lib/aws/rds/config.rb +18 -0
  356. data/lib/aws/rds/db_instance.rb +205 -0
  357. data/lib/aws/rds/db_instance_collection.rb +75 -0
  358. data/lib/aws/rds/db_snapshot.rb +163 -0
  359. data/lib/aws/rds/db_snapshot_collection.rb +89 -0
  360. data/lib/aws/rds/errors.rb +22 -0
  361. data/lib/aws/rds/request.rb +23 -0
  362. data/lib/aws/record.rb +116 -0
  363. data/lib/aws/record/abstract_base.rb +701 -0
  364. data/lib/aws/record/attributes.rb +384 -0
  365. data/lib/aws/record/conversion.rb +38 -0
  366. data/lib/aws/record/dirty_tracking.rb +285 -0
  367. data/lib/aws/record/errors.rb +143 -0
  368. data/lib/aws/record/exceptions.rb +48 -0
  369. data/lib/aws/record/hash_model.rb +161 -0
  370. data/lib/aws/record/hash_model/attributes.rb +197 -0
  371. data/lib/aws/record/hash_model/finder_methods.rb +172 -0
  372. data/lib/aws/record/hash_model/scope.rb +108 -0
  373. data/lib/aws/record/model.rb +427 -0
  374. data/lib/aws/record/model/attributes.rb +379 -0
  375. data/lib/aws/record/model/finder_methods.rb +232 -0
  376. data/lib/aws/record/model/scope.rb +213 -0
  377. data/lib/aws/record/naming.rb +31 -0
  378. data/lib/aws/record/scope.rb +199 -0
  379. data/lib/aws/record/validations.rb +712 -0
  380. data/lib/aws/record/validator.rb +246 -0
  381. data/lib/aws/record/validators/acceptance.rb +51 -0
  382. data/lib/aws/record/validators/block.rb +38 -0
  383. data/lib/aws/record/validators/confirmation.rb +43 -0
  384. data/lib/aws/record/validators/count.rb +108 -0
  385. data/lib/aws/record/validators/exclusion.rb +43 -0
  386. data/lib/aws/record/validators/format.rb +57 -0
  387. data/lib/aws/record/validators/inclusion.rb +56 -0
  388. data/lib/aws/record/validators/length.rb +107 -0
  389. data/lib/aws/record/validators/method.rb +33 -0
  390. data/lib/aws/record/validators/numericality.rb +138 -0
  391. data/lib/aws/record/validators/presence.rb +45 -0
  392. data/lib/aws/redshift.rb +52 -0
  393. data/lib/aws/redshift/client.rb +1291 -0
  394. data/lib/aws/redshift/config.rb +18 -0
  395. data/lib/aws/redshift/errors.rb +22 -0
  396. data/lib/aws/redshift/request.rb +29 -0
  397. data/lib/aws/route_53.rb +87 -0
  398. data/lib/aws/route_53/change_batch.rb +159 -0
  399. data/lib/aws/route_53/change_info.rb +72 -0
  400. data/lib/aws/route_53/client.rb +387 -0
  401. data/lib/aws/route_53/config.rb +18 -0
  402. data/lib/aws/route_53/errors.rb +22 -0
  403. data/lib/aws/route_53/hosted_zone.rb +111 -0
  404. data/lib/aws/route_53/hosted_zone_collection.rb +100 -0
  405. data/lib/aws/route_53/request.rb +23 -0
  406. data/lib/aws/route_53/resource_record_set.rb +237 -0
  407. data/lib/aws/route_53/resource_record_set_collection.rb +110 -0
  408. data/lib/aws/s3.rb +155 -0
  409. data/lib/aws/s3/access_control_list.rb +257 -0
  410. data/lib/aws/s3/acl_object.rb +264 -0
  411. data/lib/aws/s3/acl_options.rb +204 -0
  412. data/lib/aws/s3/bucket.rb +742 -0
  413. data/lib/aws/s3/bucket_collection.rb +160 -0
  414. data/lib/aws/s3/bucket_lifecycle_configuration.rb +458 -0
  415. data/lib/aws/s3/bucket_tag_collection.rb +109 -0
  416. data/lib/aws/s3/bucket_version_collection.rb +77 -0
  417. data/lib/aws/s3/cipher_io.rb +119 -0
  418. data/lib/aws/s3/client.rb +1700 -0
  419. data/lib/aws/s3/client/xml.rb +231 -0
  420. data/lib/aws/s3/config.rb +36 -0
  421. data/lib/aws/s3/cors_rule.rb +106 -0
  422. data/lib/aws/s3/cors_rule_collection.rb +192 -0
  423. data/lib/aws/s3/data_options.rb +185 -0
  424. data/lib/aws/s3/encryption_utils.rb +139 -0
  425. data/lib/aws/s3/errors.rb +94 -0
  426. data/lib/aws/s3/multipart_upload.rb +320 -0
  427. data/lib/aws/s3/multipart_upload_collection.rb +68 -0
  428. data/lib/aws/s3/object_collection.rb +355 -0
  429. data/lib/aws/s3/object_metadata.rb +96 -0
  430. data/lib/aws/s3/object_upload_collection.rb +77 -0
  431. data/lib/aws/s3/object_version.rb +148 -0
  432. data/lib/aws/s3/object_version_collection.rb +89 -0
  433. data/lib/aws/s3/paginated_collection.rb +75 -0
  434. data/lib/aws/s3/policy.rb +74 -0
  435. data/lib/aws/s3/prefix_and_delimiter_collection.rb +47 -0
  436. data/lib/aws/s3/prefixed_collection.rb +81 -0
  437. data/lib/aws/s3/presigned_post.rb +555 -0
  438. data/lib/aws/s3/request.rb +201 -0
  439. data/lib/aws/s3/s3_object.rb +1690 -0
  440. data/lib/aws/s3/tree.rb +118 -0
  441. data/lib/aws/s3/tree/branch_node.rb +68 -0
  442. data/lib/aws/s3/tree/child_collection.rb +104 -0
  443. data/lib/aws/s3/tree/leaf_node.rb +94 -0
  444. data/lib/aws/s3/tree/node.rb +22 -0
  445. data/lib/aws/s3/tree/parent.rb +87 -0
  446. data/lib/aws/s3/uploaded_part.rb +80 -0
  447. data/lib/aws/s3/uploaded_part_collection.rb +84 -0
  448. data/lib/aws/s3/website_configuration.rb +102 -0
  449. data/lib/aws/simple_db.rb +219 -0
  450. data/lib/aws/simple_db/attribute.rb +154 -0
  451. data/lib/aws/simple_db/attribute_collection.rb +231 -0
  452. data/lib/aws/simple_db/client.rb +287 -0
  453. data/lib/aws/simple_db/config.rb +20 -0
  454. data/lib/aws/simple_db/consistent_read_option.rb +42 -0
  455. data/lib/aws/simple_db/delete_attributes.rb +62 -0
  456. data/lib/aws/simple_db/domain.rb +121 -0
  457. data/lib/aws/simple_db/domain_collection.rb +86 -0
  458. data/lib/aws/simple_db/domain_metadata.rb +110 -0
  459. data/lib/aws/simple_db/errors.rb +55 -0
  460. data/lib/aws/simple_db/expect_condition_option.rb +45 -0
  461. data/lib/aws/simple_db/item.rb +93 -0
  462. data/lib/aws/simple_db/item_collection.rb +649 -0
  463. data/lib/aws/simple_db/item_data.rb +73 -0
  464. data/lib/aws/simple_db/put_attributes.rb +60 -0
  465. data/lib/aws/simple_db/request.rb +23 -0
  466. data/lib/aws/simple_email_service.rb +428 -0
  467. data/lib/aws/simple_email_service/client.rb +276 -0
  468. data/lib/aws/simple_email_service/config.rb +19 -0
  469. data/lib/aws/simple_email_service/email_address_collection.rb +69 -0
  470. data/lib/aws/simple_email_service/errors.rb +22 -0
  471. data/lib/aws/simple_email_service/identity.rb +209 -0
  472. data/lib/aws/simple_email_service/identity_collection.rb +81 -0
  473. data/lib/aws/simple_email_service/quotas.rb +64 -0
  474. data/lib/aws/simple_email_service/request.rb +27 -0
  475. data/lib/aws/simple_workflow.rb +228 -0
  476. data/lib/aws/simple_workflow/activity_task.rb +173 -0
  477. data/lib/aws/simple_workflow/activity_task_collection.rb +123 -0
  478. data/lib/aws/simple_workflow/activity_type.rb +131 -0
  479. data/lib/aws/simple_workflow/activity_type_collection.rb +93 -0
  480. data/lib/aws/simple_workflow/client.rb +1204 -0
  481. data/lib/aws/simple_workflow/config.rb +18 -0
  482. data/lib/aws/simple_workflow/count.rb +49 -0
  483. data/lib/aws/simple_workflow/decision_task.rb +603 -0
  484. data/lib/aws/simple_workflow/decision_task_collection.rb +225 -0
  485. data/lib/aws/simple_workflow/domain.rb +122 -0
  486. data/lib/aws/simple_workflow/domain_collection.rb +169 -0
  487. data/lib/aws/simple_workflow/errors.rb +20 -0
  488. data/lib/aws/simple_workflow/history_event.rb +276 -0
  489. data/lib/aws/simple_workflow/history_event_collection.rb +76 -0
  490. data/lib/aws/simple_workflow/option_formatters.rb +82 -0
  491. data/lib/aws/simple_workflow/request.rb +33 -0
  492. data/lib/aws/simple_workflow/resource.rb +94 -0
  493. data/lib/aws/simple_workflow/type.rb +89 -0
  494. data/lib/aws/simple_workflow/type_collection.rb +140 -0
  495. data/lib/aws/simple_workflow/workflow_execution.rb +386 -0
  496. data/lib/aws/simple_workflow/workflow_execution_collection.rb +617 -0
  497. data/lib/aws/simple_workflow/workflow_type.rb +177 -0
  498. data/lib/aws/simple_workflow/workflow_type_collection.rb +91 -0
  499. data/lib/aws/sns.rb +76 -0
  500. data/lib/aws/sns/client.rb +266 -0
  501. data/lib/aws/sns/config.rb +18 -0
  502. data/lib/aws/sns/errors.rb +22 -0
  503. data/lib/aws/sns/has_delivery_policy.rb +68 -0
  504. data/lib/aws/sns/policy.rb +47 -0
  505. data/lib/aws/sns/request.rb +23 -0
  506. data/lib/aws/sns/subscription.rb +144 -0
  507. data/lib/aws/sns/subscription_collection.rb +78 -0
  508. data/lib/aws/sns/topic.rb +403 -0
  509. data/lib/aws/sns/topic_collection.rb +62 -0
  510. data/lib/aws/sns/topic_subscription_collection.rb +54 -0
  511. data/lib/aws/sqs.rb +81 -0
  512. data/lib/aws/sqs/client.rb +258 -0
  513. data/lib/aws/sqs/config.rb +18 -0
  514. data/lib/aws/sqs/errors.rb +101 -0
  515. data/lib/aws/sqs/policy.rb +48 -0
  516. data/lib/aws/sqs/queue.rb +764 -0
  517. data/lib/aws/sqs/queue_collection.rb +174 -0
  518. data/lib/aws/sqs/received_message.rb +181 -0
  519. data/lib/aws/sqs/received_sns_message.rb +116 -0
  520. data/lib/aws/sqs/request.rb +67 -0
  521. data/lib/aws/storage_gateway.rb +73 -0
  522. data/lib/aws/storage_gateway/client.rb +472 -0
  523. data/lib/aws/storage_gateway/config.rb +18 -0
  524. data/lib/aws/storage_gateway/errors.rb +22 -0
  525. data/lib/aws/storage_gateway/request.rb +28 -0
  526. data/lib/aws/sts.rb +163 -0
  527. data/lib/aws/sts/client.rb +157 -0
  528. data/lib/aws/sts/config.rb +18 -0
  529. data/lib/aws/sts/errors.rb +22 -0
  530. data/lib/aws/sts/federated_session.rb +56 -0
  531. data/lib/aws/sts/policy.rb +30 -0
  532. data/lib/aws/sts/request.rb +29 -0
  533. data/lib/aws/sts/session.rb +48 -0
  534. data/lib/aws/version.rb +18 -0
  535. data/lib/net/http/connection_pool.rb +226 -0
  536. data/lib/net/http/connection_pool/connection.rb +189 -0
  537. data/lib/net/http/connection_pool/session.rb +126 -0
  538. data/rails/init.rb +15 -0
  539. metadata +632 -0
@@ -0,0 +1,46 @@
1
+ # Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ require 'base64'
15
+
16
+ module AWS
17
+ module Core
18
+
19
+ # This module provides a {#sign} method that accepts a secret
20
+ # and a string to sign.
21
+ module Signer
22
+
23
+ # Signs a string using the credentials stored in memory.
24
+ # @param [String] secret Usually an AWS secret access key.
25
+ # @param [String] string_to_sign The string to sign.
26
+ # @param [String] digest_method The digest method to use when
27
+ # computing the HMAC digest.
28
+ # @return [String] Returns the computed signature.
29
+ def sign secret, string_to_sign, digest_method = 'sha256'
30
+ Base64.encode64(hmac(secret, string_to_sign, digest_method)).strip
31
+ end
32
+ module_function :sign
33
+
34
+ # Computes an HMAC digest of the passed string.
35
+ # @param [String] key
36
+ # @param [String] value
37
+ # @param [String] digest ('sha256')
38
+ # @return [String]
39
+ def hmac key, value, digest = 'sha256'
40
+ OpenSSL::HMAC.digest(OpenSSL::Digest::Digest.new(digest), key, value)
41
+ end
42
+ module_function :hmac
43
+
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,44 @@
1
+ # Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ require 'cgi'
15
+
16
+ module AWS
17
+ module Core
18
+
19
+ # Provides helper methods for URI escaping values and paths.
20
+ module UriEscape
21
+
22
+ # @param [String] value
23
+ # @return [String] Returns a URI escaped string.
24
+ def escape value
25
+ value = value.encode("UTF-8") if value.respond_to?(:encode)
26
+ CGI::escape(value.to_s).gsub('+', '%20').gsub('%7E', '~')
27
+ end
28
+ module_function :escape
29
+
30
+ # @param [String] value
31
+ # @return [String] Returns a URI-escaped path without escaping the
32
+ # separators.
33
+ def escape_path value
34
+ escaped = ""
35
+ value.scan(%r{(/*)([^/]*)(/*)}) do |(leading, part, trailing)|
36
+ escaped << leading + escape(part) + trailing
37
+ end
38
+ escaped
39
+ end
40
+ module_function :escape_path
41
+
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,244 @@
1
+ # Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ require 'base64'
15
+ require 'date'
16
+ require 'time'
17
+
18
+ module AWS
19
+ module Core
20
+ module XML
21
+ class Frame
22
+
23
+ TRANSLATE_DIGITS = ['0123456789'.freeze, ('X'*10).freeze]
24
+
25
+ EASY_FORMAT = "XXXX-XX-XXTXX:XX:XX.XXXZ".freeze
26
+
27
+ DATE_PUNCTUATION = ['-:.TZ'.freeze, (' '*5).freeze]
28
+
29
+ def initialize root_frame, parent_frame, element_name, rules
30
+
31
+ @root_frame = root_frame
32
+ @parent_frame = parent_frame
33
+ @element_name = element_name
34
+ @rules = rules
35
+ @rules[:children] ||= {}
36
+
37
+ @data = {}.merge(rules[:defaults] || {})
38
+ @text = nil
39
+
40
+ # initialize values for child frames of special types (e.g.
41
+ # lists, maps, and forced elements)
42
+ known_child_frames.each do |child_frame|
43
+ context = data_context_for(child_frame)
44
+ if child_frame.list?
45
+ context[child_frame.ruby_name] = []
46
+ elsif child_frame.map?
47
+ context[child_frame.ruby_name] = {}
48
+ elsif child_frame.forced?
49
+ context[child_frame.ruby_name] = child_frame.value
50
+ end
51
+ end
52
+
53
+ end
54
+
55
+ attr_reader :root_frame
56
+ attr_reader :parent_frame
57
+ attr_reader :element_name
58
+ attr_reader :rules
59
+
60
+ def data
61
+ ignored? ? parent_frame.data : @data
62
+ end
63
+
64
+ def ruby_name
65
+ rules[:rename] || root_frame.inflect(element_name)
66
+ end
67
+
68
+ def rules_for child_element_name
69
+ rules[:children][child_element_name] || {}
70
+ end
71
+
72
+ # The list of child frames that have customizations (rules), all
73
+ # other children will be parsed using standard rules
74
+ def known_child_frames
75
+ rules[:children].keys.map {|name| build_child_frame(name) }
76
+ end
77
+
78
+ def build_child_frame element_name
79
+ # if element_name should be wrapped
80
+ # build a frame for the wrapper
81
+ # build a child frame from the wrapper
82
+ # else
83
+ Frame.new(root_frame, self, element_name, rules_for(element_name))
84
+ end
85
+
86
+ def consume_child_frame child_frame
87
+
88
+ child_frame.close
89
+
90
+ return if child_frame.ignored?
91
+
92
+ ruby_name = child_frame.ruby_name
93
+ value = child_frame.value
94
+ context = data_context_for(child_frame)
95
+
96
+ if child_frame.list?
97
+ context[ruby_name] << value
98
+ elsif map = child_frame.map?
99
+ context[ruby_name][child_frame.map_key] = child_frame.map_value
100
+ else
101
+ context[ruby_name] = value
102
+ end
103
+ end
104
+
105
+ def close
106
+ # some xml elements should be indexed at the root level
107
+ # The :index rule determines the name of this index
108
+ # and what keys the data should be indexed as (one element
109
+ # can be indexed under multiple keys). The index value
110
+ # is always the element itself.
111
+ if index = @rules[:index]
112
+ index_keys_for(index) do |key|
113
+ root_frame.add_to_index(index[:name], key, data)
114
+ end
115
+ end
116
+ end
117
+
118
+ def index_keys_for index_opts, &block
119
+
120
+ # simple (single) key
121
+ if key = index_opts[:key]
122
+ yield(data[key])
123
+ return
124
+ end
125
+
126
+ # composite key, joined by ":"
127
+ if parts = index_opts[:keys]
128
+ composite_key = parts.map{|part| data[part] }.join(":")
129
+ yield(composite_key)
130
+ return
131
+ end
132
+
133
+ # multiple keys, collected from the given path
134
+ if path = index_opts[:key_path]
135
+ keys_from_path(data, path.dup, &block)
136
+ return
137
+ end
138
+
139
+ raise "missing require index rule option, :key, :keys or :key_path"
140
+
141
+ end
142
+
143
+ def keys_from_path data, path, &block
144
+
145
+ step = path.shift
146
+ value = data[step]
147
+
148
+ if path.empty?
149
+ yield(value)
150
+ return
151
+ end
152
+
153
+ if value.is_a?(Array)
154
+ value.each do |v|
155
+ keys_from_path(v, path.dup, &block)
156
+ end
157
+ else
158
+ keys_from_path(value, path.dup, &block)
159
+ end
160
+
161
+ end
162
+
163
+ def add_text chars
164
+ @text ||= ''
165
+ @text << chars
166
+ end
167
+
168
+ def value
169
+ if !data.empty?
170
+ data[:encoding] == 'base64' ? Base64.decode64(@text.strip) : data
171
+ elsif @text.nil?
172
+ rules[:type] == :boolean ? false : nil
173
+ else
174
+ case rules[:type]
175
+ when nil, :string then @text
176
+ when :datetime then datetime_like_value(DateTime, :civil)
177
+ when :time then datetime_like_value(Time, :utc)
178
+ when :integer then @text.to_i
179
+ when :float then @text.to_f
180
+ when :boolean then @text == 'true'
181
+ when :blob then Base64.decode64(@text)
182
+ when :symbol then Core::Inflection.ruby_name(@text).to_sym
183
+ else raise "unhandled type"
184
+ end
185
+ end
186
+ end
187
+
188
+ def ignored?
189
+ @rules[:ignore]
190
+ end
191
+
192
+ def forced?
193
+ @rules[:force]
194
+ end
195
+
196
+ def list?
197
+ @rules[:list]
198
+ end
199
+
200
+ def map?
201
+ @rules[:map]
202
+ end
203
+
204
+ def wrapped?
205
+ @rules[:wrap]
206
+ end
207
+ alias_method :wrapper, :wrapped?
208
+
209
+ protected
210
+
211
+ def map_key
212
+ data[root_frame.inflect(@rules[:map].first)]
213
+ end
214
+
215
+ def map_value
216
+ data[root_frame.inflect(@rules[:map].last)]
217
+ end
218
+
219
+ def data_context_for child_frame
220
+ if child_frame.wrapped?
221
+ data[child_frame.wrapper] ||= {}
222
+ data[child_frame.wrapper]
223
+ else
224
+ data
225
+ end
226
+ end
227
+
228
+ def datetime_like_value klass, parts_constructor
229
+ # it's way faster to parse this specific format manually
230
+ # vs. DateTime#parse, and this happens to be the format
231
+ # that AWS uses almost (??) everywhere.
232
+ if @text.tr(*TRANSLATE_DIGITS) == EASY_FORMAT
233
+ parts = @text.tr(*DATE_PUNCTUATION).chop.split.map {|p| p.to_i }
234
+ klass.send(parts_constructor, *parts)
235
+ else
236
+ # fallback in case we have to handle another date format
237
+ klass.parse(@text)
238
+ end
239
+ end
240
+
241
+ end
242
+ end
243
+ end
244
+ end
@@ -0,0 +1,85 @@
1
+ # Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ module AWS
15
+ module Core
16
+ module XML
17
+
18
+ # @private
19
+ module FrameStack
20
+
21
+ # @param [Hash] rules A hash of parser rules. These
22
+ # rules are typically generated by an {XML::Grammar}.
23
+ def initialize rules
24
+ @frame = RootFrame.new(rules)
25
+ end
26
+
27
+ def sax_parse xml
28
+ raise NotImplementedError
29
+ end
30
+ protected :sax_parse
31
+
32
+ # Parses the xml string and returns a hash with the resutls.
33
+ # @param [String] xml
34
+ # @return [Hash]
35
+ def parse xml
36
+ sax_parse(xml)
37
+ @frame.value
38
+ end
39
+
40
+ # Increase the frame stack level by one.
41
+ # @param [String] element_name The name of the xml opening tag.
42
+ # @param [Hash] attributes A hash of xml element attributes.
43
+ # @return [nil]
44
+ def start_element element_name, attributes = {}
45
+ @frame = @frame.build_child_frame(element_name)
46
+ self.attributes(attributes)
47
+ nil
48
+ end
49
+
50
+ # Increase the frame stack level by one by treating
51
+ # xml element attributes as nested elements.
52
+ # @param [Hash] attributes A hash of attributes names to values.
53
+ # @return [nil]
54
+ def attributes attributes
55
+ attributes.each_pair do |attr_name, attr_value|
56
+ attr_frame = @frame.build_child_frame(attr_name)
57
+ attr_frame.add_text(attr_value)
58
+ @frame.consume_child_frame(attr_frame)
59
+ end
60
+ nil
61
+ end
62
+
63
+ # Pops the top frame off the stack. When closing frames
64
+ # their final value is computed.
65
+ # @overload end_element
66
+ # @return [nil]
67
+ def end_element *ignored
68
+ parent = @frame.parent_frame
69
+ child = @frame
70
+ parent.consume_child_frame(child)
71
+ @frame = @frame.parent_frame
72
+ nil
73
+ end
74
+
75
+ # Adds text to the current frame. Frames that only contain
76
+ # text and no child elements are leaf nodes and have
77
+ # raw string values.
78
+ def text text
79
+ @frame.add_text(text) if @frame
80
+ end
81
+
82
+ end
83
+ end
84
+ end
85
+ end
@@ -0,0 +1,307 @@
1
+ # Copyright 2011-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License"). You
4
+ # may not use this file except in compliance with the License. A copy of
5
+ # the License is located at
6
+ #
7
+ # http://aws.amazon.com/apache2.0/
8
+ #
9
+ # or in the "license" file accompanying this file. This file is
10
+ # distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
11
+ # ANY KIND, either express or implied. See the License for the specific
12
+ # language governing permissions and limitations under the License.
13
+
14
+ module AWS
15
+ module Core
16
+ module XML
17
+
18
+ # A class that simplifies building XML {Parser} rules. This is also
19
+ # a compatability layer between the old and new formats of the api
20
+ # config.
21
+ class Grammar
22
+
23
+ def initialize rules = {}, options = {}
24
+ @rules = rules
25
+ @context = @rules
26
+ @element_name = 'xml'
27
+ @inflect_rename = options.key?(:inflect_rename) ?
28
+ options[:inflect_rename] : true
29
+ end
30
+
31
+ # Parses the XML with the rules provided by the current grammar.
32
+ # This method is meant to provide backwards compatability with
33
+ # the old XmlGrammar class that handled rules and parsing.
34
+ # @param [String] xml
35
+ # @return [Data] Returns a hash-like parsed response.
36
+ def parse xml
37
+ Data.new(Parser.parse(xml, rules))
38
+ end
39
+
40
+ # @return [Hash] Returns a hash of rules defined by this grammar.
41
+ attr_reader :rules
42
+
43
+ # Returns a new grammar (leaving the current one un-modified) with
44
+ # the given customizations applied. Customizations can be given in
45
+ # a hash-form or in a block form.
46
+ #
47
+ # @example Block-form customizations
48
+ #
49
+ # grammar.customize do
50
+ # element "EnumElement" do
51
+ # symbol_value
52
+ # list
53
+ # end
54
+ # end
55
+ #
56
+ # @example Hash-form customizations
57
+ #
58
+ # grammar.customize "EnumElement" => [:symbol_value, :list]
59
+ #
60
+ # @return [Grammar] Returns a grammar with the given customizations
61
+ # applied.
62
+ #
63
+ def customize customizations = nil, &block
64
+ opts = { :inflect_rename => @inflect_rename }
65
+ self.class.customize(customizations, @rules, opts, &block)
66
+ end
67
+
68
+ # Applies customizations to the current grammar, not returning
69
+ # a new grammar.
70
+ def customize! customizations = nil, &block
71
+ apply_customizations(customizations) if customizations
72
+ instance_eval(&block) if block_given?
73
+ self
74
+ end
75
+
76
+ def self.customize customizations = nil, rules = {}, opts = {}, &block
77
+ grammar = self.new(deep_copy(rules), opts)
78
+ grammar.send(:apply_customizations, customizations) if customizations
79
+ grammar.instance_eval(&block) if block_given?
80
+ grammar
81
+ end
82
+
83
+ def self.parse xml
84
+ self.new.parse(xml)
85
+ end
86
+
87
+ protected
88
+
89
+ # Performs a deep copy of the rules hash so that it can be
90
+ # customized without chaning the parent grammar.
91
+ def self.deep_copy rules
92
+ rules.inject({}) do |copy,(key,value)|
93
+ copy[key] = value.is_a?(Hash) ? deep_copy(value) : value
94
+ copy
95
+ end
96
+ end
97
+
98
+ def apply_customizations customizations
99
+ customizations.each do |item|
100
+ (type, identifier, args) = parse_customization_item(item)
101
+ case type
102
+ when :method
103
+ validate_config_method(identifier)
104
+ validate_args(identifier, args)
105
+ send(identifier, *args)
106
+ when :element
107
+ element(identifier) do
108
+ apply_customizations(args)
109
+ end
110
+ end
111
+ end
112
+ end
113
+
114
+ def parse_customization_item item
115
+ case item
116
+ when Symbol
117
+ [:method, item, []]
118
+ when Hash
119
+ (method, arg) = item.to_a.first
120
+ if method.kind_of?(Symbol)
121
+ [:method, method, [arg].flatten]
122
+ else
123
+ [:element, method, arg]
124
+ end
125
+ end
126
+ end
127
+
128
+ def validate_config_method(method)
129
+ allow_methods = %w(
130
+ rename attribute_name boolean integer long float list force string
131
+ ignore collect_values symbol_value timestamp map_entry map blob
132
+ position
133
+ )
134
+ unless allow_methods.include?(method.to_s)
135
+ raise "#{method} cannot be used in configuration"
136
+ end
137
+ end
138
+
139
+ def validate_args(identifier, args)
140
+ arity = method(identifier).arity
141
+ if args.length > 0
142
+ raise "#{identifier} does not accept an argument" if
143
+ arity == 0
144
+ else
145
+ raise "#{identifier} requires an argument" unless
146
+ arity == 0 || arity == -1
147
+ end
148
+ end
149
+
150
+ def inflect value
151
+ Inflection.ruby_name(value.to_s).to_sym
152
+ end
153
+
154
+ ##
155
+ ## customization methods
156
+ ##
157
+
158
+ def element element_name, &block
159
+
160
+ parent_context = @context
161
+ parent_element_name = @element_name
162
+
163
+ @context = context_for_child(element_name)
164
+
165
+ @element_name = element_name
166
+
167
+ begin
168
+ if block_given?
169
+ block.arity == 1 ? yield(parent_element_name) : yield
170
+ end
171
+ ensure
172
+ @context = parent_context
173
+ @element_name = parent_element_name
174
+ end
175
+
176
+ end
177
+
178
+ def ignore
179
+ @context[:ignore] = true
180
+ end
181
+
182
+ def rename new_name
183
+ if @inflect_rename
184
+ @context[:rename] = inflect(new_name)
185
+ else
186
+ @context[:rename] = new_name
187
+ end
188
+ end
189
+
190
+ def force
191
+ @context[:force] = true
192
+ end
193
+
194
+ def collect_values
195
+ @context[:list] = true
196
+ end
197
+
198
+ def index index_name, options = {}
199
+ @context[:index] = options.merge(:name => index_name)
200
+ end
201
+
202
+ def default_value name, value
203
+ @context[:defaults] ||= {}
204
+ @context[:defaults][name] = value
205
+ end
206
+
207
+ def list child_element_name = nil, &block
208
+ if child_element_name
209
+ ignore
210
+ element(child_element_name) do |parent_element_name|
211
+ rename(parent_element_name)
212
+ collect_values
213
+ yield if block_given?
214
+ end
215
+ else
216
+ collect_values
217
+ end
218
+ end
219
+
220
+ def map_entry key_element_name, value_element_name
221
+ @context[:map] = [key_element_name, value_element_name]
222
+ end
223
+
224
+ def map map_element_name, key_element_name, value_element_name
225
+ ignore
226
+ element(map_element_name) do |parent_element_name|
227
+ rename(parent_element_name)
228
+ map_entry(key_element_name, value_element_name)
229
+ end
230
+ end
231
+
232
+ def wrapper method_name, options = {}, &block
233
+ options[:for].each do |child|
234
+ context_for_child(child)[:wrap] = method_name
235
+ end
236
+ end
237
+
238
+ def construct_value &block
239
+ raise 'remove the need for this'
240
+ end
241
+
242
+ def boolean_value
243
+ @context[:type] = :boolean
244
+ end
245
+ alias_method :boolean, :boolean_value
246
+
247
+ def blob_value
248
+ @context[:type] = :blob
249
+ end
250
+ alias_method :blob, :blob_value
251
+
252
+ def datetime_value
253
+ @context[:type] = :datetime
254
+ end
255
+ alias_method :datetime, :datetime_value
256
+
257
+ def time_value
258
+ @context[:type] = :time
259
+ end
260
+ alias_method :timestamp, :time_value
261
+ alias_method :time, :time_value
262
+
263
+ def string_value
264
+ @context[:type] = :string
265
+ end
266
+ alias_method :string, :string_value
267
+
268
+ def integer_value
269
+ @context[:type] = :integer
270
+ end
271
+ alias_method :integer, :integer_value
272
+ alias_method :long, :integer_value
273
+
274
+ def float_value
275
+ @context[:type] = :float
276
+ end
277
+ alias_method :float, :float_value
278
+
279
+ def symbol_value
280
+ @context[:type] = :symbol
281
+ end
282
+ alias_method :symbol, :symbol_value
283
+
284
+ def eql? other
285
+ other.is_a?(Grammar) and self.rules == other.rules
286
+ end
287
+ alias_method :==, :eql?
288
+
289
+ def position *args; end
290
+ def http_trait *args; end
291
+ alias_method :http_header, :http_trait
292
+ alias_method :http_uri_label, :http_trait
293
+ alias_method :http_payload, :http_trait
294
+ alias_method :http_status, :http_trait
295
+
296
+
297
+ protected
298
+ def context_for_child child_element_name
299
+ @context[:children] ||= {}
300
+ @context[:children][child_element_name] ||= {}
301
+ @context[:children][child_element_name]
302
+ end
303
+
304
+ end
305
+ end
306
+ end
307
+ end