|
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-path 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-path 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 |
|
251 | 259 | (defn- remove-suffix [path suffix] |
252 | 260 | (subs path 0 (- (count path) (count suffix)))) |
253 | 261 |
|
254 | | -(defn- context-request [request route] |
| 262 | +(defn- context-request [request route context-path] |
255 | 263 | (if-let [params (clout/route-matches route request)] |
256 | 264 | (let [uri (:uri request) |
257 | 265 | path (:path-info request uri) |
|
261 | 269 | (-> request |
262 | 270 | (assoc-route-params (decode-route-params params)) |
263 | 271 | (assoc :path-info (if (= subpath "") "/" subpath) |
264 | | - :context (remove-suffix uri subpath)))))) |
| 272 | + :context (remove-suffix uri subpath)) |
| 273 | + (update :compojure/context-path (fn [ctx] (str ctx context-path))))))) |
265 | 274 |
|
266 | 275 | (defn- context-route [route] |
267 | 276 | (let [re-context {:__path-info #"|/.*"}] |
|
279 | 288 | :else |
280 | 289 | `(clout/route-compile (str ~route ":__path-info") ~re-context)))) |
281 | 290 |
|
282 | | -(defn ^:no-doc make-context [route make-handler] |
| 291 | +(defn ^:no-doc make-context [route path make-handler] |
283 | 292 | (letfn [(handler |
284 | 293 | ([request] |
285 | 294 | (when-let [context-handler (make-handler request)] |
|
292 | 301 | handler |
293 | 302 | (fn |
294 | 303 | ([request] |
295 | | - (if-let [request (context-request request route)] |
| 304 | + (if-let [request (context-request request route path)] |
296 | 305 | (handler request))) |
297 | 306 | ([request respond raise] |
298 | | - (if-let [request (context-request request route)] |
| 307 | + (if-let [request (context-request request route path)] |
299 | 308 | (handler request respond raise) |
300 | 309 | (respond nil))))))) |
301 | 310 |
|
|
311 | 320 | [path args & routes] |
312 | 321 | `(make-context |
313 | 322 | ~(context-route path) |
| 323 | + ~path |
314 | 324 | (fn [request#] |
315 | 325 | (let-request [~args request#] |
316 | 326 | (routes ~@routes))))) |
|
0 commit comments