From 36634abd3931d37c4792ca2c74bf3e564c9f9fb8 Mon Sep 17 00:00:00 2001 From: Tommi Reiman Date: Thu, 7 Mar 2019 10:45:16 +0200 Subject: [PATCH] :reitit.trie/parameters option takes sequence of keys --- modules/reitit-core/src/reitit/core.cljc | 4 ++-- modules/reitit-core/src/reitit/trie.cljc | 20 +++++++++++--------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/modules/reitit-core/src/reitit/core.cljc b/modules/reitit-core/src/reitit/core.cljc index 1025618a..2f33c605 100644 --- a/modules/reitit-core/src/reitit/core.cljc +++ b/modules/reitit-core/src/reitit/core.cljc @@ -80,7 +80,7 @@ | key | description | | -----------------------------|-------------| | `:reitit.trie/trie-compiler` | Optional trie-compiler. - | `:reitit.trie/parameters` | Optional function to transform path-parameters at creation time (default `identity`)." + | `:reitit.trie/parameters` | Optional function to create empty map(-like) path parameters value from sequence of keys." ([compiled-routes] (linear-router compiled-routes {})) ([compiled-routes opts] @@ -176,7 +176,7 @@ | key | description | | -----------------------------|-------------| | `:reitit.trie/trie-compiler` | Optional trie-compiler. - | `:reitit.trie/parameters` | Optional function to transform path-parameters at creation time (default `identity`)." + | `:reitit.trie/parameters` | Optional function to create empty map(-like) path parameters value from sequence of keys." ([compiled-routes] (trie-router compiled-routes {})) ([compiled-routes opts] diff --git a/modules/reitit-core/src/reitit/trie.cljc b/modules/reitit-core/src/reitit/trie.cljc index 8af5877d..11a471d5 100644 --- a/modules/reitit-core/src/reitit/trie.cljc +++ b/modules/reitit-core/src/reitit/trie.cljc @@ -288,17 +288,19 @@ ;; Managing Tries ;; +(defn- map-parameters [keys] + (zipmap keys (repeat nil))) + #?(:clj (def record-parameters "Memoized function to transform parameters into runtime generated Record." (memoize - (fn [params] - (let [fields (keys params)] - (if (some qualified-keyword? fields) - params - (let [sym (gensym "PathParams") - ctor (symbol (str "map->" sym))] - (eval `(do (defrecord ~sym ~(mapv (comp symbol name) fields)) (~ctor {})))))))))) + (fn [keys] + (if (some qualified-keyword? keys) + (map-parameters keys) + (let [sym (gensym "PathParams") + ctor (symbol (str "map->" sym))] + (eval `(do (defrecord ~sym ~(mapv (comp symbol name) keys)) (~ctor {}))))))))) (defn insert "Returns a trie with routes added to it." @@ -311,9 +313,9 @@ node routes)) ([node path data] (insert node path data nil)) - ([node path data {::keys [parameters] :or {parameters identity}}] + ([node path data {::keys [parameters] :or {parameters map-parameters}}] (let [parts (split-path path) - params (parameters (zipmap (->> parts (remove string?) (map :value)) (repeat nil)))] + params (parameters (->> parts (remove string?) (map :value)))] (-insert (or node (-node {})) (split-path path) path params data)))) (defn compiler