diff --git a/src/clj/com/rpl/specter.cljx b/src/clj/com/rpl/specter.cljx index 3307ea3..85c7129 100644 --- a/src/clj/com/rpl/specter.cljx +++ b/src/clj/com/rpl/specter.cljx @@ -132,15 +132,16 @@ (defn params-reset [params-path] ;; TODO: error if not paramsneededpath (let [s (i/params-needed-selector params-path) - t (i/params-needed-transformer params-path)] + t (i/params-needed-transformer params-path) + needed (i/num-needed-params params-path)] (i/->ParamsNeededPath (i/->TransformFunctions i/RichPathExecutor (fn [params params-idx vals structure next-fn] - (s params 0 vals structure next-fn) + (s params (- params-idx needed) vals structure next-fn) ) (fn [params params-idx vals structure next-fn] - (t params 0 vals structure next-fn) + (t params (- params-idx needed) vals structure next-fn) )) 0))) @@ -209,7 +210,7 @@ (select* [this structure next-fn] (next-fn (set/intersection structure aset))) (transform* [this structure next-fn] - (let [subset (set/intersection structure aset) + (let [subset (set/intersection structure aset) newset (next-fn subset)] (-> structure (set/difference subset) diff --git a/test/com/rpl/specter/core_test.cljx b/test/com/rpl/specter/core_test.cljx index 2eaefc2..2442ab2 100644 --- a/test/com/rpl/specter/core_test.cljx +++ b/test/com/rpl/specter/core_test.cljx @@ -632,6 +632,11 @@ (s/setval (map-key-walker :b) "X" {:a {:c {:b {:d 1}}}})) ) +(deftest recursive-params-composable-path-test + (let [p (s/comp-paths s/keypath map-key-walker)] + (is (= [1] (s/select (p 1 :a) [{:a 3} {:a 1} {:a 2}]))) + )) + (deftest all-map-test (is (= {3 3} (s/transform [s/ALL s/FIRST] inc {2 3}))) (is (= {3 21 4 31} (s/transform [s/ALL s/ALL] inc {2 20 3 30})))