diff --git a/modules/reitit-core/src/reitit/segment.cljc b/modules/reitit-core/src/reitit/segment.cljc index 2e9316d2..7a3aa86a 100644 --- a/modules/reitit-core/src/reitit/segment.cljc +++ b/modules/reitit-core/src/reitit/segment.cljc @@ -13,9 +13,12 @@ (-insert [this ps data]) (-lookup [this ps params])) -(defn- -catch-all [catch-all data params p ps] +(defn- -catch-all [children catch-all data params p ps] (if catch-all - (assoc data :params (assoc params catch-all (str/join "/" (cons p ps)))))) + (-lookup + (impl/fast-get children catch-all) + nil + (assoc data :params (assoc params catch-all (str/join "/" (cons p ps))))))) (defn- segment ([] (segment {} #{} nil nil)) @@ -37,7 +40,7 @@ (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) - (-catch-all catch-all data params p ps)))))))) + (-catch-all children' catch-all data params p ps)))))))) (defn insert [root path data] (-insert (or root (segment)) (impl/segments path) (map->Match {:data data}))) diff --git a/test/cljc/reitit/core_test.cljc b/test/cljc/reitit/core_test.cljc index 0062cccb..cbc1e266 100644 --- a/test/cljc/reitit/core_test.cljc +++ b/test/cljc/reitit/core_test.cljc @@ -45,7 +45,6 @@ #"^missing path-params for route /api/ipa/:size -> \#\{:size\}$" (r/match-by-name! router ::beer)))))) - ;; TODO (testing "complex" (let [router (r/router [["/:abba" ::abba] @@ -53,7 +52,7 @@ ["/:jabba/2" ::jabba2] ["/:abba/:dabba/doo" ::doo] ["/abba/:dabba/boo" ::boo] - #_["/:jabba/:dabba/:doo/*foo" ::wild]] + ["/:jabba/:dabba/:doo/*foo" ::wild]] {:router r}) matches #(-> router (r/match-by-path %) :data :name)] (is (= ::abba (matches "/abba"))) @@ -61,8 +60,7 @@ (is (= ::jabba2 (matches "/abba/2"))) (is (= ::doo (matches "/abba/1/doo"))) (is (= ::boo (matches "/abba/1/boo"))) - #_(is (= ::wild (matches "/olipa/kerran/avaruus/vaan/ei/toista/kertaa"))) - ))) + (is (= ::wild (matches "/olipa/kerran/avaruus/vaan/ei/toista/kertaa")))))) r/linear-router :linear-router r/segment-router :segment-router