|
| 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