Merge branch 'routes-list'
This commit is contained in:
		
							
								
								
									
										2
									
								
								debug.go
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								debug.go
									
									
									
									
									
								
							@ -16,7 +16,7 @@ func IsDebugging() bool {
 | 
				
			|||||||
func debugPrintRoute(httpMethod, absolutePath string, handlers HandlersChain) {
 | 
					func debugPrintRoute(httpMethod, absolutePath string, handlers HandlersChain) {
 | 
				
			||||||
	if IsDebugging() {
 | 
						if IsDebugging() {
 | 
				
			||||||
		nuHandlers := len(handlers)
 | 
							nuHandlers := len(handlers)
 | 
				
			||||||
		handlerName := nameOfFunction(handlers[nuHandlers-1])
 | 
							handlerName := nameOfFunction(handlers.Last())
 | 
				
			||||||
		debugPrint("%-5s %-25s --> %s (%d handlers)\n", httpMethod, absolutePath, handlerName, nuHandlers)
 | 
							debugPrint("%-5s %-25s --> %s (%d handlers)\n", httpMethod, absolutePath, handlerName, nuHandlers)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										36
									
								
								gin.go
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								gin.go
									
									
									
									
									
								
							@ -61,8 +61,22 @@ type (
 | 
				
			|||||||
		HandleMethodNotAllowed bool
 | 
							HandleMethodNotAllowed bool
 | 
				
			||||||
		ForwardedByClientIP    bool
 | 
							ForwardedByClientIP    bool
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						RouteInfo struct {
 | 
				
			||||||
 | 
							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.
 | 
					// Returns a new blank Engine instance without any middleware attached.
 | 
				
			||||||
// The most basic configuration
 | 
					// The most basic configuration
 | 
				
			||||||
func New() *Engine {
 | 
					func New() *Engine {
 | 
				
			||||||
@ -181,6 +195,28 @@ func (engine *Engine) addRoute(method, path string, handlers HandlersChain) {
 | 
				
			|||||||
	root.addRoute(path, handlers)
 | 
						root.addRoute(path, handlers)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (engine *Engine) Routes() (routes []RouteInfo) {
 | 
				
			||||||
 | 
						for _, tree := range engine.trees {
 | 
				
			||||||
 | 
							routes = iterate("", tree.method, routes, tree.root)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return routes
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func iterate(path, method string, routes []RouteInfo, root *node) []RouteInfo {
 | 
				
			||||||
 | 
						path += root.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, method, routes, node)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return routes
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// The router is attached to a http.Server and starts listening and serving HTTP requests.
 | 
					// The router is attached to a http.Server and starts listening and serving HTTP requests.
 | 
				
			||||||
// It is a shortcut for http.ListenAndServe(addr, router)
 | 
					// It is a shortcut for http.ListenAndServe(addr, router)
 | 
				
			||||||
// Note: this method will block the calling goroutine undefinitelly unless an error happens.
 | 
					// Note: this method will block the calling goroutine undefinitelly unless an error happens.
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										48
									
								
								gin_test.go
									
									
									
									
									
								
							
							
						
						
									
										48
									
								
								gin_test.go
									
									
									
									
									
								
							@ -14,7 +14,6 @@ import (
 | 
				
			|||||||
//TODO
 | 
					//TODO
 | 
				
			||||||
// func (engine *Engine) LoadHTMLGlob(pattern string) {
 | 
					// func (engine *Engine) LoadHTMLGlob(pattern string) {
 | 
				
			||||||
// func (engine *Engine) LoadHTMLFiles(files ...string) {
 | 
					// func (engine *Engine) LoadHTMLFiles(files ...string) {
 | 
				
			||||||
// func (engine *Engine) Run(addr string) error {
 | 
					 | 
				
			||||||
// func (engine *Engine) RunTLS(addr string, cert string, key string) error {
 | 
					// func (engine *Engine) RunTLS(addr string, cert string, key string) error {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func init() {
 | 
					func init() {
 | 
				
			||||||
@ -180,3 +179,50 @@ func compareFunc(t *testing.T, a, b interface{}) {
 | 
				
			|||||||
		t.Error("different functions")
 | 
							t.Error("different functions")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestListOfRoutes(t *testing.T) {
 | 
				
			||||||
 | 
						handler := func(c *Context) {}
 | 
				
			||||||
 | 
						router := New()
 | 
				
			||||||
 | 
						router.GET("/favicon.ico", handler)
 | 
				
			||||||
 | 
						router.GET("/", handler)
 | 
				
			||||||
 | 
						group := router.Group("/users")
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							group.GET("/", handler)
 | 
				
			||||||
 | 
							group.GET("/:id", handler)
 | 
				
			||||||
 | 
							group.POST("/:id", handler)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						router.Static("/static", ".")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						list := router.Routes()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						assert.Len(t, list, 7)
 | 
				
			||||||
 | 
						assert.Contains(t, list, RouteInfo{
 | 
				
			||||||
 | 
							Method: "GET",
 | 
				
			||||||
 | 
							Path:   "/favicon.ico",
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						assert.Contains(t, list, RouteInfo{
 | 
				
			||||||
 | 
							Method: "GET",
 | 
				
			||||||
 | 
							Path:   "/",
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						assert.Contains(t, list, RouteInfo{
 | 
				
			||||||
 | 
							Method: "GET",
 | 
				
			||||||
 | 
							Path:   "/users/",
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						assert.Contains(t, list, RouteInfo{
 | 
				
			||||||
 | 
							Method: "GET",
 | 
				
			||||||
 | 
							Path:   "/users/:id",
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						assert.Contains(t, list, RouteInfo{
 | 
				
			||||||
 | 
							Method: "POST",
 | 
				
			||||||
 | 
							Path:   "/users/:id",
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						assert.Contains(t, list, RouteInfo{
 | 
				
			||||||
 | 
							Method: "GET",
 | 
				
			||||||
 | 
							Path:   "/static/*filepath",
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						assert.Contains(t, list, RouteInfo{
 | 
				
			||||||
 | 
							Method: "HEAD",
 | 
				
			||||||
 | 
							Path:   "/static/*filepath",
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user