From ec35c2ebbf5babe9cd77b7564d0448ce46ddc25a Mon Sep 17 00:00:00 2001 From: Tommi Reiman Date: Thu, 23 Nov 2017 16:01:40 +0200 Subject: [PATCH] Polish segment-router --- modules/reitit-core/src/reitit/segment.cljc | 24 +++++++++++---------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/modules/reitit-core/src/reitit/segment.cljc b/modules/reitit-core/src/reitit/segment.cljc index c6300103..ac27305f 100644 --- a/modules/reitit-core/src/reitit/segment.cljc +++ b/modules/reitit-core/src/reitit/segment.cljc @@ -12,12 +12,6 @@ (-insert [this ps data]) (-lookup [this ps params])) -(defn- segments [^String path] - (mapv - (fn [^String p] - (if (impl/wild-param? p) (-> p (subs 1) keyword) p)) - (.split path "/"))) - ;; TODO: catch-all (defn- segment ([] @@ -29,22 +23,30 @@ (-insert [_ [p & ps] data] (if-not p (segment children wilds data) - (let [wilds (if (keyword? p) (conj wilds p) wilds) - children (update children p #(-insert (or % (segment)) ps data))] - (segment children wilds data)))) + (let [wild (impl/wild-param p) + wilds (if wild (conj wilds wild) wilds) + children (update children (or wild p) #(-insert (or % (segment)) ps data))] + (segment children wilds nil)))) (-lookup [_ [p & ps] params] (if (nil? p) - (assoc data :params params) + (if data (assoc data :params params)) (or (-lookup (impl/fast-get children' p) ps params) (some #(-lookup (impl/fast-get children' %) ps (assoc params % p)) wilds)))))))) (defn create [paths] (reduce (fn [segment [p data]] - (let [ps (segments p)] + (let [ps (impl/segments p)] (-insert segment ps (map->Match {:data data})))) (segment) paths)) (defn lookup [segment ^String path] (let [ps (.split path "/")] (-lookup segment ps {}))) + +(comment + (-> [["/:abba" 1] + ["/kikka/*kakka" 2]] + (create) + (lookup "/kikka") + (./aprint)))