:reitit.ring.middleware/transform!

This commit is contained in:
Tommi Reiman 2017-12-03 21:09:05 +02:00
parent 8bbf2eb78c
commit 368850b6ab
2 changed files with 27 additions and 2 deletions

View file

@ -78,9 +78,10 @@
(defn compile-result
([route opts]
(compile-result route opts nil))
([[path {:keys [middleware handler] :as data}] opts scope]
([[path {:keys [middleware handler] :as data}]
{:keys [::transform] :or {transform identity} :as opts} scope]
(ensure-handler! path data scope)
(let [middleware (expand middleware data opts)]
(let [middleware (transform (expand middleware data opts))]
(map->Endpoint
{:handler (compile-handler middleware handler)
:middleware middleware

View file

@ -188,3 +188,27 @@
(is (= [::mw1 ::mw3 ::mw4 ::mw5 :ok ::mw5 ::mw4 ::mw3 ::mw1] (chain1 [])))
(is (= [::mw1 ::mw3 ::mw4 :ok ::mw4 ::mw3 ::mw1] (chain2 []))))))
(deftest middleware-transform-test
(let [wrap (fn [handler value]
#(handler (conj % value)))
debug-mw {:name ::debug, :wrap #(wrap % ::debug)}
create (fn [options]
(create-app
(middleware/router
["/ping" {:middleware [{:name ::olipa, :wrap #(wrap % ::olipa)}
{:name ::kerran, :wrap #(wrap % ::kerran)}
{:name ::avaruus, :wrap #(wrap % ::avaruus)}]
:handler #(conj % :ok)}]
options)))]
(testing "by default, all middleware are applied in order"
(let [app (create nil)]
(is (= [::olipa ::kerran ::avaruus :ok] (app "/ping")))))
(testing "middleware can be re-ordered"
(let [app (create {::middleware/transform (partial sort-by :name)})]
(is (= [::avaruus ::kerran ::olipa :ok] (app "/ping")))))
(testing "adding debug middleware between middleware"
(let [app (create {::middleware/transform #(interleave % (repeat debug-mw))})]
(is (= [::olipa ::debug ::kerran ::debug ::avaruus ::debug :ok] (app "/ping")))))))