mirror of
https://github.com/kataras/iris.git
synced 2025-02-02 15:30:36 +01:00
Former-commit-id: 5ade70e6133406c8bbb4ecef36541fdd0d857f6f
This commit is contained in:
parent
67341251b8
commit
5cbc3d6827
|
@ -1,4 +1,4 @@
|
||||||
## I'm working hard on the [dev](https://github.com/kataras/iris/tree/dev) branch for the next release of Iris, v9.
|
## I'm working hard on the [dev](https://github.com/kataras/iris/tree/dev) branch for the next release of Iris.
|
||||||
|
|
||||||
Do you remember, last Christmas? I did publish the version 6 with net/http and HTTP/2 support, and you've embraced Iris with so much love, ultimately it was a successful move.
|
Do you remember, last Christmas? I did publish the version 6 with net/http and HTTP/2 support, and you've embraced Iris with so much love, ultimately it was a successful move.
|
||||||
|
|
||||||
|
|
|
@ -199,14 +199,12 @@ func (api *APIBuilder) Handle(method string, relativePath string, handlers ...co
|
||||||
// This method is used behind the scenes at the `Controller` function
|
// This method is used behind the scenes at the `Controller` function
|
||||||
// in order to handle more than one paths for the same controller instance.
|
// in order to handle more than one paths for the same controller instance.
|
||||||
func (api *APIBuilder) HandleMany(methodOrMulti string, relativePathorMulti string, handlers ...context.Handler) (routes []*Route) {
|
func (api *APIBuilder) HandleMany(methodOrMulti string, relativePathorMulti string, handlers ...context.Handler) (routes []*Route) {
|
||||||
trimmedPath := strings.Trim(relativePathorMulti, " ")
|
|
||||||
trimmedMethod := strings.Trim(methodOrMulti, " ")
|
|
||||||
// at least slash
|
// at least slash
|
||||||
// a space
|
// a space
|
||||||
// at least one other slash for the next path
|
// at least one other slash for the next path
|
||||||
// app.Controller("/user /user{id}", new(UserController))
|
// app.Controller("/user /user{id}", new(UserController))
|
||||||
paths := strings.Split(trimmedPath, " ")
|
paths := splitPath(relativePathorMulti)
|
||||||
methods := strings.Split(trimmedMethod, " ")
|
methods := splitMethod(methodOrMulti)
|
||||||
for _, p := range paths {
|
for _, p := range paths {
|
||||||
if p != "" {
|
if p != "" {
|
||||||
for _, method := range methods {
|
for _, method := range methods {
|
||||||
|
|
|
@ -45,6 +45,26 @@ func suffix(s string, suffix string) string {
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func splitMethod(methodMany string) []string {
|
||||||
|
methodMany = strings.Trim(methodMany, " ")
|
||||||
|
return strings.Split(methodMany, " ")
|
||||||
|
}
|
||||||
|
|
||||||
|
func splitPath(pathMany string) (paths []string) {
|
||||||
|
pathMany = strings.Trim(pathMany, " ")
|
||||||
|
pathsWithoutSlashFromFirstAndSoOn := strings.Split(pathMany, " /")
|
||||||
|
for _, path := range pathsWithoutSlashFromFirstAndSoOn {
|
||||||
|
if path == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if path[0] != '/' {
|
||||||
|
path = "/" + path
|
||||||
|
}
|
||||||
|
paths = append(paths, path)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func joinPath(path1 string, path2 string) string {
|
func joinPath(path1 string, path2 string) string {
|
||||||
return path.Join(path1, path2)
|
return path.Join(path1, path2)
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,44 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func TestSplitPath(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
path string
|
||||||
|
expected []string
|
||||||
|
}{
|
||||||
|
{"/v2/stores/{id:string format(uuid)} /v3",
|
||||||
|
[]string{"/v2/stores/{id:string format(uuid)}", "/v3"}},
|
||||||
|
{"/user/{id:int} /admin/{id:int}",
|
||||||
|
[]string{"/user/{id:int}", "/admin/{id:int}"}},
|
||||||
|
{"/user /admin",
|
||||||
|
[]string{"/user", "/admin"}},
|
||||||
|
{"/single_no_params",
|
||||||
|
[]string{"/single_no_params"}},
|
||||||
|
{"/single/{id:int}",
|
||||||
|
[]string{"/single/{id:int}"}},
|
||||||
|
}
|
||||||
|
|
||||||
|
equalSlice := func(s1 []string, s2 []string) bool {
|
||||||
|
if len(s1) != len(s2) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := range s1 {
|
||||||
|
if s2[i] != s1[i] {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
for i, tt := range tests {
|
||||||
|
paths := splitPath(tt.path)
|
||||||
|
if expected, got := tt.expected, paths; !equalSlice(expected, got) {
|
||||||
|
t.Fatalf("[%d] - expected paths '%#v' but got '%#v'", i, expected, got)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
func TestSplitSubdomainAndPath(t *testing.T) {
|
func TestSplitSubdomainAndPath(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
original string
|
original string
|
||||||
|
|
Loading…
Reference in New Issue
Block a user