From 59aa3649328dc1650f3b532438897b5e5093147d Mon Sep 17 00:00:00 2001 From: Tommi Reiman Date: Sun, 3 Dec 2017 17:42:47 +0200 Subject: [PATCH] middleware/chain --- .../reitit-ring/src/reitit/ring/middleware.cljc | 8 ++++++++ test/cljc/reitit/middleware_test.cljc | 17 +++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/modules/reitit-ring/src/reitit/ring/middleware.cljc b/modules/reitit-ring/src/reitit/ring/middleware.cljc index f76e8045..ffd00217 100644 --- a/modules/reitit-ring/src/reitit/ring/middleware.cljc +++ b/modules/reitit-ring/src/reitit/ring/middleware.cljc @@ -101,3 +101,11 @@ :result :handler)) {::router router})) + +(defn chain + "Creates a vanilla ring middleware chain out of sequence of + IntoMiddleware thingies." + ([middleware handler data] + (chain middleware handler data nil)) + ([middleware handler data opts] + (compile-handler (expand middleware data opts) handler))) diff --git a/test/cljc/reitit/middleware_test.cljc b/test/cljc/reitit/middleware_test.cljc index 3a66de61..9fc40a4a 100644 --- a/test/cljc/reitit/middleware_test.cljc +++ b/test/cljc/reitit/middleware_test.cljc @@ -170,3 +170,20 @@ :middleware (map :name)))))))))) +(deftest chain-test + (testing "chain can produce middlware chain of any IntoMiddleware" + (let [mw (fn [handler value] + #(conj (handler (conj % value)) value)) + handler #(conj % :ok) + mw1 {:gen-wrap (constantly #(mw % ::mw1))} + mw2 {:gen-wrap (constantly nil)} + mw3 {:wrap #(mw % ::mw3)} + mw4 #(mw % ::mw4) + mw5 {:gen-wrap (fn [{:keys [mount?]} _] + (when mount? + #(mw % ::mw5)))} + chain1 (middleware/chain [mw1 mw2 mw3 mw4 mw5] handler {:mount? true}) + chain2 (middleware/chain [mw1 mw2 mw3 mw4 mw5] handler {:mount? false})] + (is (= [::mw1 ::mw3 ::mw4 ::mw5 :ok ::mw5 ::mw4 ::mw3 ::mw1] (chain1 []))) + (is (= [::mw1 ::mw3 ::mw4 :ok ::mw4 ::mw3 ::mw1] (chain2 [])))))) +