f1c418bd13
Continued refactoring the prequeries. Continued work on the profiles. Moved more logic out of the routes.
59 lines
1.3 KiB
Go
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
|
|
}
|