mirror of
https://github.com/metosin/reitit.git
synced 2025-12-19 01:11:11 +00:00
:reitit.ring.middleware/transform!
This commit is contained in:
parent
8bbf2eb78c
commit
368850b6ab
2 changed files with 27 additions and 2 deletions
|
|
@ -78,9 +78,10 @@
|
||||||
(defn compile-result
|
(defn compile-result
|
||||||
([route opts]
|
([route opts]
|
||||||
(compile-result route opts nil))
|
(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)
|
(ensure-handler! path data scope)
|
||||||
(let [middleware (expand middleware data opts)]
|
(let [middleware (transform (expand middleware data opts))]
|
||||||
(map->Endpoint
|
(map->Endpoint
|
||||||
{:handler (compile-handler middleware handler)
|
{:handler (compile-handler middleware handler)
|
||||||
:middleware middleware
|
:middleware middleware
|
||||||
|
|
|
||||||
|
|
@ -188,3 +188,27 @@
|
||||||
(is (= [::mw1 ::mw3 ::mw4 ::mw5 :ok ::mw5 ::mw4 ::mw3 ::mw1] (chain1 [])))
|
(is (= [::mw1 ::mw3 ::mw4 ::mw5 :ok ::mw5 ::mw4 ::mw3 ::mw1] (chain1 [])))
|
||||||
(is (= [::mw1 ::mw3 ::mw4 :ok ::mw4 ::mw3 ::mw1] (chain2 []))))))
|
(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")))))))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue