aws-sdk-core 2.0.0.rc1

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 (417) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +7 -0
  3. data/.simplecov +6 -0
  4. data/.travis.yml +12 -0
  5. data/.yardopts +11 -0
  6. data/Gemfile +26 -0
  7. data/LICENSE.txt +12 -0
  8. data/README.md +169 -0
  9. data/Rakefile +15 -0
  10. data/apis/AutoScaling-2011-01-01.json +1852 -0
  11. data/apis/CloudFormation-2010-05-15.json +981 -0
  12. data/apis/CloudFront-2012-05-05.json +3861 -0
  13. data/apis/CloudFront-2013-05-12.json +4593 -0
  14. data/apis/CloudFront-2013-08-26.json +4849 -0
  15. data/apis/CloudSearch-2011-02-01.json +2080 -0
  16. data/apis/CloudWatch-2010-08-01.json +1206 -0
  17. data/apis/DataPipeline-2012-10-29.json +901 -0
  18. data/apis/DirectConnect-2012-10-25.json +825 -0
  19. data/apis/DynamoDB-2011-12-05.json +2857 -0
  20. data/apis/DynamoDB-2012-08-10.json +3127 -0
  21. data/apis/EC2-2013-06-15.json +13600 -0
  22. data/apis/EC2-2013-10-01.json +14574 -0
  23. data/apis/EMR-2009-03-31.json +957 -0
  24. data/apis/ElastiCache-2012-11-15.json +2921 -0
  25. data/apis/ElastiCache-2013-06-15.json +3586 -0
  26. data/apis/ElasticBeanstalk-2010-12-01.json +2225 -0
  27. data/apis/ElasticLoadBalancing-2012-06-01.json +1215 -0
  28. data/apis/ElasticTranscoder-2012-09-25.json +3692 -0
  29. data/apis/Glacier-2012-06-01.json +1058 -0
  30. data/apis/IAM-2010-05-08.json +2863 -0
  31. data/apis/ImportExport-2010-06-01.json +328 -0
  32. data/apis/OpsWorks-2013-02-18.json +3546 -0
  33. data/apis/RDS-2013-01-10.json +6772 -0
  34. data/apis/RDS-2013-02-12.json +7151 -0
  35. data/apis/RDS-2013-05-15.json +7809 -0
  36. data/apis/Redshift-2012-12-01.json +4180 -0
  37. data/apis/Route53-2012-12-12.json +1018 -0
  38. data/apis/S3-2006-03-01.json +3787 -0
  39. data/apis/SDB-2009-04-15.json +539 -0
  40. data/apis/SES-2010-12-01.json +678 -0
  41. data/apis/SNS-2010-03-31.json +870 -0
  42. data/apis/SQS-2012-11-05.json +798 -0
  43. data/apis/STS-2011-06-15.json +352 -0
  44. data/apis/SWF-2012-01-25.json +5451 -0
  45. data/apis/StorageGateway-2012-06-30.json +1696 -0
  46. data/apis/Support-2013-04-15.json +794 -0
  47. data/apis/configuration/endpoints.json +1337 -0
  48. data/apis/source/autoscaling-2011-01-01.json +3215 -0
  49. data/apis/source/autoscaling-2011-01-01.paginators.json +52 -0
  50. data/apis/source/cloudformation-2010-05-15.json +1260 -0
  51. data/apis/source/cloudformation-2010-05-15.paginators.json +24 -0
  52. data/apis/source/cloudfront-2012-05-05.json +6588 -0
  53. data/apis/source/cloudfront-2012-05-05.paginators.json +28 -0
  54. data/apis/source/cloudfront-2013-05-12.json +7614 -0
  55. data/apis/source/cloudfront-2013-05-12.paginators.json +28 -0
  56. data/apis/source/cloudfront-2013-08-26.json +8016 -0
  57. data/apis/source/cloudfront-2013-08-26.paginators.json +28 -0
  58. data/apis/source/cloudsearch-2011-02-01.json +3585 -0
  59. data/apis/source/cloudsearch-2011-02-01.paginators.json +13 -0
  60. data/apis/source/datapipeline-2012-10-29.json +2144 -0
  61. data/apis/source/datapipeline-2012-10-29.paginators.json +25 -0
  62. data/apis/source/directconnect-2012-10-25.json +1271 -0
  63. data/apis/source/directconnect-2012-10-25.paginators.json +16 -0
  64. data/apis/source/dynamodb-2011-12-05.json +4380 -0
  65. data/apis/source/dynamodb-2011-12-05.paginators.json +24 -0
  66. data/apis/source/dynamodb-2012-08-10.json +4839 -0
  67. data/apis/source/dynamodb-2012-08-10.paginators.json +24 -0
  68. data/apis/source/ec2-2013-02-01.json +18820 -0
  69. data/apis/source/ec2-2013-02-01.paginators.json +115 -0
  70. data/apis/source/ec2-2013-06-15.json +18820 -0
  71. data/apis/source/ec2-2013-06-15.paginators.json +115 -0
  72. data/apis/source/ec2-2013-10-01.json +19885 -0
  73. data/apis/source/ec2-2013-10-01.paginators.json +115 -0
  74. data/apis/source/elasticache-2012-11-15.json +4403 -0
  75. data/apis/source/elasticache-2012-11-15.paginators.json +64 -0
  76. data/apis/source/elasticache-2013-06-15.json +5421 -0
  77. data/apis/source/elasticache-2013-06-15.paginators.json +64 -0
  78. data/apis/source/elasticbeanstalk-2010-12-01.json +3151 -0
  79. data/apis/source/elasticbeanstalk-2010-12-01.paginators.json +25 -0
  80. data/apis/source/elasticloadbalancing-2012-06-01.json +2041 -0
  81. data/apis/source/elasticloadbalancing-2012-06-01.paginators.json +18 -0
  82. data/apis/source/elasticmapreduce-2009-03-31.json +1478 -0
  83. data/apis/source/elasticmapreduce-2009-03-31.paginators.json +7 -0
  84. data/apis/source/elastictranscoder-2012-09-25.json +6148 -0
  85. data/apis/source/elastictranscoder-2012-09-25.paginators.json +20 -0
  86. data/apis/source/email-2010-12-01.json +892 -0
  87. data/apis/source/email-2010-12-01.paginators.json +13 -0
  88. data/apis/source/glacier-2012-06-01.json +3147 -0
  89. data/apis/source/glacier-2012-06-01.paginators.json +28 -0
  90. data/apis/source/iam-2010-05-08.json +5857 -0
  91. data/apis/source/iam-2010-05-08.paginators.json +116 -0
  92. data/apis/source/importexport-2010-06-01.json +876 -0
  93. data/apis/source/importexport-2010-06-01.paginators.json +10 -0
  94. data/apis/source/monitoring-2010-08-01.json +1910 -0
  95. data/apis/source/monitoring-2010-08-01.paginators.json +24 -0
  96. data/apis/source/opsworks-2013-02-18.json +5848 -0
  97. data/apis/source/opsworks-2013-02-18.paginators.json +46 -0
  98. data/apis/source/rds-2013-01-10.json +9283 -0
  99. data/apis/source/rds-2013-01-10.paginators.json +105 -0
  100. data/apis/source/rds-2013-02-12.json +9777 -0
  101. data/apis/source/rds-2013-02-12.paginators.json +105 -0
  102. data/apis/source/rds-2013-05-15.json +10618 -0
  103. data/apis/source/rds-2013-05-15.paginators.json +105 -0
  104. data/apis/source/redshift-2012-12-01.json +5742 -0
  105. data/apis/source/redshift-2012-12-01.paginators.json +74 -0
  106. data/apis/source/route53-2012-12-12.json +2067 -0
  107. data/apis/source/route53-2012-12-12.paginators.json +33 -0
  108. data/apis/source/s3-2006-03-01.json +4261 -0
  109. data/apis/source/s3-2006-03-01.paginators.json +46 -0
  110. data/apis/source/sdb-2009-04-15.json +1145 -0
  111. data/apis/source/sdb-2009-04-15.paginators.json +15 -0
  112. data/apis/source/sns-2010-03-31.json +2234 -0
  113. data/apis/source/sns-2010-03-31.paginators.json +19 -0
  114. data/apis/source/sqs-2012-11-05.json +1162 -0
  115. data/apis/source/sqs-2012-11-05.paginators.json +7 -0
  116. data/apis/source/storagegateway-2012-06-30.json +9487 -0
  117. data/apis/source/storagegateway-2012-06-30.paginators.json +28 -0
  118. data/apis/source/sts-2011-06-15.json +627 -0
  119. data/apis/source/support-2013-04-15.json +1261 -0
  120. data/apis/source/support-2013-04-15.paginators.json +31 -0
  121. data/apis/source/swf-2012-01-25.json +8744 -0
  122. data/apis/source/swf-2012-01-25.paginators.json +46 -0
  123. data/aws-sdk-core.gemspec +21 -0
  124. data/bin/aws.rb +156 -0
  125. data/doc-src/images/lastnode.png +0 -0
  126. data/doc-src/images/node.png +0 -0
  127. data/doc-src/images/vline.png +0 -0
  128. data/doc-src/plugins/apis.rb +205 -0
  129. data/doc-src/templates/default/fulldoc/html/css/common.css +90 -0
  130. data/doc-src/templates/default/fulldoc/html/js/tabs.js +21 -0
  131. data/doc-src/templates/default/fulldoc/html/setup.rb +61 -0
  132. data/doc-src/templates/default/layout/html/footer.erb +29 -0
  133. data/doc-src/templates/default/layout/html/setup.rb +3 -0
  134. data/features/autoscaling/client.feature +22 -0
  135. data/features/autoscaling/setup.rb +6 -0
  136. data/features/cloudformation/client.feature +18 -0
  137. data/features/cloudformation/setup.rb +6 -0
  138. data/features/cloudfront/client.feature +21 -0
  139. data/features/cloudfront/setup.rb +6 -0
  140. data/features/cloudsearch/client.feature +18 -0
  141. data/features/cloudsearch/setup.rb +6 -0
  142. data/features/cloudwatch/client.feature +21 -0
  143. data/features/cloudwatch/setup.rb +6 -0
  144. data/features/common/step_definitions.rb +65 -0
  145. data/features/datapipeline/client.feature +18 -0
  146. data/features/datapipeline/setup.rb +6 -0
  147. data/features/directconnect/client.feature +18 -0
  148. data/features/directconnect/setup.rb +6 -0
  149. data/features/dynamodb/client.feature +21 -0
  150. data/features/dynamodb/setup.rb +8 -0
  151. data/features/dynamodb/simplified.feature +32 -0
  152. data/features/dynamodb/step_definitions.rb +3 -0
  153. data/features/ec2/client.feature +21 -0
  154. data/features/ec2/setup.rb +6 -0
  155. data/features/ec2/step_definitions.rb +19 -0
  156. data/features/elasticache/client.feature +18 -0
  157. data/features/elasticache/setup.rb +6 -0
  158. data/features/elasticbeanstalk/client.feature +18 -0
  159. data/features/elasticbeanstalk/setup.rb +6 -0
  160. data/features/elasticloadbalancing/client.feature +18 -0
  161. data/features/elasticloadbalancing/setup.rb +6 -0
  162. data/features/elastictranscoder/client.feature +18 -0
  163. data/features/elastictranscoder/setup.rb +6 -0
  164. data/features/emr/client.feature +18 -0
  165. data/features/emr/setup.rb +6 -0
  166. data/features/env.rb +23 -0
  167. data/features/glacier/client.feature +28 -0
  168. data/features/glacier/setup.rb +16 -0
  169. data/features/glacier/step_definitions.rb +25 -0
  170. data/features/iam/client.feature +18 -0
  171. data/features/iam/setup.rb +6 -0
  172. data/features/importexport/client.feature +18 -0
  173. data/features/importexport/setup.rb +6 -0
  174. data/features/opsworks/client.feature +18 -0
  175. data/features/opsworks/setup.rb +6 -0
  176. data/features/rds/client.feature +18 -0
  177. data/features/rds/setup.rb +6 -0
  178. data/features/redshift/client.feature +18 -0
  179. data/features/redshift/setup.rb +6 -0
  180. data/features/route53/client.feature +18 -0
  181. data/features/route53/setup.rb +6 -0
  182. data/features/s3/buckets.feature +22 -0
  183. data/features/s3/objects.feature +18 -0
  184. data/features/s3/setup.rb +17 -0
  185. data/features/s3/step_definitions.rb +66 -0
  186. data/features/s3/test.png +0 -0
  187. data/features/sdb/client.feature +18 -0
  188. data/features/sdb/setup.rb +6 -0
  189. data/features/ses/client.feature +18 -0
  190. data/features/ses/setup.rb +6 -0
  191. data/features/sns/client.feature +18 -0
  192. data/features/sns/setup.rb +6 -0
  193. data/features/sqs/client.feature +23 -0
  194. data/features/sqs/setup.rb +10 -0
  195. data/features/sqs/step_definitions.rb +18 -0
  196. data/features/storagegateway/client.feature +18 -0
  197. data/features/storagegateway/setup.rb +6 -0
  198. data/features/sts/client.feature +18 -0
  199. data/features/sts/setup.rb +6 -0
  200. data/features/swf/client.feature +21 -0
  201. data/features/swf/setup.rb +6 -0
  202. data/integration-test-config.json.sample +3 -0
  203. data/lib/aws-sdk-core.rb +11 -0
  204. data/lib/aws.rb +175 -0
  205. data/lib/aws/api/base_translator.rb +72 -0
  206. data/lib/aws/api/doc_example.rb +116 -0
  207. data/lib/aws/api/documentor.rb +140 -0
  208. data/lib/aws/api/operation_translator.rb +77 -0
  209. data/lib/aws/api/service_namer.rb +40 -0
  210. data/lib/aws/api/service_translators/cloud_front.rb +19 -0
  211. data/lib/aws/api/service_translators/dynamo_db.rb +7 -0
  212. data/lib/aws/api/service_translators/glacier.rb +37 -0
  213. data/lib/aws/api/service_translators/import_export.rb +15 -0
  214. data/lib/aws/api/service_translators/route53.rb +23 -0
  215. data/lib/aws/api/service_translators/s3.rb +11 -0
  216. data/lib/aws/api/service_translators/sqs.rb +10 -0
  217. data/lib/aws/api/service_translators/swf.rb +7 -0
  218. data/lib/aws/api/shape_translator.rb +96 -0
  219. data/lib/aws/api/translator.rb +150 -0
  220. data/lib/aws/api/visitor.rb +32 -0
  221. data/lib/aws/credentials.rb +35 -0
  222. data/lib/aws/error_handler.rb +48 -0
  223. data/lib/aws/errors.rb +83 -0
  224. data/lib/aws/json/builder.rb +77 -0
  225. data/lib/aws/json/error_parser.rb +20 -0
  226. data/lib/aws/json/parser.rb +67 -0
  227. data/lib/aws/json/serializer.rb +15 -0
  228. data/lib/aws/plugins/credentials.rb +48 -0
  229. data/lib/aws/plugins/dynamodb_extended_retries.rb +22 -0
  230. data/lib/aws/plugins/glacier_api_version.rb +19 -0
  231. data/lib/aws/plugins/glacier_checksums.rb +100 -0
  232. data/lib/aws/plugins/global_configuration.rb +79 -0
  233. data/lib/aws/plugins/json_protocol.rb +30 -0
  234. data/lib/aws/plugins/json_rpc_headers.rb +34 -0
  235. data/lib/aws/plugins/query_protocol.rb +11 -0
  236. data/lib/aws/plugins/regional_endpoint.rb +37 -0
  237. data/lib/aws/plugins/retry_errors.rb +149 -0
  238. data/lib/aws/plugins/s3_bucket_dns.rb +78 -0
  239. data/lib/aws/plugins/s3_complete_multipart_upload_fix.rb +38 -0
  240. data/lib/aws/plugins/s3_get_bucket_location_fix.rb +21 -0
  241. data/lib/aws/plugins/s3_md5s.rb +61 -0
  242. data/lib/aws/plugins/s3_redirects.rb +38 -0
  243. data/lib/aws/plugins/s3_regional_endpoint.rb +19 -0
  244. data/lib/aws/plugins/s3_signer.rb +9 -0
  245. data/lib/aws/plugins/signature_v2.rb +9 -0
  246. data/lib/aws/plugins/signature_v3.rb +9 -0
  247. data/lib/aws/plugins/signature_v4.rb +29 -0
  248. data/lib/aws/plugins/sqs_queue_urls.rb +33 -0
  249. data/lib/aws/plugins/swf_read_timeouts.rb +23 -0
  250. data/lib/aws/plugins/user_agent.rb +32 -0
  251. data/lib/aws/plugins/xml_protocol.rb +11 -0
  252. data/lib/aws/query/builder.rb +102 -0
  253. data/lib/aws/query/param.rb +43 -0
  254. data/lib/aws/query/param_list.rb +91 -0
  255. data/lib/aws/query/serializer.rb +24 -0
  256. data/lib/aws/request_handler.rb +39 -0
  257. data/lib/aws/response_handler.rb +38 -0
  258. data/lib/aws/service.rb +237 -0
  259. data/lib/aws/signers/base.rb +29 -0
  260. data/lib/aws/signers/handler.rb +18 -0
  261. data/lib/aws/signers/s3.rb +162 -0
  262. data/lib/aws/signers/v2.rb +48 -0
  263. data/lib/aws/signers/v3.rb +34 -0
  264. data/lib/aws/signers/v4.rb +142 -0
  265. data/lib/aws/structure.rb +38 -0
  266. data/lib/aws/timestamp_formatter.rb +16 -0
  267. data/lib/aws/util.rb +38 -0
  268. data/lib/aws/version.rb +3 -0
  269. data/lib/aws/xml/builder.rb +134 -0
  270. data/lib/aws/xml/error_parser.rb +24 -0
  271. data/lib/aws/xml/parser.rb +147 -0
  272. data/lib/aws/xml/serializer.rb +16 -0
  273. data/spec/aws/credentials_spec.rb +39 -0
  274. data/spec/aws/iam_spec.rb +17 -0
  275. data/spec/aws/json/builder_spec.rb +183 -0
  276. data/spec/aws/json/parser_spec.rb +238 -0
  277. data/spec/aws/operations_spec.rb +145 -0
  278. data/spec/aws/plugins/credentials_spec.rb +76 -0
  279. data/spec/aws/plugins/global_configuration_spec.rb +56 -0
  280. data/spec/aws/plugins/region_endpoint_spec.rb +77 -0
  281. data/spec/aws/plugins/retry_errors_spec.rb +253 -0
  282. data/spec/aws/query/builder_spec.rb +361 -0
  283. data/spec/aws/query/param_list_spec.rb +80 -0
  284. data/spec/aws/query/param_spec.rb +59 -0
  285. data/spec/aws/service_spec.rb +247 -0
  286. data/spec/aws/signers/v4_spec.rb +141 -0
  287. data/spec/aws/structure_spec.rb +103 -0
  288. data/spec/aws/xml/builder_spec.rb +404 -0
  289. data/spec/aws/xml/parser_spec.rb +716 -0
  290. data/spec/aws_spec.rb +89 -0
  291. data/spec/fixtures/api/swf.json +100 -0
  292. data/spec/fixtures/operations/cloudfront/list_distributions.yml +195 -0
  293. data/spec/fixtures/operations/cloudfront/max_items.yml +12 -0
  294. data/spec/fixtures/operations/dynamodb/error_parsing.yml +13 -0
  295. data/spec/fixtures/operations/glacier/error_parsing.yml +10 -0
  296. data/spec/fixtures/operations/glacier/list_vaults.yml +24 -0
  297. data/spec/fixtures/operations/iam/result_wrapped_elements.yml +31 -0
  298. data/spec/fixtures/operations/s3/304_response.yml +12 -0
  299. data/spec/fixtures/operations/s3/400_response.yml +12 -0
  300. data/spec/fixtures/operations/s3/403_response.yml +12 -0
  301. data/spec/fixtures/operations/s3/404_response.yml +12 -0
  302. data/spec/fixtures/operations/s3/comlete_multipart_upload_error.yml +18 -0
  303. data/spec/fixtures/operations/s3/create_bucket_with_location_constraint.yml +25 -0
  304. data/spec/fixtures/operations/s3/create_bucket_without_location_constraint.yml +9 -0
  305. data/spec/fixtures/operations/s3/delete_objects.yml +54 -0
  306. data/spec/fixtures/operations/s3/error_parsing.yml +17 -0
  307. data/spec/fixtures/operations/s3/get_bucket_location.yml +17 -0
  308. data/spec/fixtures/operations/s3/get_bucket_location_classic.yml +17 -0
  309. data/spec/fixtures/operations/s3/head_bucket_with_dns_incompatible_name.yml +12 -0
  310. data/spec/fixtures/operations/s3/head_object.yml +50 -0
  311. data/spec/fixtures/operations/s3/list_buckets.yml +41 -0
  312. data/spec/fixtures/operations/s3/md5_checksum_disabled.yml +10 -0
  313. data/spec/fixtures/operations/s3/md5_checksum_enabled.yml +8 -0
  314. data/spec/fixtures/operations/swf/list_domains.yml +20 -0
  315. data/spec/spec_helper.rb +55 -0
  316. data/tasks/apis.rake +51 -0
  317. data/tasks/docs.rake +59 -0
  318. data/tasks/test.rake +39 -0
  319. data/vendor/seahorse/.gitignore +5 -0
  320. data/vendor/seahorse/.simplecov +4 -0
  321. data/vendor/seahorse/.yardopts +10 -0
  322. data/vendor/seahorse/Gemfile +20 -0
  323. data/vendor/seahorse/LICENSE.txt +12 -0
  324. data/vendor/seahorse/README.md +129 -0
  325. data/vendor/seahorse/Rakefile +7 -0
  326. data/vendor/seahorse/ca-bundle.crt +3554 -0
  327. data/vendor/seahorse/lib/seahorse.rb +6 -0
  328. data/vendor/seahorse/lib/seahorse/client.rb +61 -0
  329. data/vendor/seahorse/lib/seahorse/client/base.rb +239 -0
  330. data/vendor/seahorse/lib/seahorse/client/block_io.rb +39 -0
  331. data/vendor/seahorse/lib/seahorse/client/configuration.rb +197 -0
  332. data/vendor/seahorse/lib/seahorse/client/handler.rb +26 -0
  333. data/vendor/seahorse/lib/seahorse/client/handler_builder.rb +49 -0
  334. data/vendor/seahorse/lib/seahorse/client/handler_list.rb +250 -0
  335. data/vendor/seahorse/lib/seahorse/client/http/endpoint.rb +95 -0
  336. data/vendor/seahorse/lib/seahorse/client/http/headers.rb +94 -0
  337. data/vendor/seahorse/lib/seahorse/client/http/plain_string_io.rb +11 -0
  338. data/vendor/seahorse/lib/seahorse/client/http/request.rb +78 -0
  339. data/vendor/seahorse/lib/seahorse/client/http/response.rb +45 -0
  340. data/vendor/seahorse/lib/seahorse/client/logging/formatter.rb +319 -0
  341. data/vendor/seahorse/lib/seahorse/client/logging/handler.rb +35 -0
  342. data/vendor/seahorse/lib/seahorse/client/net_http/connection_pool.rb +339 -0
  343. data/vendor/seahorse/lib/seahorse/client/net_http/handler.rb +109 -0
  344. data/vendor/seahorse/lib/seahorse/client/param_converter.rb +202 -0
  345. data/vendor/seahorse/lib/seahorse/client/param_validator.rb +139 -0
  346. data/vendor/seahorse/lib/seahorse/client/plugin.rb +80 -0
  347. data/vendor/seahorse/lib/seahorse/client/plugin_list.rb +142 -0
  348. data/vendor/seahorse/lib/seahorse/client/plugins/api.rb +11 -0
  349. data/vendor/seahorse/lib/seahorse/client/plugins/content_length.rb +22 -0
  350. data/vendor/seahorse/lib/seahorse/client/plugins/endpoint.rb +36 -0
  351. data/vendor/seahorse/lib/seahorse/client/plugins/json_simple.rb +34 -0
  352. data/vendor/seahorse/lib/seahorse/client/plugins/logging.rb +37 -0
  353. data/vendor/seahorse/lib/seahorse/client/plugins/net_http.rb +26 -0
  354. data/vendor/seahorse/lib/seahorse/client/plugins/operation_methods.rb +48 -0
  355. data/vendor/seahorse/lib/seahorse/client/plugins/param_conversion.rb +29 -0
  356. data/vendor/seahorse/lib/seahorse/client/plugins/param_validation.rb +30 -0
  357. data/vendor/seahorse/lib/seahorse/client/plugins/raise_response_errors.rb +29 -0
  358. data/vendor/seahorse/lib/seahorse/client/plugins/restful_bindings.rb +205 -0
  359. data/vendor/seahorse/lib/seahorse/client/request.rb +62 -0
  360. data/vendor/seahorse/lib/seahorse/client/request_context.rb +68 -0
  361. data/vendor/seahorse/lib/seahorse/client/response.rb +106 -0
  362. data/vendor/seahorse/lib/seahorse/client/xml/builder.rb +92 -0
  363. data/vendor/seahorse/lib/seahorse/model.rb +38 -0
  364. data/vendor/seahorse/lib/seahorse/model/api.rb +39 -0
  365. data/vendor/seahorse/lib/seahorse/model/node.rb +102 -0
  366. data/vendor/seahorse/lib/seahorse/model/operation.rb +32 -0
  367. data/vendor/seahorse/lib/seahorse/model/operation_input.rb +30 -0
  368. data/vendor/seahorse/lib/seahorse/model/operations.rb +59 -0
  369. data/vendor/seahorse/lib/seahorse/model/property.rb +141 -0
  370. data/vendor/seahorse/lib/seahorse/model/shapes/shape.rb +229 -0
  371. data/vendor/seahorse/lib/seahorse/model/types.rb +8 -0
  372. data/vendor/seahorse/lib/seahorse/version.rb +3 -0
  373. data/vendor/seahorse/seahorse.gemspec +20 -0
  374. data/vendor/seahorse/spec/fixtures/plugin.rb +4 -0
  375. data/vendor/seahorse/spec/seahorse/client/base_spec.rb +308 -0
  376. data/vendor/seahorse/spec/seahorse/client/configuration_spec.rb +118 -0
  377. data/vendor/seahorse/spec/seahorse/client/handler_builder_spec.rb +159 -0
  378. data/vendor/seahorse/spec/seahorse/client/handler_list_spec.rb +243 -0
  379. data/vendor/seahorse/spec/seahorse/client/handler_spec.rb +40 -0
  380. data/vendor/seahorse/spec/seahorse/client/http/endpoint_spec.rb +168 -0
  381. data/vendor/seahorse/spec/seahorse/client/http/headers_spec.rb +213 -0
  382. data/vendor/seahorse/spec/seahorse/client/http/plain_string_io_spec.rb +23 -0
  383. data/vendor/seahorse/spec/seahorse/client/http/request_spec.rb +142 -0
  384. data/vendor/seahorse/spec/seahorse/client/http/response_spec.rb +77 -0
  385. data/vendor/seahorse/spec/seahorse/client/logging/formatter_spec.rb +197 -0
  386. data/vendor/seahorse/spec/seahorse/client/logging/handler_spec.rb +63 -0
  387. data/vendor/seahorse/spec/seahorse/client/net_http/connection_pool_spec.rb +10 -0
  388. data/vendor/seahorse/spec/seahorse/client/net_http/handler_spec.rb +232 -0
  389. data/vendor/seahorse/spec/seahorse/client/param_converter_spec.rb +318 -0
  390. data/vendor/seahorse/spec/seahorse/client/param_validator_spec.rb +271 -0
  391. data/vendor/seahorse/spec/seahorse/client/plugin_list_spec.rb +166 -0
  392. data/vendor/seahorse/spec/seahorse/client/plugin_spec.rb +118 -0
  393. data/vendor/seahorse/spec/seahorse/client/plugins/content_length_spec.rb +19 -0
  394. data/vendor/seahorse/spec/seahorse/client/plugins/endpoint_spec.rb +43 -0
  395. data/vendor/seahorse/spec/seahorse/client/plugins/logging_spec.rb +46 -0
  396. data/vendor/seahorse/spec/seahorse/client/plugins/net_http_spec.rb +71 -0
  397. data/vendor/seahorse/spec/seahorse/client/plugins/operation_methods_spec.rb +74 -0
  398. data/vendor/seahorse/spec/seahorse/client/plugins/restful_bindings/uri_path_builder_spec.rb +91 -0
  399. data/vendor/seahorse/spec/seahorse/client/request_context_spec.rb +105 -0
  400. data/vendor/seahorse/spec/seahorse/client/request_spec.rb +102 -0
  401. data/vendor/seahorse/spec/seahorse/client/response_spec.rb +171 -0
  402. data/vendor/seahorse/spec/seahorse/client/xml/builder/xml_doc_spec.rb +142 -0
  403. data/vendor/seahorse/spec/seahorse/client/xml/builder_spec.rb +10 -0
  404. data/vendor/seahorse/spec/seahorse/client_spec.rb +13 -0
  405. data/vendor/seahorse/spec/seahorse/model/api_spec.rb +72 -0
  406. data/vendor/seahorse/spec/seahorse/model/node_spec.rb +114 -0
  407. data/vendor/seahorse/spec/seahorse/model/operation_input_spec.rb +53 -0
  408. data/vendor/seahorse/spec/seahorse/model/operation_spec.rb +48 -0
  409. data/vendor/seahorse/spec/seahorse/model/operations_spec.rb +64 -0
  410. data/vendor/seahorse/spec/seahorse/model/property_spec.rb +136 -0
  411. data/vendor/seahorse/spec/seahorse/model/shapes/shape_spec.rb +105 -0
  412. data/vendor/seahorse/spec/seahorse/version_spec.rb +11 -0
  413. data/vendor/seahorse/spec/spec_helper.rb +34 -0
  414. data/vendor/seahorse/tasks/ca_bundle.rake +23 -0
  415. data/vendor/seahorse/tasks/docs.rake +11 -0
  416. data/vendor/seahorse/tasks/test.rake +26 -0
  417. metadata +614 -0
@@ -0,0 +1,159 @@
1
+ require 'spec_helper'
2
+ require 'ostruct'
3
+
4
+ module Seahorse
5
+ module Client
6
+ describe HandlerBuilder do
7
+
8
+ let(:klass) {
9
+ Class.new do
10
+
11
+ include HandlerBuilder
12
+
13
+ def initialize
14
+ @handlers = HandlerList.new
15
+ end
16
+
17
+ attr_reader :handlers
18
+
19
+ end
20
+ }
21
+
22
+ let(:obj) { klass.new }
23
+
24
+ describe '#handler' do
25
+
26
+ it 'registers a handler' do
27
+ handler_class = Class.new(Handler)
28
+ obj.handler(handler_class)
29
+ expect(obj.handlers).to include(handler_class)
30
+ end
31
+
32
+ it 'accepts a step option' do
33
+ handler1 = Class.new(Handler)
34
+ handler2 = Class.new(Handler)
35
+ obj.handler(handler1, step: :validate)
36
+ obj.handler(handler2, step: :build)
37
+ expect(obj.handlers).to include(handler1)
38
+ expect(obj.handlers).to include(handler2)
39
+ end
40
+
41
+ it 'builds a handler from a block' do
42
+ handler_class = obj.handler do |context|
43
+ context
44
+ end
45
+ expect(handler_class.ancestors).to include(Handler)
46
+ expect(handler_class.new.call('context')).to eq('context')
47
+ end
48
+
49
+ it 'accepts a step with the block' do
50
+ obj.handler(step: :validate) do |context|
51
+ context << :validate
52
+ super(context)
53
+ end
54
+ obj.handler(step: :build) do |context|
55
+ context << :build
56
+ @handler.call(context)
57
+ end
58
+ obj.handler(step: :sign) do |context|
59
+ context << :sign
60
+ handler.call(context)
61
+ end
62
+ obj.handler(step: :send) do |context|
63
+ context << :send
64
+ context
65
+ end
66
+ resp = obj.handlers.to_stack.call([])
67
+ expect(resp).to eq([:validate, :build, :sign, :send])
68
+ end
69
+
70
+ it 'returns the handler class' do
71
+ handler_class = Class.new(Handler)
72
+ expect(obj.handler(handler_class)).to be(handler_class)
73
+ end
74
+
75
+ end
76
+
77
+ describe '#handle_request' do
78
+
79
+ it 'passes the context to the block' do
80
+ yielded = nil
81
+ handler = obj.handle_request do |context|
82
+ yielded = context
83
+ end
84
+ handler.new(->(_) { }).call('context')
85
+ expect(yielded).to eq('context')
86
+ end
87
+
88
+ it 'calls the next handler in the stack reguardless of the return' do
89
+ handler = obj.handle_request do |context|
90
+ nil # still calls the next handler, despite the block return value
91
+ end
92
+ context = Object.new
93
+ resp = handler.new(->(context) { context }).call(context)
94
+ expect(resp).to be(context)
95
+ end
96
+
97
+ end
98
+
99
+ describe '#handle_response' do
100
+
101
+ it 'is called when the response is signaled complete' do
102
+ called = false
103
+ handler = obj.handle_response { |response| called = true }
104
+ handler.new(->(_) { Response.new.tap {|r| r.http_response.status_code = 200 } }).call(nil)
105
+ expect(called).to be(true)
106
+ end
107
+
108
+ it 'is not called if the response is not signaled complete' do
109
+ called = false
110
+ handler = obj.handle_response { |response| called = true }
111
+ handler.new(->(_) { Response.new }).call(nil)
112
+ expect(called).to be(false)
113
+ end
114
+
115
+ end
116
+
117
+ describe 'naming handlers inside modules' do
118
+
119
+ let(:mod) {
120
+ Module.new do
121
+ extend HandlerBuilder
122
+ def self.handlers
123
+ @handlers ||= HandlerList.new
124
+ end
125
+ end
126
+ }
127
+
128
+ it 'assigns the handler to a constant if a name is given' do
129
+ expect(mod.const_defined?('MyHandler')).to be(false)
130
+ handler_class = mod.handler('MyHandler') { |arg| }
131
+ expect(mod::MyHandler).to be(handler_class)
132
+ end
133
+
134
+ it 'accepts the handler name as a symbol' do
135
+ handler_class = mod.handler(:MyHandler) { |arg| }
136
+ expect(mod::MyHandler).to be(handler_class)
137
+ end
138
+
139
+ it 'accepts a name and options at the same time' do
140
+ mod.handler(:FirstSendHandler, step: :send) { |arg| }
141
+ mod.handler(:SecondSendHandler, step: :send) { |arg| }
142
+ expect(mod.handlers).not_to include(mod::FirstSendHandler)
143
+ expect(mod.handlers).to include(mod::SecondSendHandler)
144
+ end
145
+
146
+ it 'can assign a name when calling handle_request' do
147
+ handler_class = mod.handle_request(:MyHandler) { |arg| }
148
+ expect(mod::MyHandler).to be(handler_class)
149
+ end
150
+
151
+ it 'can assign a name when calling handle_response' do
152
+ handler_class = mod.handle_response(:MyHandler) { |arg| }
153
+ expect(mod::MyHandler).to be(handler_class)
154
+ end
155
+
156
+ end
157
+ end
158
+ end
159
+ end
@@ -0,0 +1,243 @@
1
+ require 'spec_helper'
2
+
3
+ module Seahorse
4
+ module Client
5
+ describe HandlerList do
6
+
7
+ let(:handlers) { HandlerList.new }
8
+
9
+ it 'is enumerable' do
10
+ expect(handlers).to be_kind_of(Enumerable)
11
+ end
12
+
13
+ describe '#add' do
14
+
15
+ it 'adds a handler' do
16
+ handler = Class.new
17
+ handlers.add(handler)
18
+ expect(handlers.to_a).to eq([handler])
19
+ end
20
+
21
+ it 'handlers added latter have a higher priority' do
22
+ handler1 = Class.new
23
+ handler2 = Class.new
24
+ handlers.add(handler1)
25
+ handlers.add(handler2)
26
+ expect(handlers.to_a).to eq([handler1, handler2])
27
+ end
28
+
29
+ it 'returns the handler class' do
30
+ handler_class = Class.new(Handler)
31
+ expect(handlers.add(handler_class)).to be(handler_class)
32
+ end
33
+
34
+ describe ':step' do
35
+
36
+ it 'sorts handlers by step priority order' do
37
+ handlers.add('validate', step: :validate)
38
+ handlers.add('build', step: :build)
39
+ handlers.add('sign', step: :sign)
40
+ handlers.add('send', step: :send)
41
+ expect(handlers.to_a).to eq(%w(send sign build validate))
42
+ end
43
+
44
+ it 'defaults step to :build' do
45
+ handlers.add('validate', step: :validate)
46
+ handlers.add('build')
47
+ handlers.add('sign', step: :sign)
48
+ expect(handlers.to_a).to eq(['sign', 'build', 'validate'])
49
+ end
50
+
51
+ it 'accepts multiple handlers with the same step' do
52
+ handlers.add('h1', step: :validate)
53
+ handlers.add('h2', step: :validate)
54
+ handlers.add('h3', step: :build)
55
+ handlers.add('h4', step: :build)
56
+ expect(handlers.to_a).to eq(%w(h3 h4 h1 h2))
57
+ end
58
+
59
+ end
60
+
61
+ describe ':priority' do
62
+
63
+ it 'accepts a priority' do
64
+ handlers.add('medium', priority: 50)
65
+ handlers.add('high', priority: 80)
66
+ handlers.add('low', priority: 20)
67
+ expect(handlers.to_a).to eq(%w(low medium high))
68
+ end
69
+
70
+ it 'sorts handler with the same priority in FIFO order' do
71
+ handlers.add('a', priority: 20, step: :sign)
72
+ handlers.add('b', priority: 20, step: :sign)
73
+ handlers.add('c', priority: 20, step: :sign)
74
+ handlers.add('m', priority: 20, step: :build)
75
+ handlers.add('n', priority: 20, step: :build)
76
+ handlers.add('o', priority: 20, step: :build)
77
+ handlers.add('x', priority: 20, step: :validate)
78
+ handlers.add('y', priority: 20, step: :validate)
79
+ handlers.add('z', priority: 20, step: :validate)
80
+ handlers.add('-', step: :send)
81
+ expect(handlers.to_a).to eq(%w(- a b c m n o x y z))
82
+ end
83
+
84
+ end
85
+
86
+ describe 'errors' do
87
+
88
+ it 'raises an error if :step is not valid' do
89
+ msg = "invalid :step `:bogus', must be one of :validate, :build, "
90
+ msg << ":sign or :send"
91
+ expect {
92
+ handlers.add('handler', step: :bogus)
93
+ }.to raise_error(ArgumentError, msg)
94
+ end
95
+
96
+ it 'raises an error if :priority is less than 0' do
97
+ msg = "invalid :priority `-1', must be between 0 and 99"
98
+ expect {
99
+ handlers.add('handler', priority: -1)
100
+ }.to raise_error(ArgumentError, msg)
101
+ end
102
+
103
+ it 'raises an error if :priority is greater than 99' do
104
+ msg = "invalid :priority `100', must be between 0 and 99"
105
+ expect {
106
+ handlers.add('handler', priority: 100)
107
+ }.to raise_error(ArgumentError, msg)
108
+ end
109
+
110
+ end
111
+
112
+ describe ':step => :send' do
113
+
114
+ it 'only keeps the latest send handler' do
115
+ handlers.add('handler1', step: :send)
116
+ handlers.add('handler2', step: :send)
117
+ handlers.add('handler3', step: :send)
118
+ expect(handlers.to_a).to eq(['handler3'])
119
+ end
120
+
121
+ it 'ignores :priority when adding :send handlers' do
122
+ handlers.add('handler1', step: :send, priority: 80)
123
+ handlers.add('handler2', step: :send, priority: 50)
124
+ handlers.add('handler3', step: :send, priority: 20)
125
+ expect(handlers.to_a).to eq(['handler3'])
126
+ end
127
+
128
+ end
129
+
130
+ describe ':operations' do
131
+
132
+ it 'adds a handler that is not enumerated by default' do
133
+ handlers.add('handler', operations: ['operation_name'])
134
+ expect(handlers.to_a).to eq([])
135
+ end
136
+
137
+ it 'adds a handler that is enumerated for a given :operation' do
138
+ handlers.add('handler1', operations: ['operation1'])
139
+ handlers.add('handler2', operations: ['operation1'])
140
+ handlers.add('handler3', operations: ['operation2'])
141
+ expect(handlers.for('operation1').to_a).to eq(%w(handler1 handler2))
142
+ end
143
+
144
+ end
145
+
146
+ end
147
+
148
+ describe '#copy_from' do
149
+
150
+ it 'copies handlers from one list to another' do
151
+ handlers.add('send', step: :send)
152
+ handlers.add('handler')
153
+ handlers2 = HandlerList.new
154
+ handlers2.copy_from(handlers)
155
+ expect(handlers2.to_a).to eq(handlers.to_a)
156
+ end
157
+
158
+ end
159
+
160
+ describe '#for' do
161
+
162
+ it 'returns a handler list' do
163
+ expect(handlers.for('operation')).to be_kind_of(HandlerList)
164
+ end
165
+
166
+ it 'returns a different handler list' do
167
+ expect(handlers.for('operation')).to_not be(handlers)
168
+ end
169
+
170
+ it 'copies the send handler' do
171
+ handlers.add('send', step: :send)
172
+ expect(handlers.for('operation').to_a).to eq(['send'])
173
+ end
174
+
175
+ it 'copies the common handlers' do
176
+ handlers.add('validate', step: :validate)
177
+ handlers.add('build', step: :build)
178
+ handlers.add('sign', step: :sign)
179
+ expect(handlers.for('operation').to_a).to eq(%w(sign build validate))
180
+ end
181
+
182
+ it 'deep copies handlers' do
183
+ handlers.add('handler1')
184
+ handlers2 = handlers.for('operation')
185
+ handlers2.add('handler2')
186
+ expect(handlers.to_a).to eq(['handler1'])
187
+ expect(handlers2.to_a).to eq(['handler1', 'handler2'])
188
+ end
189
+
190
+ it 'copies operation handlers with the given name' do
191
+ handlers.add('handler', operations: ['operation'])
192
+ expect(handlers.for('operation').to_a).to eq(['handler'])
193
+ end
194
+
195
+ it 'does not copy operation handlers that have a different name' do
196
+ handlers.add('handler', operations: ['operation'])
197
+ expect(handlers.for('operation2').to_a).to eq([])
198
+ end
199
+
200
+ it 'merges operation and common handlers preserving priority' do
201
+ handlers.add('high', priority: 30, operation: 'operation')
202
+ handlers.add('medium', priority: 20, operation: 'operation')
203
+ handlers.add('low', priority: 10)
204
+ expect(handlers.for('operation').to_a).to eq(%w(low medium high))
205
+ end
206
+
207
+ it 'accpets operation names as symbols' do
208
+ handlers.add('handler1', operations: [:operation])
209
+ handlers.add('handler2', operations: ['operation'])
210
+ expect(handlers.for('operation').to_a).to eq(%w(handler1 handler2))
211
+ expect(handlers.for(:operation).to_a).to eq(%w(handler1 handler2))
212
+ end
213
+
214
+ end
215
+
216
+ describe '#to_stack' do
217
+
218
+ it 'constructs a handler stack' do
219
+ handler = Handler
220
+ expect(handler).to receive(:new).with(nil).and_return(1)
221
+ expect(handler).to receive(:new).with(1).and_return(2)
222
+ expect(handler).to receive(:new).with(2).and_return(3)
223
+ handlers.add(handler)
224
+ handlers.add(handler)
225
+ handlers.add(handler)
226
+ expect(handlers.to_stack).to eq(3)
227
+ end
228
+
229
+ it 'does not construct handlers that are not classes' do
230
+ handler1 = double('handler1')
231
+ handler2 = double('handler2')
232
+ expect(handler1).to receive(:handler=).with(nil)
233
+ expect(handler2).to receive(:handler=).with(handler1)
234
+ handlers.add(handler1)
235
+ handlers.add(handler2)
236
+ handlers.to_stack
237
+ end
238
+
239
+ end
240
+
241
+ end
242
+ end
243
+ end
@@ -0,0 +1,40 @@
1
+ require 'spec_helper'
2
+
3
+ module Seahorse
4
+ module Client
5
+ describe Handler do
6
+
7
+ let(:context) { RequestContext.new }
8
+ let(:response) { Response.new }
9
+
10
+ it 'provides access to the nested handler' do
11
+ handler = Handler.new
12
+ expect(Handler.new(handler).handler).to be(handler)
13
+ end
14
+
15
+ it 'responds to #call' do
16
+ expect(Handler.new).to respond_to(:call)
17
+ end
18
+
19
+ it 'chains #call to the nested handler' do
20
+ handler = double('handler')
21
+ expect(handler).to receive(:call).with(context) { response }
22
+ Handler.new(handler).call(context)
23
+ end
24
+
25
+ it 'returns the response from the nested handler' do
26
+ handler = double('handler')
27
+ expect(handler).to receive(:call).with(context) { response }
28
+ expect(Handler.new(handler).call(context)).to be(response)
29
+ end
30
+
31
+ describe '#inspect' do
32
+
33
+ it 'overrides class name for anonymous handler' do
34
+ handler = Class.new(Handler).new
35
+ expect(handler.inspect).to eql '#<UnnamedHandler @handler=nil>'
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,168 @@
1
+ require 'spec_helper'
2
+
3
+ module Seahorse
4
+ module Client
5
+ module Http
6
+ describe Endpoint do
7
+ describe 'constructor' do
8
+
9
+ it 'can be constructed from a string' do
10
+ expect(Endpoint.new('abc.com')).to be_kind_of(Endpoint)
11
+ end
12
+
13
+ it 'can be constructed from a URI::HTTP' do
14
+ uri = 'http://foo.com'
15
+ expect(Endpoint.new(URI.parse(uri))).to eq(uri)
16
+ end
17
+
18
+ it 'can be constructed from a URI::HTTPS' do
19
+ uri = 'https://foo.com'
20
+ expect(Endpoint.new(URI.parse(uri))).to eq(uri)
21
+ end
22
+
23
+ it 'can be constructed from an Endpoint' do
24
+ endpoint1 = Endpoint.new('abc.com')
25
+ endpoint2 = Endpoint.new(endpoint1) # copy constructor
26
+ expect(endpoint1).to eq(endpoint2)
27
+ end
28
+
29
+ it 'raises an error if you pass non valid enpoint' do
30
+ expect do
31
+ Endpoint.new(Class.new)
32
+ end.to raise_error(URI::InvalidURIError)
33
+ end
34
+
35
+ end
36
+
37
+ describe '#scheme' do
38
+
39
+ it 'can be specified in the constructor' do
40
+ expect(Endpoint.new('http://foo.com').scheme).to eq('http')
41
+ expect(Endpoint.new('https://foo.com').scheme).to eq('https')
42
+ end
43
+
44
+ it 'defaults to https when not passed to constructor' do
45
+ expect(Endpoint.new('foo.com').scheme).to eq('https')
46
+ end
47
+
48
+ it 'looks for the :ssl_default options when picking the default scheme' do
49
+ expect(Endpoint.new('foo.com', ssl_default: false).scheme).to eq('http')
50
+ end
51
+
52
+ it 'can be changed' do
53
+ endpoint = Endpoint.new('http://foo.com')
54
+ endpoint.scheme = 'https'
55
+ expect(endpoint.port).to eq(80)
56
+ expect(endpoint.scheme).to eq('https')
57
+ expect(endpoint).to eq('https://foo.com:80')
58
+ end
59
+
60
+ end
61
+
62
+ describe '#http?' do
63
+
64
+ it 'returns true if the scheme is http' do
65
+ expect(Endpoint.new('http://foo.com').http?).to eq(true)
66
+ end
67
+
68
+ it 'returns false if the scheme is not http' do
69
+ expect(Endpoint.new('https://foo.com').http?).to eq(false)
70
+ end
71
+
72
+ end
73
+
74
+ describe '#https?' do
75
+
76
+ it 'returns true if the scheme is https' do
77
+ expect(Endpoint.new('https://foo.com').https?).to eq(true)
78
+ end
79
+
80
+ it 'returns false if the scheme is not https' do
81
+ expect(Endpoint.new('http://foo.com').https?).to eq(false)
82
+ end
83
+
84
+ end
85
+
86
+ describe '#host' do
87
+
88
+ it 'is passed into the constructor' do
89
+ expect(Endpoint.new('foo.com').host).to eq('foo.com')
90
+ expect(Endpoint.new('abc.mno.xyz').host).to eq('abc.mno.xyz')
91
+ end
92
+
93
+ it 'can be changed' do
94
+ endpoint = Endpoint.new('http://foo.com')
95
+ endpoint.host = 'bar.com'
96
+ expect(endpoint.host).to eq('bar.com')
97
+ expect(endpoint).to eq('http://bar.com')
98
+ end
99
+
100
+ end
101
+
102
+ describe '#port' do
103
+
104
+ it 'defaults to 80 for http endpoints' do
105
+ expect(Endpoint.new('http://foo.com').port).to eq(80)
106
+ end
107
+
108
+ it 'defaults to 443 for https endpoints' do
109
+ expect(Endpoint.new('https://foo.com').port).to eq(443)
110
+ end
111
+
112
+ it 'can be specified in the constructor' do
113
+ expect(Endpoint.new('http://foo.com:123').port).to eq(123)
114
+ expect(Endpoint.new('foo.com:321').port).to eq(321)
115
+ end
116
+
117
+ it 'can be changed' do
118
+ endpoint = Endpoint.new('http://foo.com')
119
+ endpoint.port = 443
120
+ expect(endpoint.scheme).to eq('http')
121
+ expect(endpoint.port).to eq(443)
122
+ expect(endpoint).to eq('http://foo.com:443')
123
+ end
124
+
125
+ end
126
+
127
+ describe '#user' do
128
+
129
+ it 'defaults to nil' do
130
+ expect(Endpoint.new('foo.com').user).to be(nil)
131
+ end
132
+
133
+ it 'is parsed from the endpoint string' do
134
+ expect(Endpoint.new('http://user@foo.com').user).to eq('user')
135
+ end
136
+
137
+ it 'can be set' do
138
+ endpoint = Endpoint.new('foo.com')
139
+ endpoint.user = 'abc'
140
+ expect(endpoint.user).to eq('abc')
141
+ expect(endpoint).to eq('https://abc@foo.com')
142
+ end
143
+
144
+ end
145
+
146
+ describe '#password' do
147
+
148
+ it 'defaults to nil' do
149
+ expect(Endpoint.new('foo.com').password).to be(nil)
150
+ end
151
+
152
+ it 'is parsed from the endpoint string' do
153
+ expect(Endpoint.new('http://u:p@foo.com').password).to eq('p')
154
+ end
155
+
156
+ it 'can be set' do
157
+ endpoint = Endpoint.new('foo.com')
158
+ endpoint.user = 'u'
159
+ endpoint.password = 'p'
160
+ expect(endpoint.password).to eq('p')
161
+ expect(endpoint).to eq('https://u:p@foo.com')
162
+ end
163
+
164
+ end
165
+ end
166
+ end
167
+ end
168
+ end