mirror of
https://github.com/metosin/reitit.git
synced 2025-12-17 08:21:11 +00:00
commit
d88b693e26
2 changed files with 27 additions and 3 deletions
|
|
@ -23,8 +23,8 @@
|
||||||
|
|
||||||
(defn -path-vals [m path-map]
|
(defn -path-vals [m path-map]
|
||||||
(letfn [(-path-vals [l p m]
|
(letfn [(-path-vals [l p m]
|
||||||
(reduce
|
(reduce-kv
|
||||||
(fn [l [k v]]
|
(fn [l k v]
|
||||||
(let [p' (conj p k)
|
(let [p' (conj p k)
|
||||||
f (-match p' path-map)]
|
f (-match p' path-map)]
|
||||||
(cond
|
(cond
|
||||||
|
|
@ -34,12 +34,28 @@
|
||||||
l m))]
|
l m))]
|
||||||
(-path-vals [] [] 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]
|
(defn -assoc-in-path-vals [c]
|
||||||
(reduce (partial apply assoc-in) {} c))
|
(reduce (partial apply assoc-in) {} c))
|
||||||
|
|
||||||
(defn path-update [m path-map]
|
(defn path-update [m path-map]
|
||||||
(-> (-path-vals m path-map)
|
(-> (-path-vals m path-map)
|
||||||
(-assoc-in-path-vals)))
|
(-assoc-in-path-vals)
|
||||||
|
(-copy-meta m)))
|
||||||
|
|
||||||
(defn accumulator? [x]
|
(defn accumulator? [x]
|
||||||
(-> x meta ::accumulator))
|
(-> x meta ::accumulator))
|
||||||
|
|
|
||||||
|
|
@ -442,3 +442,11 @@
|
||||||
(deftest routing-bug-test-538
|
(deftest routing-bug-test-538
|
||||||
(let [router (r/router [["/:a"] ["/:b"]] {:conflicts nil})]
|
(let [router (r/router [["/:a"] ["/:b"]] {:conflicts nil})]
|
||||||
(is (nil? (r/match-by-path router "")))))
|
(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