add with-fresh-collected higher order navigator
This commit is contained in:
parent
a1929d9eb7
commit
f521409482
3 changed files with 33 additions and 0 deletions
|
|
@ -3,6 +3,7 @@
|
||||||
* Transform to `com.rpl.specter/NONE` to remove elements from data structures. Works with `keypath` (for both sequences and maps), `must`, `ALL`, and `MAP-VALS`
|
* Transform to `com.rpl.specter/NONE` to remove elements from data structures. Works with `keypath` (for both sequences and maps), `must`, `ALL`, and `MAP-VALS`
|
||||||
* Dynamic navs automatically compile sequence returns if completely static
|
* Dynamic navs automatically compile sequence returns if completely static
|
||||||
* Eliminate reflection warnings for clj (thanks @mpenet)
|
* Eliminate reflection warnings for clj (thanks @mpenet)
|
||||||
|
* Add `with-fresh-collected` higher order navigator
|
||||||
|
|
||||||
## 0.13.2
|
## 0.13.2
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -974,6 +974,16 @@
|
||||||
(collect-val [this structure]
|
(collect-val [this structure]
|
||||||
val))
|
val))
|
||||||
|
|
||||||
|
(defdynamicnav with-fresh-collected
|
||||||
|
[& path]
|
||||||
|
(late-bound-richnav [late (late-path path)]
|
||||||
|
(select* [this vals structure next-fn]
|
||||||
|
(i/exec-select* late [] structure (fn [_ structure] (next-fn vals structure)))
|
||||||
|
)
|
||||||
|
(transform* [this vals structure next-fn]
|
||||||
|
(i/exec-transform* late [] structure (fn [_ structure] (next-fn vals structure))))
|
||||||
|
))
|
||||||
|
|
||||||
(defrichnav
|
(defrichnav
|
||||||
^{:doc "Drops all collected values for subsequent navigation."}
|
^{:doc "Drops all collected values for subsequent navigation."}
|
||||||
DISPENSE
|
DISPENSE
|
||||||
|
|
|
||||||
|
|
@ -1336,3 +1336,25 @@
|
||||||
(is (= (dissoc m 31) (setval [s/MAP-VALS #(= 31 %)] s/NONE m)))
|
(is (= (dissoc m 31) (setval [s/MAP-VALS #(= 31 %)] s/NONE m)))
|
||||||
(is (= (dissoc m 31) (setval [s/ALL (s/selected? s/LAST #(= 31 %))] s/NONE m)))
|
(is (= (dissoc m 31) (setval [s/ALL (s/selected? s/LAST #(= 31 %))] s/NONE m)))
|
||||||
))
|
))
|
||||||
|
|
||||||
|
(deftest fresh-collected-test
|
||||||
|
(let [data [{:a 1 :b 2} {:a 3 :b 3}]]
|
||||||
|
(is (= [[{:a 1 :b 2} 2]]
|
||||||
|
(select [s/ALL
|
||||||
|
s/VAL
|
||||||
|
(s/with-fresh-collected
|
||||||
|
(s/collect-one :a)
|
||||||
|
(s/collected? [a] (= a 1)))
|
||||||
|
:b]
|
||||||
|
data)))
|
||||||
|
(is (= [{:a 1 :b 3} {:a 3 :b 3}]
|
||||||
|
(transform [s/ALL
|
||||||
|
s/VAL
|
||||||
|
(s/with-fresh-collected
|
||||||
|
(s/collect-one :a)
|
||||||
|
(s/collected? [a] (= a 1)))
|
||||||
|
:b]
|
||||||
|
(fn [m v] (+ (:a m) v))
|
||||||
|
data
|
||||||
|
)))
|
||||||
|
))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue