From d78a6852889a6d919ef89973ed848694fc9a5cb5 Mon Sep 17 00:00:00 2001 From: Carl Jackson Date: Sat, 22 Mar 2014 23:03:13 -0700 Subject: [PATCH] DRY up methods map --- web/router.go | 69 ++++++++++++++++----------------------------------- 1 file changed, 21 insertions(+), 48 deletions(-) diff --git a/web/router.go b/web/router.go index f3f63ae..f7b9de4 100644 --- a/web/router.go +++ b/web/router.go @@ -4,6 +4,7 @@ import ( "log" "net/http" "regexp" + "sort" "strings" "sync" ) @@ -30,6 +31,18 @@ const ( 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 { // Theory: most real world routes have a string prefix which is both // cheap(-ish) to test against and pretty selective. And, conveniently, @@ -116,28 +129,10 @@ func parseHandler(h interface{}) Handler { } 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) { @@ -163,35 +158,13 @@ func (rt *router) route(c C, w http.ResponseWriter, r *http.Request) { return } - // Oh god kill me now 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 { c.Env = map[string]interface{}{