Former-commit-id: 6ac95ef58bf3dd0dac8bed2100495fa9908f41d4
This commit is contained in:
Gerasimos (Makis) Maropoulos 2020-02-10 20:35:19 +02:00
parent 10f280af63
commit c558e039d5
3 changed files with 28 additions and 3 deletions

View File

@ -4,7 +4,7 @@ import (
"github.com/kataras/iris/v12" "github.com/kataras/iris/v12"
) )
func main() { func newApp() *iris.Application {
app := iris.New() app := iris.New()
v1 := app.Party("/api/v1") v1 := app.Party("/api/v1")
@ -15,7 +15,8 @@ func main() {
} }
onlyWhenFilter1 := func(ctx iris.Context) { onlyWhenFilter1 := func(ctx iris.Context) {
ctx.Application().Logger().Infof("admin: %s", ctx.Params()) ctx.Application().Logger().Infof("admin: %#+v", ctx.URLParams())
ctx.Writef("<title>Admin</title>\n")
ctx.Next() ctx.Next()
} }
@ -43,6 +44,12 @@ func main() {
ctx.HTML("requested: <b>/api/v1/users</b>") ctx.HTML("requested: <b>/api/v1/users</b>")
}) })
return app
}
func main() {
app := newApp()
// http://localhost:8080/api/v1/users // http://localhost:8080/api/v1/users
// http://localhost:8080/api/v1/users?admin=true // http://localhost:8080/api/v1/users?admin=true
app.Run(iris.Addr(":8080")) app.Run(iris.Addr(":8080"))

View File

@ -0,0 +1,17 @@
package main
import (
"testing"
"github.com/kataras/iris/v12/httptest"
)
func TestNewConditionalHandler(t *testing.T) {
app := newApp()
e := httptest.New(t, app)
e.GET("/api/v1/users").Expect().Status(httptest.StatusOK).
Body().Equal("requested: <b>/api/v1/users</b>")
e.GET("/api/v1/users").WithQuery("admin", "true").Expect().Status(httptest.StatusOK).
Body().Equal("<title>Admin</title>\n<h1>Hello Admin</h1><br>requested: <b>/api/v1/users</b>")
}

View File

@ -90,6 +90,7 @@ func NewConditionalHandler(filter Filter, handlers ...Handler) Handler {
// to check and modify the per-request handlers chain at runtime. // to check and modify the per-request handlers chain at runtime.
currIdx := ctx.HandlerIndex(-1) currIdx := ctx.HandlerIndex(-1)
currHandlers := ctx.Handlers() currHandlers := ctx.Handlers()
if currIdx == len(currHandlers)-1 { if currIdx == len(currHandlers)-1 {
// if this is the last handler of the chain // if this is the last handler of the chain
// just add to the last the new handlers and call Next to fire those. // just add to the last the new handlers and call Next to fire those.
@ -98,7 +99,7 @@ func NewConditionalHandler(filter Filter, handlers ...Handler) Handler {
return return
} }
// otherwise insert the new handlers in the middle of the current executed chain and the next chain. // otherwise insert the new handlers in the middle of the current executed chain and the next chain.
newHandlers := append(currHandlers[:currIdx], append(handlers, currHandlers[currIdx+1:]...)...) newHandlers := append(currHandlers[:currIdx+1], append(handlers, currHandlers[currIdx+1:]...)...)
ctx.SetHandlers(newHandlers) ctx.SetHandlers(newHandlers)
ctx.Next() ctx.Next()
return return