Skip to content

Instantly share code, notes, and snippets.

@piotr-yuxuan
Created April 16, 2018 11:52
Show Gist options
  • Save piotr-yuxuan/a917686383cf6a4e15e186a14a4f1342 to your computer and use it in GitHub Desktop.
Save piotr-yuxuan/a917686383cf6a4e15e186a14a4f1342 to your computer and use it in GitHub Desktop.
Encode url and preserve macro
(defn- encoded-macros-map
[macros]
(->> macros
(map (fn [macro]
[(codec/url-encode macro) macro]))
(into {})))
(defn- macro-decoder
[macros-map s]
(reduce (fn [acc [escaped-macro macro]]
(str/replace acc escaped-macro macro))
s
macros-map))
(defn encode-url-preserve-macro
[macros s]
(let [macros-map (encoded-macros-map macros)]
(->> s
codec/url-encode
(macro-decoder macros-map))))
(deftest encode-url-preserve-macro-test
(let [macros #{"[macro]"}]
(is (= "https%3A%2F%2Fuser%3Apassword%40some.example.com%2Fpage%3Fquery%26params%26[macro]%23fragment"
(subject/encode-url-preserve-macro macros "https://user:[email protected]/page?query&params&[macro]#fragment")))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment