mirror of
https://github.com/kataras/iris.git
synced 2025-03-14 08:16:28 +01:00
allow handle same param path types with different macro functions as well, a use case: #1058
Former-commit-id: e7dcc5c0d9a2e3569e0f49303ff342bb8748baf5
This commit is contained in:
parent
c6099a3c3b
commit
0a29c2bfc8
|
@ -142,7 +142,9 @@ func (repo *repository) getAll() []*Route {
|
||||||
|
|
||||||
func (repo *repository) register(route *Route) {
|
func (repo *repository) register(route *Route) {
|
||||||
for i, r := range repo.routes {
|
for i, r := range repo.routes {
|
||||||
if route.Equal(r) {
|
// 14 August 2019 allow register same path pattern with different macro functions,
|
||||||
|
// see #1058
|
||||||
|
if route.DeepEqual(r) {
|
||||||
// replace existing with the latest one.
|
// replace existing with the latest one.
|
||||||
repo.routes = append(repo.routes[:i], repo.routes[i+1:]...)
|
repo.routes = append(repo.routes[:i], repo.routes[i+1:]...)
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -234,10 +234,10 @@ func splitSubdomainAndPath(fullUnparsedPath string) (subdomain string, path stri
|
||||||
slashIdx := strings.IndexByte(s, '/')
|
slashIdx := strings.IndexByte(s, '/')
|
||||||
if slashIdx == 0 {
|
if slashIdx == 0 {
|
||||||
// no subdomain
|
// no subdomain
|
||||||
return "", cleanPath(s)
|
return "", s // cleanPath(s)
|
||||||
}
|
}
|
||||||
|
|
||||||
return s[0:slashIdx], cleanPath(s[slashIdx:]) // return subdomain without slash, path with slash
|
return s[0:slashIdx], s[slashIdx:] // cleanPath(s[slashIdx:]) // return subdomain without slash, path with slash
|
||||||
}
|
}
|
||||||
|
|
||||||
// RoutePathReverserOption option signature for the RoutePathReverser.
|
// RoutePathReverserOption option signature for the RoutePathReverser.
|
||||||
|
|
|
@ -80,6 +80,7 @@ func NewRoute(method, subdomain, unparsedPath, mainHandlerName string,
|
||||||
MainHandlerName: mainHandlerName,
|
MainHandlerName: mainHandlerName,
|
||||||
FormattedPath: formattedPath,
|
FormattedPath: formattedPath,
|
||||||
}
|
}
|
||||||
|
|
||||||
return route, nil
|
return route, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -157,13 +158,20 @@ func (r Route) String() string {
|
||||||
r.Method, r.Subdomain, r.Tmpl().Src)
|
r.Method, r.Subdomain, r.Tmpl().Src)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Equal compares the method, subdomaind and the
|
// Equal compares the method, subdomain and the
|
||||||
// underline representation of the route's path,
|
// underline representation of the route's path,
|
||||||
// instead of the `String` function which returns the front representation.
|
// instead of the `String` function which returns the front representation.
|
||||||
func (r *Route) Equal(other *Route) bool {
|
func (r *Route) Equal(other *Route) bool {
|
||||||
return r.Method == other.Method && r.Subdomain == other.Subdomain && r.Path == other.Path
|
return r.Method == other.Method && r.Subdomain == other.Subdomain && r.Path == other.Path
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DeepEqual compares the method, subdomain, the
|
||||||
|
// underline representation of the route's path,
|
||||||
|
// and the template source.
|
||||||
|
func (r *Route) DeepEqual(other *Route) bool {
|
||||||
|
return r.Equal(other) && r.tmpl.Src == other.tmpl.Src
|
||||||
|
}
|
||||||
|
|
||||||
// Tmpl returns the path template,
|
// Tmpl returns the path template,
|
||||||
// it contains the parsed template
|
// it contains the parsed template
|
||||||
// for the route's path.
|
// for the route's path.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user