gosora/router_gen/route_group.go
Azareal f1c418bd13 Refactored the routing logic.
Continued refactoring the prequeries.
Continued work on the profiles.
Moved more logic out of the routes.
2017-11-12 07:18:25 +00:00

59 lines
1.3 KiB
Go

package main
type RouteGroup struct {
Path string
RouteList []*RouteImpl
RunBefore []Runnable
}
func newRouteGroup(path string, routes ...*RouteImpl) *RouteGroup {
group := &RouteGroup{Path: path}
for _, route := range routes {
route.Parent = group
group.RouteList = append(group.RouteList, route)
}
return group
}
func (group *RouteGroup) Not(path ...string) *RouteSubset {
routes := make([]*RouteImpl, len(group.RouteList))
copy(routes, group.RouteList)
for i, route := range routes {
if inStringList(route.Path, path) {
routes = append(routes[:i], routes[i+1:]...)
}
}
return &RouteSubset{routes}
}
func inStringList(needle string, list []string) bool {
for _, item := range list {
if item == needle {
return true
}
}
return false
}
func (group *RouteGroup) Before(lines ...string) *RouteGroup {
for _, line := range lines {
group.RunBefore = append(group.RunBefore, Runnable{line, false})
}
return group
}
func (group *RouteGroup) LitBefore(lines ...string) *RouteGroup {
for _, line := range lines {
group.RunBefore = append(group.RunBefore, Runnable{line, true})
}
return group
}
func (group *RouteGroup) Routes(routes ...*RouteImpl) *RouteGroup {
for _, route := range routes {
route.Parent = group
group.RouteList = append(group.RouteList, route)
}
return group
}