From 5cd369fde7df9ec1fef2d2c1ba47d2b2f1bf3471 Mon Sep 17 00:00:00 2001 From: Alexandre Terrasa Date: Wed, 20 Apr 2016 00:53:47 -0400 Subject: [PATCH 1/1] nitcorn: fix path resolution for vararg routes Signed-off-by: Alexandre Terrasa --- lib/nitcorn/reactor.nit | 2 +- lib/nitcorn/vararg_routes.nit | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/nitcorn/reactor.nit b/lib/nitcorn/reactor.nit index e888361..88d1cbd 100644 --- a/lib/nitcorn/reactor.nit +++ b/lib/nitcorn/reactor.nit @@ -72,7 +72,7 @@ class HttpServer request.uri_params = route.parse_params(request.uri) var handler = route.handler - var root = route.path + var root = route.resolve_path(request) var turi if root != null then turi = ("/" + request.uri.substring_from(root.length)).simplify_path diff --git a/lib/nitcorn/vararg_routes.nit b/lib/nitcorn/vararg_routes.nit index 9099284..f1a1630 100644 --- a/lib/nitcorn/vararg_routes.nit +++ b/lib/nitcorn/vararg_routes.nit @@ -108,6 +108,20 @@ redef class Route parse_pattern(path) end + # Replace `self.path` parameters with concrete values from the `request` URI. + fun resolve_path(request: HttpRequest): nullable String do + if pattern_parts.is_empty then return self.path + var path = "/" + for part in pattern_parts do + if part isa UriString then + path /= part.string + else if part isa UriParam then + path /= request.param(part.name) or else part.name + end + end + return path + end + # Cut `path` into `UriParts`. private fun parse_pattern(path: nullable String) do if path == null then return -- 1.7.9.5