mirror of
https://github.com/metosin/reitit.git
synced 2026-02-25 10:32:24 +00:00
Merge f80271fac1 into 7e00de835d
This commit is contained in:
commit
5099bbedd2
3 changed files with 21 additions and 10 deletions
|
|
@ -143,6 +143,7 @@ We use [Break Versioning][breakver]. The version numbers follow a `<major>.<mino
|
||||||
```
|
```
|
||||||
|
|
||||||
* Improved Reitit-frontend function docstrings
|
* Improved Reitit-frontend function docstrings
|
||||||
|
* Allow multimethods to be interpreted as interceptors
|
||||||
|
|
||||||
* Updated deps:
|
* Updated deps:
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,11 @@
|
||||||
|
|
||||||
(def ^:dynamic *max-compile-depth* 10)
|
(def ^:dynamic *max-compile-depth* 10)
|
||||||
|
|
||||||
|
(defn- fn->interceptor-map [func]
|
||||||
|
{:name ::handler
|
||||||
|
::handler func
|
||||||
|
:enter (fn [ctx] (assoc ctx :response (func (:request ctx))))})
|
||||||
|
|
||||||
(extend-protocol IntoInterceptor
|
(extend-protocol IntoInterceptor
|
||||||
|
|
||||||
#?(:clj clojure.lang.Keyword
|
#?(:clj clojure.lang.Keyword
|
||||||
|
|
@ -60,12 +65,12 @@
|
||||||
#?(:clj clojure.lang.Fn
|
#?(:clj clojure.lang.Fn
|
||||||
:cljs function)
|
:cljs function)
|
||||||
(into-interceptor [this data opts]
|
(into-interceptor [this data opts]
|
||||||
(into-interceptor
|
(into-interceptor (fn->interceptor-map this) data opts))
|
||||||
{:name ::handler
|
|
||||||
::handler this
|
#?(:clj clojure.lang.MultiFn
|
||||||
:enter (fn [ctx]
|
:cljs cljs.core.MultiFn)
|
||||||
(assoc ctx :response (this (:request ctx))))}
|
(into-interceptor [this data opts]
|
||||||
data opts))
|
(into-interceptor (fn->interceptor-map this) data opts))
|
||||||
|
|
||||||
#?(:clj clojure.lang.PersistentArrayMap
|
#?(:clj clojure.lang.PersistentArrayMap
|
||||||
:cljs cljs.core.PersistentArrayMap)
|
:cljs cljs.core.PersistentArrayMap)
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,11 @@
|
||||||
(defn handler [request]
|
(defn handler [request]
|
||||||
(conj request :ok))
|
(conj request :ok))
|
||||||
|
|
||||||
|
(defmulti multimethod-handler (fn [request] (get request :type)))
|
||||||
|
|
||||||
|
(defmethod multimethod-handler :default [request]
|
||||||
|
(conj request :multi-ok))
|
||||||
|
|
||||||
(defn create
|
(defn create
|
||||||
([interceptors]
|
([interceptors]
|
||||||
(create interceptors nil))
|
(create interceptors nil))
|
||||||
|
|
@ -210,11 +215,11 @@
|
||||||
i5 {:compile (fn [{:keys [mount?]} _]
|
i5 {:compile (fn [{:keys [mount?]} _]
|
||||||
(when mount?
|
(when mount?
|
||||||
(interceptor ::i5)))}
|
(interceptor ::i5)))}
|
||||||
chain1 (interceptor/chain [i1 i2 i3 i4 i5 handler] {:mount? true})
|
chain1 (interceptor/chain [i1 i2 i3 i4 i5 handler multimethod-handler] {:mount? true})
|
||||||
chain2 (interceptor/chain [i1 i2 i3 i4 i5 handler] {:mount? false})
|
chain2 (interceptor/chain [i1 i2 i3 i4 i5 handler multimethod-handler] {:mount? false})
|
||||||
chain3 (interceptor/chain [i1 i2 i3 i4 i5] {:mount? false})]
|
chain3 (interceptor/chain [i1 i2 i3 i4 i5] {:mount? false})]
|
||||||
(is (= [::enter_i1 ::enter_i3 ::enter_i4 ::enter_i5 :ok ::leave_i5 ::leave_i4 ::leave_i3 ::leave_i1] (execute chain1 ctx)))
|
(is (= [::enter_i1 ::enter_i3 ::enter_i4 ::enter_i5 :ok :multi-ok ::leave_i5 ::leave_i4 ::leave_i3 ::leave_i1] (execute chain1 ctx)))
|
||||||
(is (= [::enter_i1 ::enter_i3 ::enter_i4 :ok ::leave_i4 ::leave_i3 ::leave_i1] (execute chain2 ctx)))
|
(is (= [::enter_i1 ::enter_i3 ::enter_i4 :ok :multi-ok ::leave_i4 ::leave_i3 ::leave_i1] (execute chain2 ctx)))
|
||||||
(is (= [::leave_i4 ::leave_i3 ::leave_i1] (execute chain3 ctx))))))
|
(is (= [::leave_i4 ::leave_i3 ::leave_i1] (execute chain3 ctx))))))
|
||||||
|
|
||||||
(deftest interceptor-transform-test
|
(deftest interceptor-transform-test
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue