mirror of
https://github.com/metosin/reitit.git
synced 2025-12-17 08:21:11 +00:00
implement catch-all params for segment-router
This commit is contained in:
parent
85c4a0a8c0
commit
293274fb68
2 changed files with 8 additions and 7 deletions
|
|
@ -13,9 +13,12 @@
|
||||||
(-insert [this ps data])
|
(-insert [this ps data])
|
||||||
(-lookup [this ps params]))
|
(-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
|
(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
|
(defn- segment
|
||||||
([] (segment {} #{} nil nil))
|
([] (segment {} #{} nil nil))
|
||||||
|
|
@ -37,7 +40,7 @@
|
||||||
(if data (assoc data :params params))
|
(if data (assoc data :params params))
|
||||||
(or (-lookup (impl/fast-get children' p) ps params)
|
(or (-lookup (impl/fast-get children' p) ps params)
|
||||||
(some #(-lookup (impl/fast-get children' %) ps (assoc params % p)) wilds)
|
(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]
|
(defn insert [root path data]
|
||||||
(-insert (or root (segment)) (impl/segments path) (map->Match {:data data})))
|
(-insert (or root (segment)) (impl/segments path) (map->Match {:data data})))
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,6 @@
|
||||||
#"^missing path-params for route /api/ipa/:size -> \#\{:size\}$"
|
#"^missing path-params for route /api/ipa/:size -> \#\{:size\}$"
|
||||||
(r/match-by-name! router ::beer))))))
|
(r/match-by-name! router ::beer))))))
|
||||||
|
|
||||||
;; TODO
|
|
||||||
(testing "complex"
|
(testing "complex"
|
||||||
(let [router (r/router
|
(let [router (r/router
|
||||||
[["/:abba" ::abba]
|
[["/:abba" ::abba]
|
||||||
|
|
@ -53,7 +52,7 @@
|
||||||
["/:jabba/2" ::jabba2]
|
["/:jabba/2" ::jabba2]
|
||||||
["/:abba/:dabba/doo" ::doo]
|
["/:abba/:dabba/doo" ::doo]
|
||||||
["/abba/:dabba/boo" ::boo]
|
["/abba/:dabba/boo" ::boo]
|
||||||
#_["/:jabba/:dabba/:doo/*foo" ::wild]]
|
["/:jabba/:dabba/:doo/*foo" ::wild]]
|
||||||
{:router r})
|
{:router r})
|
||||||
matches #(-> router (r/match-by-path %) :data :name)]
|
matches #(-> router (r/match-by-path %) :data :name)]
|
||||||
(is (= ::abba (matches "/abba")))
|
(is (= ::abba (matches "/abba")))
|
||||||
|
|
@ -61,8 +60,7 @@
|
||||||
(is (= ::jabba2 (matches "/abba/2")))
|
(is (= ::jabba2 (matches "/abba/2")))
|
||||||
(is (= ::doo (matches "/abba/1/doo")))
|
(is (= ::doo (matches "/abba/1/doo")))
|
||||||
(is (= ::boo (matches "/abba/1/boo")))
|
(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/linear-router :linear-router
|
||||||
r/segment-router :segment-router
|
r/segment-router :segment-router
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue