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
|
||||
* Allow multimethods to be interpreted as interceptors
|
||||
|
||||
* Updated deps:
|
||||
|
||||
|
|
|
|||
|
|
@ -28,6 +28,11 @@
|
|||
|
||||
(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
|
||||
|
||||
#?(:clj clojure.lang.Keyword
|
||||
|
|
@ -60,12 +65,12 @@
|
|||
#?(:clj clojure.lang.Fn
|
||||
:cljs function)
|
||||
(into-interceptor [this data opts]
|
||||
(into-interceptor
|
||||
{:name ::handler
|
||||
::handler this
|
||||
:enter (fn [ctx]
|
||||
(assoc ctx :response (this (:request ctx))))}
|
||||
data opts))
|
||||
(into-interceptor (fn->interceptor-map this) data opts))
|
||||
|
||||
#?(:clj clojure.lang.MultiFn
|
||||
:cljs cljs.core.MultiFn)
|
||||
(into-interceptor [this data opts]
|
||||
(into-interceptor (fn->interceptor-map this) data opts))
|
||||
|
||||
#?(:clj clojure.lang.PersistentArrayMap
|
||||
:cljs cljs.core.PersistentArrayMap)
|
||||
|
|
|
|||
|
|
@ -31,6 +31,11 @@
|
|||
(defn handler [request]
|
||||
(conj request :ok))
|
||||
|
||||
(defmulti multimethod-handler (fn [request] (get request :type)))
|
||||
|
||||
(defmethod multimethod-handler :default [request]
|
||||
(conj request :multi-ok))
|
||||
|
||||
(defn create
|
||||
([interceptors]
|
||||
(create interceptors nil))
|
||||
|
|
@ -210,11 +215,11 @@
|
|||
i5 {:compile (fn [{:keys [mount?]} _]
|
||||
(when mount?
|
||||
(interceptor ::i5)))}
|
||||
chain1 (interceptor/chain [i1 i2 i3 i4 i5 handler] {:mount? true})
|
||||
chain2 (interceptor/chain [i1 i2 i3 i4 i5 handler] {:mount? false})
|
||||
chain1 (interceptor/chain [i1 i2 i3 i4 i5 handler multimethod-handler] {:mount? true})
|
||||
chain2 (interceptor/chain [i1 i2 i3 i4 i5 handler multimethod-handler] {: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 :ok ::leave_i4 ::leave_i3 ::leave_i1] (execute chain2 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 :multi-ok ::leave_i4 ::leave_i3 ::leave_i1] (execute chain2 ctx)))
|
||||
(is (= [::leave_i4 ::leave_i3 ::leave_i1] (execute chain3 ctx))))))
|
||||
|
||||
(deftest interceptor-transform-test
|
||||
|
|
|
|||
Loading…
Reference in a new issue