From 94431352b86ff3ad31724b78de8f91ce44cab06f Mon Sep 17 00:00:00 2001 From: Tommi Reiman Date: Fri, 27 Jul 2018 15:14:00 +0300 Subject: [PATCH] Welcome Middleware registry! --- .../reitit-core/src/reitit/middleware.cljc | 11 ++++++++++ test/cljc/reitit/middleware_test.cljc | 20 +++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/modules/reitit-core/src/reitit/middleware.cljc b/modules/reitit-core/src/reitit/middleware.cljc index 591a9c97..c9335cfa 100644 --- a/modules/reitit-core/src/reitit/middleware.cljc +++ b/modules/reitit-core/src/reitit/middleware.cljc @@ -13,6 +13,17 @@ (extend-protocol IntoMiddleware + #?(:clj clojure.lang.Keyword + :cljs cljs.core.Keyword) + (into-middleware [this data {:keys [::registry] :as opts}] + (or (if-let [middleware (if registry (registry this))] + (into-middleware middleware data opts)) + (throw + (ex-info + (str "Middleware " (pr-str this) " not found in registry.") + {:keyword this + :registry registry})))) + #?(:clj clojure.lang.APersistentVector :cljs cljs.core.PersistentVector) (into-middleware [[f & args] data opts] diff --git a/test/cljc/reitit/middleware_test.cljc b/test/cljc/reitit/middleware_test.cljc index 7987a977..11f75c7f 100644 --- a/test/cljc/reitit/middleware_test.cljc +++ b/test/cljc/reitit/middleware_test.cljc @@ -45,6 +45,26 @@ (is (= [:value :ok] (app request))) (is (= 1 @calls))))) + (testing "as keyword" + (reset! calls 0) + (let [app (create [:wrap] {::middleware/registry {:wrap #(wrap % :value)}})] + (dotimes [_ 10] + (is (= [:value :ok] (app request))) + (is (= 1 @calls))))) + + (testing "as keyword vector" + (reset! calls 0) + (let [app (create [[:wrap :value]] {::middleware/registry {:wrap wrap}})] + (dotimes [_ 10] + (is (= [:value :ok] (app request))) + (is (= 1 @calls))))) + + (testing "missing keyword" + (is (thrown-with-msg? + ExceptionInfo + #"Middleware :wrap not found in registry" + (create [:wrap])))) + (testing "as function vector with value(s)" (reset! calls 0) (let [app (create [[wrap :value]])]