mirror of
https://github.com/metosin/reitit.git
synced 2025-12-17 00:11:11 +00:00
commit
d88b693e26
2 changed files with 27 additions and 3 deletions
|
|
@ -23,8 +23,8 @@
|
|||
|
||||
(defn -path-vals [m path-map]
|
||||
(letfn [(-path-vals [l p m]
|
||||
(reduce
|
||||
(fn [l [k v]]
|
||||
(reduce-kv
|
||||
(fn [l k v]
|
||||
(let [p' (conj p k)
|
||||
f (-match p' path-map)]
|
||||
(cond
|
||||
|
|
@ -34,12 +34,28 @@
|
|||
l m))]
|
||||
(-path-vals [] [] m)))
|
||||
|
||||
(defn -copy-meta [to from]
|
||||
(letfn [(-with-meta [x m]
|
||||
(try (with-meta x m) (catch #?(:clj Exception, :cljs js/Error) _ x)))
|
||||
(-copy [l p m]
|
||||
(reduce-kv
|
||||
(fn [l k v]
|
||||
(let [p' (conj p k)
|
||||
m' (when (empty? (meta v)) (meta (get-in from p')))]
|
||||
(cond
|
||||
m' (update-in l p' -with-meta m')
|
||||
(and (map? v) (not (record? v)) (seq v)) (-copy l p' v)
|
||||
:else l)))
|
||||
l m))]
|
||||
(-copy to [] to)))
|
||||
|
||||
(defn -assoc-in-path-vals [c]
|
||||
(reduce (partial apply assoc-in) {} c))
|
||||
|
||||
(defn path-update [m path-map]
|
||||
(-> (-path-vals m path-map)
|
||||
(-assoc-in-path-vals)))
|
||||
(-assoc-in-path-vals)
|
||||
(-copy-meta m)))
|
||||
|
||||
(defn accumulator? [x]
|
||||
(-> x meta ::accumulator))
|
||||
|
|
|
|||
|
|
@ -442,3 +442,11 @@
|
|||
(deftest routing-bug-test-538
|
||||
(let [router (r/router [["/:a"] ["/:b"]] {:conflicts nil})]
|
||||
(is (nil? (r/match-by-path router "")))))
|
||||
|
||||
(deftest metadata-regression-679
|
||||
(is (= ["/context/leaf" {:roles {:foo true}}]
|
||||
(-> ["/context" {:roles {:foo false :bar true}}
|
||||
["/leaf" {:roles ^:replace {:foo true}}]]
|
||||
(r/router)
|
||||
(r/routes)
|
||||
(first)))))
|
||||
|
|
|
|||
Loading…
Reference in a new issue