From 53470c705206bc2f93f855927a65fdd262f4da8d Mon Sep 17 00:00:00 2001 From: Alexandre Terrasa Date: Mon, 23 May 2016 16:51:55 -0400 Subject: [PATCH] lib/popcorn: introduce Router::use_before service So the user can force some middlewares to be called before the other handlers. Signed-off-by: Alexandre Terrasa --- lib/popcorn/pop_handlers.nit | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/lib/popcorn/pop_handlers.nit b/lib/popcorn/pop_handlers.nit index 2f438ef..897b3ba 100644 --- a/lib/popcorn/pop_handlers.nit +++ b/lib/popcorn/pop_handlers.nit @@ -307,6 +307,9 @@ class Router # List of handlers to match with requests. private var handlers = new Map[AppRoute, Handler] + # List of handlers to match before every other. + private var pre_handlers = new Map[AppRoute, Handler] + # Register a `handler` for a route `path`. # # Route paths are matched in registration order. @@ -315,9 +318,23 @@ class Router handlers[route] = handler end + # Register a pre-handler for a route `path`. + # + # Prehandlers are matched before every other handlers in registrastion order. + fun use_before(path: String, handler: Handler) do + var route = build_route(handler, path) + pre_handlers[route] = handler + end + redef fun handle(route, uri, req, res) do if not route.match(uri) then return + handle_pre(route, uri, req, res) handle_in(route, uri, req, res) + + private fun handle_pre(route: AppRoute, uri: String, req: HttpRequest, res: HttpResponse) do + for hroute, handler in pre_handlers do + handler.handle(hroute, route.uri_root(uri), req, res) + end end private fun handle_in(route: AppRoute, uri: String, req: HttpRequest, res: HttpResponse) do -- 1.7.9.5