feat: allow multimethods as :handlers in validation

fixes #749
This commit is contained in:
Joel Kaasinen 2025-10-07 15:50:51 +03:00
parent 7520d20f12
commit 05bc331397
2 changed files with 13 additions and 1 deletions

View file

@ -37,8 +37,11 @@
;; Default data
;;
(defn -multi? [x]
(instance? #?(:clj clojure.lang.MultiFn :cljs cljs.core.MultiFn) x))
(s/def ::name keyword?)
(s/def ::handler (s/or :fn fn? :var var?))
(s/def ::handler (s/or :fn fn? :var var? :multi -multi?))
(s/def ::no-doc boolean?)
(s/def ::conflicting boolean?)
(s/def ::default-data

View file

@ -12,6 +12,9 @@
(s/def ::role #{:admin :user})
(s/def ::roles (s/and (s/coll-of ::role :into #{}) set?))
(defmulti my-multi (constantly :default))
(defmethod my-multi :default [x] x)
(deftest route-data-validation-test
(testing "validation is turned off by default"
(is (r/router?
@ -85,6 +88,12 @@
(ring/router
["/api" {:handler identity
:middleware '()}]
{:validate rrs/validate}))))
(testing "handler can be a multimethod"
(is (r/router?
(ring/router
["/api" {:get {:handler my-multi}}]
{:validate rrs/validate})))))
(deftest coercion-spec-test