From 051ba3f0380534b65f2bd51b9820c71d74bdc33b Mon Sep 17 00:00:00 2001 From: Nathan Marz Date: Thu, 2 Jul 2015 17:23:18 -0400 Subject: [PATCH] added not-selected? and transformed selectors --- src/com/rpl/specter.cljc | 13 +++++++++++++ test/com/rpl/specter/core_test.cljc | 9 +++++++++ 2 files changed, 22 insertions(+) diff --git a/src/com/rpl/specter.cljc b/src/com/rpl/specter.cljc index 2bac341..7cd9ed8 100644 --- a/src/com/rpl/specter.cljc +++ b/src/com/rpl/specter.cljc @@ -148,6 +148,19 @@ empty? not)))) +(defn not-selected? [& path] + (complement (selected? (comp-paths* path)))) + +(defn transformed + "Navigates to a view of the current value by transforming it with the + specified selector and update-fn." + [selector update-fn] + (let [compiled (comp-paths* selector)] + (view + (fn [elem] + (compiled-transform compiled update-fn elem) + )))) + (extend-type #?(:clj clojure.lang.Keyword :cljs cljs.core/Keyword) StructurePath (select* [kw structure next-fn] diff --git a/test/com/rpl/specter/core_test.cljc b/test/com/rpl/specter/core_test.cljc index 6589d1c..f1dc42a 100644 --- a/test/com/rpl/specter/core_test.cljc +++ b/test/com/rpl/specter/core_test.cljc @@ -395,3 +395,12 @@ (is (= nil (s/select-one! s/ALL [nil]))) (is (thrown? #?(:clj Exception :cljs js/Error) (s/select-one! s/ALL []))) ) + +(defspec transformed-test + (for-all+ + [v (gen/vector gen/int) + pred (gen/elements [even? odd?] + op (gen/elements [inc dec]))] + (= (select-one (transformed [ALL pred] op) v) + (transform [ALL pred] op v)) + ))