|
134 | 134 | (defn- wrap-route-info [handler route-info] |
135 | 135 | (fn |
136 | 136 | ([request] |
137 | | - (let [full-route (str (:compojure/context request) (second route-info))] |
| 137 | + (let [full-route (str (:compojure/context-path request) (second route-info))] |
138 | 138 | (handler (assoc request |
139 | 139 | :compojure/route route-info |
140 | 140 | :compojure/full-route full-route)))) |
141 | 141 | ([request respond raise] |
142 | | - (let [full-route (str (:compojure/context request) (second route-info))] |
| 142 | + (let [full-route (str (:compojure/context-path request) (second route-info))] |
143 | 143 | (handler (assoc request |
144 | 144 | :compojure/route route-info |
145 | 145 | :compojure/full-route full-route) |
|
259 | 259 | (defn- remove-suffix [path suffix] |
260 | 260 | (subs path 0 (- (count path) (count suffix)))) |
261 | 261 |
|
262 | | -(defn- context-request [request route] |
| 262 | +(defn- context-request [request route context-path] |
263 | 263 | (if-let [params (clout/route-matches route request)] |
264 | 264 | (let [uri (:uri request) |
265 | | - path (:path-info request uri) |
266 | | - context (or (:context request) "") |
267 | 265 | subpath (:__path-info params) |
268 | | - params (dissoc params :__path-info) |
269 | | - context-route (:context-route (meta route))] |
| 266 | + params (dissoc params :__path-info)] |
270 | 267 | (-> request |
271 | 268 | (assoc-route-params (decode-route-params params)) |
272 | 269 | (assoc :path-info (if (= subpath "") "/" subpath) |
273 | 270 | :context (remove-suffix uri subpath)) |
274 | | - (update :compojure/context (fn [ctx] (str ctx context-route))))))) |
| 271 | + (update :compojure/context-path (fn [ctx] (str ctx context-path))))))) |
275 | 272 |
|
276 | 273 | (defn- context-route [route] |
277 | 274 | (let [re-context {:__path-info #"|/.*"}] |
278 | 275 | (cond |
279 | 276 | (string? route) |
280 | | - (with-meta (clout/route-compile (str route ":__path-info") re-context) |
281 | | - {:context-route route}) |
| 277 | + (clout/route-compile (str route ":__path-info") re-context) |
282 | 278 | (and (vector? route) (literal? route)) |
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)}) |
| 279 | + (clout/route-compile |
| 280 | + (str (first route) ":__path-info") |
| 281 | + (merge (apply hash-map (rest route)) re-context)) |
287 | 282 | (vector? route) |
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#})) |
| 283 | + `(clout/route-compile |
| 284 | + (str ~(first route) ":__path-info") |
| 285 | + ~(merge (apply hash-map (rest route)) re-context)) |
294 | 286 | :else |
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 | | - {})))))) |
301 | | - |
302 | | -(defn ^:no-doc make-context [route make-handler] |
| 287 | + `(clout/route-compile (str ~route ":__path-info") ~re-context)))) |
| 288 | + |
| 289 | +(defn ^:no-doc make-context [route path make-handler] |
303 | 290 | (letfn [(handler |
304 | 291 | ([request] |
305 | 292 | (when-let [context-handler (make-handler request)] |
|
312 | 299 | handler |
313 | 300 | (fn |
314 | 301 | ([request] |
315 | | - (if-let [request (context-request request route)] |
| 302 | + (if-let [request (context-request request route path)] |
316 | 303 | (handler request))) |
317 | 304 | ([request respond raise] |
318 | | - (if-let [request (context-request request route)] |
| 305 | + (if-let [request (context-request request route path)] |
319 | 306 | (handler request respond raise) |
320 | 307 | (respond nil))))))) |
321 | 308 |
|
|
331 | 318 | [path args & routes] |
332 | 319 | `(make-context |
333 | 320 | ~(context-route path) |
| 321 | + ~path |
334 | 322 | (fn [request#] |
335 | 323 | (let-request [~args request#] |
336 | 324 | (routes ~@routes))))) |
|
0 commit comments