diff --git a/modules/reitit-core/src/reitit/spec.cljc b/modules/reitit-core/src/reitit/spec.cljc index b2608514..6c51759c 100644 --- a/modules/reitit-core/src/reitit/spec.cljc +++ b/modules/reitit-core/src/reitit/spec.cljc @@ -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 diff --git a/test/cljc/reitit/ring_spec_test.cljc b/test/cljc/reitit/ring_spec_test.cljc index 2e1b1648..e63fc319 100644 --- a/test/cljc/reitit/ring_spec_test.cljc +++ b/test/cljc/reitit/ring_spec_test.cljc @@ -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