From 685173efbbaa61437575aee12425387b5d9bd194 Mon Sep 17 00:00:00 2001 From: Alexander Ponimaskin Date: Mon, 28 Sep 2015 17:52:41 +0300 Subject: [PATCH 1/2] respect trailing slashes --- src/cemerick/url.cljx | 21 ++++++++++++++++----- test/cemerick/test_url.cljx | 1 + 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/cemerick/url.cljx b/src/cemerick/url.cljx index 75ff53d..b874015 100644 --- a/src/cemerick/url.cljx +++ b/src/cemerick/url.cljx @@ -83,6 +83,17 @@ (map->query query)))) (when anchor (str \# anchor)))))) +(defn normalize + [path] + (when (not (string/blank? path)) + (let [lastchar (fn [x] (get x (- (count x) 1))) + original-ends-with-slash? (= (lastchar path) \/) + normalized (pathetic/normalize path)] + (if (and original-ends-with-slash? + (not= (lastchar normalized) \/)) + (str normalized "/") + normalized)))) + #+clj (defn- url* [url] @@ -93,7 +104,7 @@ (and (seq pass) pass) (.getHost url) (.getPort url) - (pathetic/normalize (.getPath url)) + (normalize (.getPath url)) (query->map (.getQuery url)) (.getRef url)))) @@ -114,7 +125,7 @@ (and (seq pass) pass) (.getDomain url) (translate-default (.getPort url) nil -1) - (pathetic/normalize (.getPath url)) + (normalize (.getPath url)) (query->map (translate-default (.getQuery url) "" nil)) (translate-default (.getFragment url) "" nil)))) @@ -135,7 +146,7 @@ (url* url))) ([base-url & path-segments] (let [base-url (if (instance? URL base-url) base-url (url base-url))] - (assoc base-url :path (pathetic/normalize (reduce pathetic/resolve - (:path base-url) - path-segments)))))) + (assoc base-url :path (normalize (reduce pathetic/resolve + (:path base-url) + path-segments)))))) diff --git a/test/cemerick/test_url.cljx b/test/cemerick/test_url.cljx index fe2e6d1..0ff6469 100644 --- a/test/cemerick/test_url.cljx +++ b/test/cemerick/test_url.cljx @@ -55,6 +55,7 @@ (deftest path-normalization (is (= "http://a/" (url-str "http://a/b/c/../.."))) + (is (= "http://test.a/a/" (url-str "http://test.a/a/"))) (is (= "http://a/b/c" (url-str "http://a/b/" "c"))) (is (= "http://a/b/c" (url-str "http://a/b/.." "b" "c"))) From 01d7aa5540ba25edb1c97dd44f0b9ab08ac98a6c Mon Sep 17 00:00:00 2001 From: Alexander Ponimaskin Date: Tue, 14 Jun 2016 22:14:09 +0300 Subject: [PATCH 2/2] use clojure.core/last --- src/cemerick/url.cljx | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/cemerick/url.cljx b/src/cemerick/url.cljx index b874015..1c0c8e0 100644 --- a/src/cemerick/url.cljx +++ b/src/cemerick/url.cljx @@ -85,12 +85,11 @@ (defn normalize [path] - (when (not (string/blank? path)) - (let [lastchar (fn [x] (get x (- (count x) 1))) - original-ends-with-slash? (= (lastchar path) \/) + (when-not (string/blank? path) + (let [original-ends-with-slash? (= (last path) \/) normalized (pathetic/normalize path)] (if (and original-ends-with-slash? - (not= (lastchar normalized) \/)) + (not= (last normalized) \/)) (str normalized "/") normalized))))