Browse Source

comply the captital HTTP method

tags/v0.9.0
jimzhan 9 years ago
parent
commit
0e911fd740
3 changed files with 70 additions and 58 deletions
  1. +5
    -5
      example/main.go
  2. +49
    -37
      server.go
  3. +16
    -16
      server_test.go

+ 5
- 5
example/main.go View File

func main() { func main() {
app := rex.New() app := rex.New()
app.Use(livereload.Middleware) app.Use(livereload.Middleware)
app.Get("/", Index)
app.GET("/", Index)


api := app.Group("/v1/") api := app.Group("/v1/")
api.Use(JSON) api.Use(JSON)
api.Get("/", fetch)
api.Post("/", create)
api.Put("/", update)
api.Delete("/", remove)
api.GET("/", fetch)
api.POST("/", create)
api.PUT("/", update)
api.DELETE("/", remove)


app.Run() app.Run()
} }

+ 49
- 37
server.go View File

self.register(pattern, handler, "GET", "POST", "PUT", "DELETE", "OPTIONS", "HEAD") self.register(pattern, handler, "GET", "POST", "PUT", "DELETE", "OPTIONS", "HEAD")
} }


// Get is a shortcut for mux.HandleFunc(pattern, handler).Methods("GET"),
// it also fetch the full function name of the handler (with package) to name the route.
func (self *Server) Get(pattern string, handler interface{}) {
self.register(pattern, handler, "GET")
}

// Head is a shortcut for mux.HandleFunc(pattern, handler).Methods("HEAD")
// it also fetch the full function name of the handler (with package) to name the route.
func (self *Server) Head(pattern string, handler interface{}) {
self.register(pattern, handler, "HEAD")
}

// Options is a shortcut for mux.HandleFunc(pattern, handler).Methods("OPTIONS")
// it also fetch the full function name of the handler (with package) to name the route.
// NOTE method OPTIONS is **NOT** cachable, beware of what you are going to do.
func (self *Server) Options(pattern string, handler interface{}) {
self.register(pattern, handler, "OPTIONS")
}

// Post is a shortcut for mux.HandleFunc(pattern, handler).Methods("POST")
// it also fetch the full function name of the handler (with package) to name the route.
func (self *Server) Post(pattern string, handler interface{}) {
self.register(pattern, handler, "POST")
}

// Put is a shortcut for mux.HandleFunc(pattern, handler).Methods("PUT")
// it also fetch the full function name of the handler (with package) to name the route.
func (self *Server) Put(pattern string, handler interface{}) {
self.register(pattern, handler, "PUT")
}

// Delete is a shortcut for mux.HandleFunc(pattern, handler).Methods("DELETE")
// it also fetch the full function name of the handler (with package) to name the route.
func (self *Server) Delete(pattern string, handler interface{}) {
self.register(pattern, handler, "DELETE")
}

// Group creates a new application group under the given path prefix. // Group creates a new application group under the given path prefix.
func (self *Server) Group(prefix string) *Server { func (self *Server) Group(prefix string) *Server {
var middleware = new(middleware) var middleware = new(middleware)
self.middleware.stack = append(self.middleware.stack, module) self.middleware.stack = append(self.middleware.stack, module)
} }


// GET is a shortcut for mux.HandleFunc(pattern, handler).Methods("GET"),
// it also fetch the full function name of the handler (with package) to name the route.
func (self *Server) GET(pattern string, handler interface{}) {
self.register(pattern, handler, "GET")
}

// HEAD is a shortcut for mux.HandleFunc(pattern, handler).Methods("HEAD")
// it also fetch the full function name of the handler (with package) to name the route.
func (self *Server) HEAD(pattern string, handler interface{}) {
self.register(pattern, handler, "HEAD")
}

// OPTIONS is a shortcut for mux.HandleFunc(pattern, handler).Methods("OPTIONS")
// it also fetch the full function name of the handler (with package) to name the route.
// NOTE method OPTIONS is **NOT** cachable, beware of what you are going to do.
func (self *Server) OPTIONS(pattern string, handler interface{}) {
self.register(pattern, handler, "OPTIONS")
}

// POST is a shortcut for mux.HandleFunc(pattern, handler).Methods("POST")
// it also fetch the full function name of the handler (with package) to name the route.
func (self *Server) POST(pattern string, handler interface{}) {
self.register(pattern, handler, "POST")
}

// PUT is a shortcut for mux.HandleFunc(pattern, handler).Methods("PUT")
// it also fetch the full function name of the handler (with package) to name the route.
func (self *Server) PUT(pattern string, handler interface{}) {
self.register(pattern, handler, "PUT")
}

// DELETE is a shortcut for mux.HandleFunc(pattern, handler).Methods("DELETE")
// it also fetch the full function name of the handler (with package) to name the route.
func (self *Server) DELETE(pattern string, handler interface{}) {
self.register(pattern, handler, "DELETE")
}

// TRACE is a shortcut for mux.HandleFunc(pattern, handler).Methods("TRACE")
// it also fetch the full function name of the handler (with package) to name the route.
func (self *Server) TRACE(pattern string, handler interface{}) {
self.register(pattern, handler, "TRACE")
}

// CONNECT is a shortcut for mux.HandleFunc(pattern, handler).Methods("CONNECT")
// it also fetch the full function name of the handler (with package) to name the route.
func (self *Server) CONNECT(pattern string, handler interface{}) {
self.register(pattern, handler, "CONNECT")
}

// ServeHTTP dispatches the request to the handler whose // ServeHTTP dispatches the request to the handler whose
// pattern most closely matches the request URL. // pattern most closely matches the request URL.
func (self *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { func (self *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {

+ 16
- 16
server_test.go View File

}) })
} }


func TestGet(t *testing.T) {
func TestGET(t *testing.T) {
app := New() app := New()
app.Get("/", func(w http.ResponseWriter, r *http.Request) {
app.GET("/", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("X-Powered-By", "rex") w.Header().Set("X-Powered-By", "rex")
w.Header().Set("Content-Type", "application/json") w.Header().Set("Content-Type", "application/json")
}) })


Convey("rex.Get", t, func() {
Convey("rex.GET", t, func() {
request, _ := http.NewRequest("GET", "/", nil) request, _ := http.NewRequest("GET", "/", nil)
response := httptest.NewRecorder() response := httptest.NewRecorder()


}) })
} }


func TestPost(t *testing.T) {
func TestPOST(t *testing.T) {
app := New() app := New()
app.Post("/", func(w http.ResponseWriter, r *http.Request) {
app.POST("/", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("X-Powered-By", "rex") w.Header().Set("X-Powered-By", "rex")
w.Header().Set("Content-Type", "application/json") w.Header().Set("Content-Type", "application/json")
}) })


Convey("rex.Post", t, func() {
Convey("rex.POST", t, func() {
request, _ := http.NewRequest("POST", "/", nil) request, _ := http.NewRequest("POST", "/", nil)
response := httptest.NewRecorder() response := httptest.NewRecorder()


}) })
} }


func TestPut(t *testing.T) {
func TestPUT(t *testing.T) {
app := New() app := New()
app.Put("/", func(w http.ResponseWriter, r *http.Request) {
app.PUT("/", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("X-Powered-By", "rex") w.Header().Set("X-Powered-By", "rex")
w.Header().Set("Content-Type", "application/json") w.Header().Set("Content-Type", "application/json")
}) })


Convey("rex.Put", t, func() {
Convey("rex.PUT", t, func() {
request, _ := http.NewRequest("PUT", "/", nil) request, _ := http.NewRequest("PUT", "/", nil)
response := httptest.NewRecorder() response := httptest.NewRecorder()


}) })
} }


func TestDelete(t *testing.T) {
func TestDELETE(t *testing.T) {
app := New() app := New()
app.Delete("/", func(w http.ResponseWriter, r *http.Request) {
app.DELETE("/", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("X-Powered-By", "rex") w.Header().Set("X-Powered-By", "rex")
w.Header().Set("Content-Type", "application/json") w.Header().Set("Content-Type", "application/json")
}) })


Convey("rex.Delete", t, func() {
Convey("rex.DELETE", t, func() {
request, _ := http.NewRequest("DELETE", "/", nil) request, _ := http.NewRequest("DELETE", "/", nil)
response := httptest.NewRecorder() response := httptest.NewRecorder()




func TestGroup(t *testing.T) { func TestGroup(t *testing.T) {
app := New() app := New()
app.Get("/", func(w http.ResponseWriter, r *http.Request) {
app.GET("/", func(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "index") io.WriteString(w, "index")
}) })
user := app.Group("/users") user := app.Group("/users")
user.Get("/", func(w http.ResponseWriter, r *http.Request) {
user.GET("/", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("X-Powered-By", "rex") w.Header().Set("X-Powered-By", "rex")
}) })




func TestUse(t *testing.T) { func TestUse(t *testing.T) {
app := New() app := New()
app.Get("/", func(w http.ResponseWriter, r *http.Request) {
app.GET("/", func(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "index") io.WriteString(w, "index")
}) })
app.Use(func(next http.Handler) http.Handler { app.Use(func(next http.Handler) http.Handler {
func TestVars(t *testing.T) { func TestVars(t *testing.T) {
Convey("rex.Vars", t, func() { Convey("rex.Vars", t, func() {
app := New() app := New()
app.Get("/users/{id}", func(w http.ResponseWriter, r *http.Request) {
app.GET("/users/{id}", func(w http.ResponseWriter, r *http.Request) {
vars := app.Vars(r) vars := app.Vars(r)
So(vars["id"], ShouldEqual, "123") So(vars["id"], ShouldEqual, "123")
}) })

Loading…
Cancel
Save