// // Copyright (c) 2008, Brian Frank and Andy Frank // Licensed under the Academic Free License version 3.0 // // History: // 27 Nov 08 Brian Frank Creation // using web ** ** RouteMod routes a level of the URI path to sub-WebMods. ** ** See [pod doc]`pod-doc#route` ** const class RouteMod : WebMod { ** ** Constructor with it-block. ** new make(|This|? f) { f?.call(this) if (routes.isEmpty) throw ArgErr("RouteMod.routes is empty") } ** ** Map of URI path names to sub-WebMods. The name "index" ** is used for requests to the RouteMod itself. ** const [Str:WebMod] routes := Str:WebMod[:] override Void onService() { // get the next name in the path name := req.modRel.path.first // lookup route, if not found this is 404 route := routes[name ?: "index"] if (route == null) { res.sendErr(404); return } // dive into sub-WebMod req.mod = route if (name != null) req.modBase = req.modBase + `$name/` route.onService } ** ** Call 'onStart' on sub-mods. ** override Void onStart() { routes.each |mod| { mod.onStart } } ** ** Call 'onStop' on sub-mods. ** override Void onStop() { routes.each |mod| { mod.onStop } } }