X-Git-Url: http://nitlanguage.org diff --git a/lib/popcorn/pop_handlers.nit b/lib/popcorn/pop_handlers.nit index 897b3ba..5d84961 100644 --- a/lib/popcorn/pop_handlers.nit +++ b/lib/popcorn/pop_handlers.nit @@ -235,10 +235,16 @@ class StaticHandler # Static files directory to serve. var static_dir: String + # Default file to serve if nothing matches the request. + # + # `null` for no default file. + var default_file: nullable String + # Internal file server used to lookup and render files. var file_server: FileServer is lazy do var srv = new FileServer(static_dir) srv.show_directory_listing = false + srv.default_file = default_file return srv end @@ -310,6 +316,9 @@ class Router # List of handlers to match before every other. private var pre_handlers = new Map[AppRoute, Handler] + # List of handlers to match after every other. + private var post_handlers = new Map[AppRoute, Handler] + # Register a `handler` for a route `path`. # # Route paths are matched in registration order. @@ -326,10 +335,20 @@ class Router pre_handlers[route] = handler end + # Register a post-handler for a route `path`. + # + # Posthandlers are matched after every other handlers in registrastion order. + fun use_after(path: String, handler: Handler) do + var route = build_route(handler, path) + post_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) + handle_post(route, uri, req, res) + end private fun handle_pre(route: AppRoute, uri: String, req: HttpRequest, res: HttpResponse) do for hroute, handler in pre_handlers do @@ -344,6 +363,12 @@ class Router end end + private fun handle_post(route: AppRoute, uri: String, req: HttpRequest, res: HttpResponse) do + for hroute, handler in post_handlers do + handler.handle(hroute, route.uri_root(uri), req, res) + end + end + private fun build_route(handler: Handler, path: String): AppRoute do if handler isa Router or handler isa StaticHandler then return new AppGlobRoute(path)