|
134 | 134 | (defn- wrap-route-info [handler route-info] |
135 | 135 | (fn |
136 | 136 | ([request] |
137 | | - (handler (assoc request :compojure/route route-info))) |
| 137 | + (let [full-route (str (:compojure/context request) (second route-info))] |
| 138 | + (handler (assoc request |
| 139 | + :compojure/route route-info |
| 140 | + :compojure/full-route full-route)))) |
138 | 141 | ([request respond raise] |
139 | | - (handler (assoc request :compojure/route route-info) respond raise)))) |
| 142 | + (let [full-route (str (:compojure/context request) (second route-info))] |
| 143 | + (handler (assoc request |
| 144 | + :compojure/route route-info |
| 145 | + :compojure/full-route full-route) |
| 146 | + respond |
| 147 | + raise))))) |
140 | 148 |
|
141 | 149 | (defn- wrap-route-matches [handler method path] |
142 | 150 | (fn |
|
257 | 265 | path (:path-info request uri) |
258 | 266 | context (or (:context request) "") |
259 | 267 | subpath (:__path-info params) |
260 | | - params (dissoc params :__path-info)] |
| 268 | + params (dissoc params :__path-info) |
| 269 | + context-route (:context-route (meta route))] |
261 | 270 | (-> request |
262 | 271 | (assoc-route-params (decode-route-params params)) |
263 | 272 | (assoc :path-info (if (= subpath "") "/" subpath) |
264 | | - :context (remove-suffix uri subpath)))))) |
| 273 | + :context (remove-suffix uri subpath)) |
| 274 | + (update :compojure/context (fn [ctx] (str ctx context-route))))))) |
265 | 275 |
|
266 | 276 | (defn- context-route [route] |
267 | 277 | (let [re-context {:__path-info #"|/.*"}] |
268 | 278 | (cond |
269 | 279 | (string? route) |
270 | | - (clout/route-compile (str route ":__path-info") re-context) |
| 280 | + (with-meta (clout/route-compile (str route ":__path-info") re-context) |
| 281 | + {:context-route route}) |
271 | 282 | (and (vector? route) (literal? route)) |
272 | | - (clout/route-compile |
273 | | - (str (first route) ":__path-info") |
274 | | - (merge (apply hash-map (rest route)) re-context)) |
| 283 | + (with-meta (clout/route-compile |
| 284 | + (str (first route) ":__path-info") |
| 285 | + (merge (apply hash-map (rest route)) re-context)) |
| 286 | + {:context-route (first route)}) |
275 | 287 | (vector? route) |
276 | | - `(clout/route-compile |
277 | | - (str ~(first route) ":__path-info") |
278 | | - ~(merge (apply hash-map (rest route)) re-context)) |
| 288 | + `(let [route# ~(first route)] |
| 289 | + (with-meta |
| 290 | + (clout/route-compile |
| 291 | + (str route# ":__path-info") |
| 292 | + ~(merge (apply hash-map (rest route)) re-context)) |
| 293 | + {:context-route route#})) |
279 | 294 | :else |
280 | | - `(clout/route-compile (str ~route ":__path-info") ~re-context)))) |
| 295 | + `(let [route# ~route] |
| 296 | + (with-meta |
| 297 | + (clout/route-compile (str route# ":__path-info") ~re-context) |
| 298 | + (if (string? route#) |
| 299 | + {:context-route route#} |
| 300 | + {})))))) |
281 | 301 |
|
282 | 302 | (defn ^:no-doc make-context [route make-handler] |
283 | 303 | (letfn [(handler |
|
0 commit comments