|
132 | 132 | (handler request respond raise))))) |
133 | 133 |
|
134 | 134 | (defn- wrap-route-info [handler route-info] |
135 | | - (fn |
136 | | - ([request] |
137 | | - (handler (assoc request :compojure/route route-info))) |
138 | | - ([request respond raise] |
139 | | - (handler (assoc request :compojure/route route-info) respond raise)))) |
| 135 | + (let [[_ path] route-info] |
| 136 | + (fn |
| 137 | + ([request] |
| 138 | + (let [full-route (str (:compojure/route-context request) path)] |
| 139 | + (handler (assoc request |
| 140 | + :compojure/route route-info |
| 141 | + :compojure/full-route full-route)))) |
| 142 | + ([request respond raise] |
| 143 | + (let [full-route (str (:compojure/route-context request) path)] |
| 144 | + (handler (assoc request |
| 145 | + :compojure/route route-info |
| 146 | + :compojure/full-route full-route) |
| 147 | + respond |
| 148 | + raise)))))) |
140 | 149 |
|
141 | 150 | (defn- wrap-route-matches [handler method path] |
142 | 151 | (fn |
|
251 | 260 | (defn- remove-suffix [path suffix] |
252 | 261 | (subs path 0 (- (count path) (count suffix)))) |
253 | 262 |
|
254 | | -(defn- context-request [request route] |
| 263 | +(defn- context-request [request route context-path] |
255 | 264 | (if-let [params (clout/route-matches route request)] |
256 | 265 | (let [uri (:uri request) |
257 | 266 | path (:path-info request uri) |
|
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/route-context str context-path))))) |
265 | 275 |
|
266 | 276 | (defn- context-route [route] |
267 | 277 | (let [re-context {:__path-info #"|/.*"}] |
|
279 | 289 | :else |
280 | 290 | `(clout/route-compile (str ~route ":__path-info") ~re-context)))) |
281 | 291 |
|
282 | | -(defn ^:no-doc make-context [route make-handler] |
| 292 | +(defn ^:no-doc make-context [route path make-handler] |
283 | 293 | (letfn [(handler |
284 | 294 | ([request] |
285 | 295 | (when-let [context-handler (make-handler request)] |
|
292 | 302 | handler |
293 | 303 | (fn |
294 | 304 | ([request] |
295 | | - (if-let [request (context-request request route)] |
| 305 | + (if-let [request (context-request request route path)] |
296 | 306 | (handler request))) |
297 | 307 | ([request respond raise] |
298 | | - (if-let [request (context-request request route)] |
| 308 | + (if-let [request (context-request request route path)] |
299 | 309 | (handler request respond raise) |
300 | 310 | (respond nil))))))) |
301 | 311 |
|
|
311 | 321 | [path args & routes] |
312 | 322 | `(make-context |
313 | 323 | ~(context-route path) |
| 324 | + ~path |
314 | 325 | (fn [request#] |
315 | 326 | (let-request [~args request#] |
316 | 327 | (routes ~@routes))))) |
|
0 commit comments