Merge pull request #696 from metosin/post-693

Followup 693
This commit is contained in:
Tommi Reiman 2024-08-27 14:16:04 +03:00 committed by GitHub
commit 8b0c8a3c18
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -97,6 +97,23 @@
{:no-doc true {:no-doc true
:handler default-options-handler}) :handler default-options-handler})
(defn- comp-handlers
"Compose two ring handlers such that if the first has an empty response
the second will be invoked."
[handler1 handler2]
(let [single-arity (fn [request]
(or (handler1 request) (handler2 request)))
multi-arity (fn [request respond raise]
(handler1 request (fn [response]
(if response
(respond response)
(handler2 request respond raise))) raise))]
(fn
([request]
(single-arity request))
([request respond raise]
(multi-arity request respond raise)))))
;; ;;
;; public api ;; public api
;; ;;
@ -133,38 +150,13 @@
" Use :reitit.ring/default-options-endpoint instead."))) " Use :reitit.ring/default-options-endpoint instead.")))
(r/router data opts)))) (r/router data opts))))
(defn- comp-handlers
"Compose two ring handlers such that if the first has an empty response
the second will be invoked."
([handler]
handler)
([handler1 handler2]
(let [single-arity (fn [request]
(or (handler1 request) (handler2 request)))
multi-arity (fn [request respond raise]
(handler1 request (fn [response]
(if response
(respond response)
(handler2 request respond raise))) raise))]
(fn
([request]
(single-arity request))
([request respond raise]
(multi-arity request respond raise))))))
(defn routes (defn routes
"Create a ring handler by combining several handlers into one." "Create a ring handler by combining several handlers into one."
{:arglists '([& handlers])} {:arglists '([& handlers])}
([] nil) ([& [handler1 handler2 & handlers]]
([handler] handler) (cond (seq handlers) (reduce routes (routes handler1 handler2) handlers)
([handler1 handler2]
(cond
(and handler1 handler2) (comp-handlers handler1 handler2) (and handler1 handler2) (comp-handlers handler1 handler2)
handler1 handler1 :else (or handler1 handler2))))
handler2 handler2
:else nil))
([handler1 handler2 & handlers]
(reduce routes (routes handler1 handler2) handlers)))
(defn redirect-trailing-slash-handler (defn redirect-trailing-slash-handler
"A ring handler that redirects a missing path if there is an "A ring handler that redirects a missing path if there is an