Skip to content

Commit 93fa9a6

Browse files
committed
merge + closed bugfix
1 parent 7e99a50 commit 93fa9a6

File tree

2 files changed

+10
-13
lines changed

2 files changed

+10
-13
lines changed

src/exoscale/coax.cljc

+5-13
Original file line numberDiff line numberDiff line change
@@ -127,20 +127,12 @@
127127

128128
(defn gen-coerce-merge
129129
[[_ & spec-forms]]
130-
(fn [x opts]
130+
(fn [x {:as opts :keys [closed]}]
131131
(if (map? x)
132-
(reduce (fn [m spec-form]
133-
;; for every spec-form coerce to new value;
134-
;; we need to compare key by key what changed so that
135-
;; defaults do not overwrite coerced values
136-
(into m
137-
(keep (fn [[spec v]]
138-
;; new-val doesn't match default, keep it
139-
(when-not (= (get x spec) v)
140-
[spec v])))
141-
(coerce spec-form x (assoc opts :closed true))))
142-
x
143-
spec-forms)
132+
(into {}
133+
(map (fn [spec-form]
134+
(coerce spec-form x (assoc opts :closed closed))))
135+
spec-forms)
144136
:exoscale.coax/invalid)))
145137

146138
(defn gen-coerce-nilable

test/exoscale/coax_test.cljc

+5
Original file line numberDiff line numberDiff line change
@@ -420,6 +420,11 @@
420420
(sc/coerce ::merge2 {::foo "1" :foo "1" :bar "1" :c {:a 2}}))
421421
"Leave out ok vals")
422422

423+
(is (= {::foo 1 :bar "1" :foo 1}
424+
(sc/coerce ::merge2 {::foo "1" :foo "1" :bar "1" :c {:a 2}}
425+
{:closed true}))
426+
"Remove extras")
427+
423428
(is (= "garbage" (sc/coerce ::merge "garbage"))
424429
"garbage is passthrough")
425430

0 commit comments

Comments
 (0)