Skip to content

Commit

Permalink
Routes() returns the function name of the main handler
Browse files Browse the repository at this point in the history
  • Loading branch information
manucorporat committed Jun 7, 2015
1 parent c7d2d82 commit 74fe36f
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 13 deletions.
2 changes: 1 addition & 1 deletion debug.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ func IsDebugging() bool {
func debugPrintRoute(httpMethod, absolutePath string, handlers HandlersChain) {
if IsDebugging() {
nuHandlers := len(handlers)
handlerName := nameOfFunction(handlers[nuHandlers-1])
handlerName := nameOfFunction(handlers.Last())
debugPrint("%-5s %-25s --> %s (%d handlers)\n", httpMethod, absolutePath, handlerName, nuHandlers)
}
}
Expand Down
32 changes: 20 additions & 12 deletions gin.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,11 +62,20 @@ type (
}

RouteInfo struct {
Method string
Path string
Method string
Path string
Handler string
}
)

func (c HandlersChain) Last() HandlerFunc {
length := len(c)
if length > 0 {
return c[length-1]
}
return nil
}

// Returns a new blank Engine instance without any middleware attached.
// The most basic configuration
func New() *Engine {
Expand Down Expand Up @@ -176,23 +185,22 @@ func (engine *Engine) addRoute(method, path string, handlers HandlersChain) {

func (engine *Engine) Routes() (routes []RouteInfo) {
for _, tree := range engine.trees {
for _, path := range iterate("", nil, tree.root) {
routes = append(routes, RouteInfo{
Method: tree.method,
Path: path,
})
}
routes = iterate("", tree.method, routes, tree.root)
}
return routes
}

func iterate(path string, routes []string, root *node) []string {
func iterate(path, method string, routes []RouteInfo, root *node) []RouteInfo {
path += root.path
if root.handlers != nil {
routes = append(routes, path)
if len(root.handlers) > 0 {
routes = append(routes, RouteInfo{
Method: method,
Path: path,
Handler: nameOfFunction(root.handlers.Last()),
})
}
for _, node := range root.children {
routes = iterate(path, routes, node)
routes = iterate(path, method, routes, node)
}
return routes
}
Expand Down

0 comments on commit 74fe36f

Please sign in to comment.