mirror of
https://github.com/metosin/reitit.git
synced 2025-12-17 08:21:11 +00:00
remove interceptors in favor of Sieppari
This commit is contained in:
parent
5e7be28eb7
commit
60f10cdc01
1 changed files with 0 additions and 102 deletions
|
|
@ -94,105 +94,3 @@
|
||||||
([data opts]
|
([data opts]
|
||||||
(let [opts (meta-merge {:coerce coerce-handler, :compile compile-result} opts)]
|
(let [opts (meta-merge {:coerce coerce-handler, :compile compile-result} opts)]
|
||||||
(r/router data opts))))
|
(r/router data opts))))
|
||||||
|
|
||||||
(ns reitit.interceptor.simple)
|
|
||||||
|
|
||||||
(defn enqueue [ctx interceptors]
|
|
||||||
(update ctx :queue (fnil into clojure.lang.PersistentQueue/EMPTY) interceptors))
|
|
||||||
|
|
||||||
|
|
||||||
(defn leave [ctx stack key]
|
|
||||||
(let [it (clojure.lang.RT/iter stack)]
|
|
||||||
(loop [ctx ctx, key key]
|
|
||||||
(if (.hasNext it)
|
|
||||||
(if-let [f (-> it .next key)]
|
|
||||||
(let [[ctx key] (try
|
|
||||||
[(f ctx)])])
|
|
||||||
(recur
|
|
||||||
(try
|
|
||||||
(leave ctx)))
|
|
||||||
(recur ctx))
|
|
||||||
ctx))))
|
|
||||||
|
|
||||||
(defn try-f [ctx f]
|
|
||||||
(try
|
|
||||||
(f ctx)
|
|
||||||
(catch Exception e
|
|
||||||
(assoc ctx :error e))))
|
|
||||||
|
|
||||||
(defn enter [ctx]
|
|
||||||
(let [queue ^clojure.lang.PersistentQueue (:queue ctx)
|
|
||||||
stack (:stack ctx)
|
|
||||||
error (:error ctx)
|
|
||||||
interceptor (peek queue)]
|
|
||||||
(cond
|
|
||||||
|
|
||||||
;; all done
|
|
||||||
(not interceptor)
|
|
||||||
(leave ctx stack :leave)
|
|
||||||
|
|
||||||
;; error
|
|
||||||
error
|
|
||||||
(leave (assoc ctx :queue nil) stack :error)
|
|
||||||
|
|
||||||
;; continue
|
|
||||||
:else
|
|
||||||
(let [queue (pop queue)
|
|
||||||
stack (conj stack interceptor)
|
|
||||||
f (or (:enter interceptor) identity)
|
|
||||||
ctx (-> ctx (assoc :queue queue) (assoc :stack stack) (try-f f))]
|
|
||||||
(recur ctx)))))
|
|
||||||
|
|
||||||
(defrecord Context [queue stack request response])
|
|
||||||
|
|
||||||
(defn context [interceptors request]
|
|
||||||
(->Context (into clojure.lang.PersistentQueue/EMPTY interceptors) nil request nil))
|
|
||||||
|
|
||||||
(defn execute [interceptors request]
|
|
||||||
(enter (context interceptors request)))
|
|
||||||
|
|
||||||
(ns user)
|
|
||||||
|
|
||||||
(require '[reitit.http :as http])
|
|
||||||
(require '[reitit.interceptor.simple :as simple])
|
|
||||||
|
|
||||||
(def i (fn [value]
|
|
||||||
{:enter (fn [ctx]
|
|
||||||
(update-in ctx [:request :enter] (fnil conj []) value))
|
|
||||||
:leave (fn [ctx]
|
|
||||||
(update-in ctx [:response :body :leave] (fnil conj []) value))}))
|
|
||||||
|
|
||||||
(def f (fn [key] {key (fn [ctx] (throw (ex-info "fail" {})))}))
|
|
||||||
|
|
||||||
(def app
|
|
||||||
(http/http-handler
|
|
||||||
(http/router
|
|
||||||
["/api"
|
|
||||||
{:interceptors [(i 1) (i 2)]}
|
|
||||||
["/ipa"
|
|
||||||
{:interceptors [(i 3) (f :enter) (i 4)]
|
|
||||||
:handler (fn [{:keys [enter]}]
|
|
||||||
{:status 200
|
|
||||||
:body {:enter enter}})}]])
|
|
||||||
simple/execute))
|
|
||||||
|
|
||||||
(app {:request-method :get, :uri "/api/ipa"})
|
|
||||||
; => {:status 200, :body {:enter [1 2 3 4], :leave [4 3 2 1]}}
|
|
||||||
|
|
||||||
(def app2
|
|
||||||
(http/http-handler
|
|
||||||
(http/router
|
|
||||||
["/api"
|
|
||||||
{:interceptors [(i 1) (i 2)]}
|
|
||||||
["/ipa"
|
|
||||||
{:interceptors [(i 3) (i 4) (fn [ctx]
|
|
||||||
(assoc ctx
|
|
||||||
:response
|
|
||||||
{:status 200
|
|
||||||
:body {:enter (-> ctx
|
|
||||||
:request
|
|
||||||
:enter)}}))]}]])
|
|
||||||
simple/execute))
|
|
||||||
|
|
||||||
(app2 {:request-method :get, :uri "/api/ipa"})
|
|
||||||
; => {:status 200, :body {:enter [1 2 3 4], :leave [4 3 2 1]}}
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue