Browse Source

DRY up methods map

Carl Jackson 12 years ago
parent
commit
d78a685288
1 changed files with 21 additions and 48 deletions
  1. +21
    -48
      web/router.go

+ 21
- 48
web/router.go View File

@ -4,6 +4,7 @@ import (
"log" "log"
"net/http" "net/http"
"regexp" "regexp"
"sort"
"strings" "strings"
"sync" "sync"
) )
@ -30,6 +31,18 @@ const (
const validMethods = "goji.web.validMethods" const validMethods = "goji.web.validMethods"
var validMethodsMap = map[string]method{
"CONNECT": mCONNECT,
"DELETE": mDELETE,
"GET": mGET,
"HEAD": mHEAD,
"OPTIONS": mOPTIONS,
"PATCH": mPATCH,
"POST": mPOST,
"PUT": mPUT,
"TRACE": mTRACE,
}
type route struct { type route struct {
// Theory: most real world routes have a string prefix which is both // Theory: most real world routes have a string prefix which is both
// cheap(-ish) to test against and pretty selective. And, conveniently, // cheap(-ish) to test against and pretty selective. And, conveniently,
@ -116,28 +129,10 @@ func parseHandler(h interface{}) Handler {
} }
func httpMethod(mname string) method { func httpMethod(mname string) method {
switch strings.ToUpper(mname) {
case "CONNECT":
return mCONNECT
case "DELETE":
return mDELETE
case "GET":
return mGET
case "HEAD":
return mHEAD
case "OPTIONS":
return mOPTIONS
case "PATCH":
return mPATCH
case "POST":
return mPOST
case "PUT":
return mPUT
case "TRACE":
return mTRACE
default:
return mIDK
if method, ok := validMethodsMap[strings.ToUpper(mname)]; ok {
return method
} }
return mIDK
} }
func (rt *router) route(c C, w http.ResponseWriter, r *http.Request) { func (rt *router) route(c C, w http.ResponseWriter, r *http.Request) {
@ -163,35 +158,13 @@ func (rt *router) route(c C, w http.ResponseWriter, r *http.Request) {
return return
} }
// Oh god kill me now
var methodsList = make([]string, 0) var methodsList = make([]string, 0)
if methods&mCONNECT != 0 {
methodsList = append(methodsList, "CONNECT")
}
if methods&mDELETE != 0 {
methodsList = append(methodsList, "DELETE")
}
if methods&mGET != 0 {
methodsList = append(methodsList, "GET")
}
if methods&mHEAD != 0 {
methodsList = append(methodsList, "HEAD")
}
if methods&mOPTIONS != 0 {
methodsList = append(methodsList, "OPTIONS")
}
if methods&mPATCH != 0 {
methodsList = append(methodsList, "PATCH")
}
if methods&mPOST != 0 {
methodsList = append(methodsList, "POST")
}
if methods&mPUT != 0 {
methodsList = append(methodsList, "PUT")
}
if methods&mTRACE != 0 {
methodsList = append(methodsList, "TRACE")
for mname, meth := range validMethodsMap {
if methods&meth != 0 {
methodsList = append(methodsList, mname)
}
} }
sort.Strings(methodsList)
if c.Env == nil { if c.Env == nil {
c.Env = map[string]interface{}{ c.Env = map[string]interface{}{


Loading…
Cancel
Save