aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLouis Pilfold <louis@lpil.uk>2021-08-22 19:28:06 +0100
committerLouis Pilfold <louis@lpil.uk>2021-08-23 16:08:19 +0100
commit188319d5620126442635124f143ad7ff66455ebe (patch)
tree4ace3b6f5fcba576141545ae6e93a148ca15fdeb
parent5a6f1f93f87eb2e0ef2718dfdb8a7fd2e7d21346 (diff)
downloadgleam_stdlib-188319d5620126442635124f143ad7ff66455ebe.tar.gz
gleam_stdlib-188319d5620126442635124f143ad7ff66455ebe.zip
Handle empty host
-rw-r--r--src/gleam/uri.gleam9
-rw-r--r--test/gleam/uri_test.gleam4
2 files changed, 6 insertions, 7 deletions
diff --git a/src/gleam/uri.gleam b/src/gleam/uri.gleam
index 882f17e..8e49c5b 100644
--- a/src/gleam/uri.gleam
+++ b/src/gleam/uri.gleam
@@ -15,7 +15,7 @@ if erlang {
import gleam/list
import gleam/result
import gleam/dynamic.{Dynamic}
- import gleam/map.{Map}
+ import gleam/map
import gleam/function
import gleam/pair
}
@@ -221,9 +221,6 @@ if erlang {
pub fn path_segments(path: String) -> List(String) {
remove_dot_segments(string.split(path, "/"))
}
-
- external fn erl_to_string(Map(UriKey, Dynamic)) -> Dynamic =
- "uri_string" "recompose"
}
/// Encodes a `Uri` value as a URI string.
@@ -240,12 +237,10 @@ if erlang {
/// ```
///
pub fn to_string(uri: Uri) -> String {
- // TODO: query
- // TODO: fragment
let parts = []
let parts = [uri.path, ..parts]
let parts = case uri.host, string.starts_with(uri.path, "/") {
- Some(_), False -> ["/", ..parts]
+ Some(host), False if host != "" -> ["/", ..parts]
_, _ -> parts
}
let parts = case uri.host, uri.port {
diff --git a/test/gleam/uri_test.gleam b/test/gleam/uri_test.gleam
index 45fe73e..46ac2a5 100644
--- a/test/gleam/uri_test.gleam
+++ b/test/gleam/uri_test.gleam
@@ -114,6 +114,10 @@ pub fn host_to_string_test() {
uri.Uri(None, None, Some("example.com"), None, "noslash", None, None)
|> uri.to_string
|> should.equal("//example.com/noslash")
+
+ uri.Uri(None, None, Some(""), None, "", None, None)
+ |> uri.to_string
+ |> should.equal("//")
}
pub fn port_to_string_test() {