From 6c47b5fa9439d46df271023f5579bb6ac06ee65f Mon Sep 17 00:00:00 2001 From: Tommi Reiman Date: Fri, 27 Jul 2018 15:14:10 +0300 Subject: [PATCH] Welcome Interceptor registry! --- modules/reitit-core/src/reitit/interceptor.cljc | 11 +++++++++++ test/cljc/reitit/interceptor_test.cljc | 13 +++++++++++++ 2 files changed, 24 insertions(+) diff --git a/modules/reitit-core/src/reitit/interceptor.cljc b/modules/reitit-core/src/reitit/interceptor.cljc index 6f129621..258bf1e1 100644 --- a/modules/reitit-core/src/reitit/interceptor.cljc +++ b/modules/reitit-core/src/reitit/interceptor.cljc @@ -13,6 +13,17 @@ (extend-protocol IntoInterceptor + #?(:clj clojure.lang.Keyword + :cljs cljs.core.Keyword) + (into-interceptor [this data {:keys [::registry] :as opts}] + (or (if-let [interceptor (if registry (registry this))] + (into-interceptor interceptor data opts)) + (throw + (ex-info + (str "Interceptor " (pr-str this) " not found in registry.") + {:keyword this + :registry registry})))) + #?(:clj clojure.lang.APersistentVector :cljs cljs.core.PersistentVector) (into-interceptor [[f & args :as form] data opts] diff --git a/test/cljc/reitit/interceptor_test.cljc b/test/cljc/reitit/interceptor_test.cljc index d6a5fe5f..2c374b7d 100644 --- a/test/cljc/reitit/interceptor_test.cljc +++ b/test/cljc/reitit/interceptor_test.cljc @@ -58,6 +58,19 @@ (is (= [:value :ok] (app ctx))) (is (= 1 @calls))))) + (testing "as keyword" + (reset! calls 0) + (let [app (create [:enter] {::interceptor/registry {:enter (enter :value)}})] + (dotimes [_ 10] + (is (= [:value :ok] (app ctx))) + (is (= 1 @calls))))) + + (testing "missing keyword" + (is (thrown-with-msg? + ExceptionInfo + #"Interceptor :enter not found in registry" + (create [:enter])))) + (testing "as map" (reset! calls 0) (let [app (create [{:enter (enter :value)}])]