middleware/chain

This commit is contained in:
Tommi Reiman 2017-12-03 17:42:47 +02:00
parent b210a98f83
commit 59aa364932
2 changed files with 25 additions and 0 deletions

View file

@ -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)))

View file

@ -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 []))))))