So the user can force some middlewares to be called before the other handlers.
Signed-off-by: Alexandre Terrasa <alexandre@moz-code.org>
# List of handlers to match with requests.
private var handlers = new Map[AppRoute, Handler]
# 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.
# Register a `handler` for a route `path`.
#
# Route paths are matched in registration order.
handlers[route] = handler
end
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
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)
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
end
private fun handle_in(route: AppRoute, uri: String, req: HttpRequest, res: HttpResponse) do