Merge pull request #688 from metosin/issue-679

Issue 679
This commit is contained in:
Tommi Reiman 2024-06-30 18:36:46 +03:00 committed by GitHub
commit d88b693e26
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 27 additions and 3 deletions

View file

@ -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))

View file

@ -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)))))