Skip to content

Commit e683557

Browse files
committed
backport src/compojure/api/compojure_compat.clj
1 parent 981c316 commit e683557

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
(ns compojure.api.compojure-compat
2+
"Compatibility for older Compojure versions."
3+
(:require [clout.core :as clout]
4+
[compojure.core :as c]))
5+
6+
;; Copy-pasted from Compojure 1.6 to maintain backwards-compatibility with
7+
;; Compojure 1.5. Essentially the same code existed in Compojure 1.5 but with a
8+
;; different name.
9+
;; <https://github.com/weavejester/compojure/blob/3bdbc2f0c151ebb54b2f77780b417475e8277549/src/compojure/core.clj>
10+
11+
(defn- context-request [request route]
12+
(if-let [params (clout/route-matches route request)]
13+
(let [uri (:uri request)
14+
path (:path-info request uri)
15+
context (or (:context request) "")
16+
subpath (:__path-info params)
17+
params (dissoc params :__path-info)]
18+
(-> request
19+
(#'c/assoc-route-params (#'c/decode-route-params params))
20+
(assoc :path-info (if (= subpath "") "/" subpath)
21+
:context (#'c/remove-suffix uri subpath))))))
22+
23+
(defn ^:no-doc make-context [route make-handler]
24+
(letfn [(handler
25+
([request]
26+
((make-handler request) request))
27+
([request respond raise]
28+
((make-handler request) request respond raise)))]
29+
(if (#{":__path-info" "/:__path-info"} (:source route))
30+
handler
31+
(fn
32+
([request]
33+
(if-let [request (context-request request route)]
34+
(handler request)))
35+
([request respond raise]
36+
(if-let [request (context-request request route)]
37+
(handler request respond raise)
38+
(respond nil)))))))

0 commit comments

Comments
 (0)