// MountPreflightController mounts the handlers for the CORS preflight requests onto service. func MountPreflightController(service goa.Service, spec Specification) { router := service.HTTPHandler().(*httprouter.Router) for _, res := range spec { path := res.Path if res.IsPathPrefix { if strings.HasSuffix(path, "/") { path += "*cors" } else { path += "/*cors" } } var handle httprouter.Handle handle, _, tsr := router.Lookup("OPTIONS", path) if tsr { if strings.HasSuffix(path, "/") { path = path[:len(path)-1] } else { path = path + "/" } handle, _, _ = router.Lookup("OPTIONS", path) } if handle == nil { h := func(ctx *goa.Context) error { return ctx.Respond(200, nil) } router.OPTIONS(path, goa.NewHTTPRouterHandle(service, "CORS", "preflight", h)) } } }
// MountAccountController "mounts" a Account resource controller on the given service. func MountAccountController(service goa.Service, ctrl AccountController) { router := service.HTTPHandler().(*httprouter.Router) var h goa.Handler h = func(c *goa.Context) error { ctx, err := NewCreateAccountContext(c) if err != nil { return goa.NewBadRequestError(err) } return ctrl.Create(ctx) } router.Handle("POST", "/cellar/accounts", goa.NewHTTPRouterHandle(service, "Account", "Create", h)) service.Info("mount", "ctrl", "Account", "action", "Create", "route", "POST /cellar/accounts") h = func(c *goa.Context) error { ctx, err := NewDeleteAccountContext(c) if err != nil { return goa.NewBadRequestError(err) } return ctrl.Delete(ctx) } router.Handle("DELETE", "/cellar/accounts/:accountID", goa.NewHTTPRouterHandle(service, "Account", "Delete", h)) service.Info("mount", "ctrl", "Account", "action", "Delete", "route", "DELETE /cellar/accounts/:accountID") h = func(c *goa.Context) error { ctx, err := NewShowAccountContext(c) if err != nil { return goa.NewBadRequestError(err) } return ctrl.Show(ctx) } router.Handle("GET", "/cellar/accounts/:accountID", goa.NewHTTPRouterHandle(service, "Account", "Show", h)) service.Info("mount", "ctrl", "Account", "action", "Show", "route", "GET /cellar/accounts/:accountID") h = func(c *goa.Context) error { ctx, err := NewUpdateAccountContext(c) if err != nil { return goa.NewBadRequestError(err) } return ctrl.Update(ctx) } router.Handle("PUT", "/cellar/accounts/:accountID", goa.NewHTTPRouterHandle(service, "Account", "Update", h)) service.Info("mount", "ctrl", "Account", "action", "Update", "route", "PUT /cellar/accounts/:accountID") }
// MountSeriesController "mounts" a Series resource controller on the given service. func MountSeriesController(service goa.Service, ctrl SeriesController) { router := service.HTTPHandler().(*httprouter.Router) var h goa.Handler h = func(c *goa.Context) error { ctx, err := NewCreateSeriesContext(c) if err != nil { return goa.NewBadRequestError(err) } return ctrl.Create(ctx) } router.Handle("POST", "/congo/accounts/:accountID/series", goa.NewHTTPRouterHandle(service, "Series", "Create", h)) service.Info("mount", "ctrl", "Series", "action", "Create", "route", "POST /congo/accounts/:accountID/series") h = func(c *goa.Context) error { ctx, err := NewListSeriesContext(c) if err != nil { return goa.NewBadRequestError(err) } return ctrl.List(ctx) } router.Handle("GET", "/congo/accounts/:accountID/series", goa.NewHTTPRouterHandle(service, "Series", "List", h)) service.Info("mount", "ctrl", "Series", "action", "List", "route", "GET /congo/accounts/:accountID/series") h = func(c *goa.Context) error { ctx, err := NewShowSeriesContext(c) if err != nil { return goa.NewBadRequestError(err) } return ctrl.Show(ctx) } router.Handle("GET", "/congo/accounts/:accountID/series/:seriesID", goa.NewHTTPRouterHandle(service, "Series", "Show", h)) service.Info("mount", "ctrl", "Series", "action", "Show", "route", "GET /congo/accounts/:accountID/series/:seriesID") h = func(c *goa.Context) error { ctx, err := NewUpdateSeriesContext(c) if err != nil { return goa.NewBadRequestError(err) } return ctrl.Update(ctx) } router.Handle("PATCH", "/congo/accounts/:accountID/series/:seriesID", goa.NewHTTPRouterHandle(service, "Series", "Update", h)) service.Info("mount", "ctrl", "Series", "action", "Update", "route", "PATCH /congo/accounts/:accountID/series/:seriesID") }
// MountPreflightController mounts the handlers for the CORS preflight requests onto service. func MountPreflightController(service goa.Service, spec Specification) { for _, res := range spec { path := res.Path if res.IsPathPrefix { if strings.HasSuffix(path, "/") { path += "*cors" } else { path += "/*cors" } } handle := service.ServeMux().Lookup("OPTIONS", path) if handle == nil { h := func(ctx *goa.Context) error { return ctx.Respond(200, nil) } ctrl := service.NewController("cors") service.ServeMux().Handle("OPTIONS", path, ctrl.HandleFunc("preflight", h)) } } }
// NewAccountController creates a account controller. func NewAccountController(service goa.Service) AccountController { return &AccountController{Controller: service.NewController("AccountController")} }
// MountController mounts the JavaScript example controller under "/js". func MountController(service goa.Service) { // Serve static files under js service.ServeFiles("/js/*filepath", "/home/raphael/go/src/github.com/raphael/goa/examples/cellar/js") service.Info("mount", "ctrl", "JS", "action", "ServeFiles", "route", "GET /js/*") }
// NewBottleController creates a bottle controller. func NewBottleController(service goa.Service) BottleController { return &BottleController{Controller: service.NewController("BottleController")} }
// MountController mounts the swagger spec controller under "/swagger.json". func MountController(service goa.Service) { service.Info("mount", "ctrl", "Swagger", "action", "Show", "route", "GET /swagger.json") h := goa.NewHTTPRouterHandle(service, "Swagger", "Show", getSwagger) service.HTTPHandler().(*httprouter.Router).Handle("GET", "/swagger.json", h) }
Describe("GetMany", func() { It("returns nil if not initialized", func() { Ω(ctx.GetMany("foo")).Should(BeNil()) }) }) Describe("Payload", func() { It("returns nil if not initialized", func() { Ω(ctx.Payload()).Should(BeNil()) }) }) Context("with a request response", func() { const appName = "foo" var app goa.Service const resName = "res" const actName = "act" var handler, unmarshaler goa.Handler const reqBody = `"body"` const respStatus = 200 var respContent = []byte("response") var handleFunc goa.HandleFunc var rw http.ResponseWriter var request *http.Request var params url.Values BeforeEach(func() { app = goa.New(appName) handler = func(c *goa.Context) error { ctx = c
package goa_test import ( "fmt" "net/http" "github.com/julienschmidt/httprouter" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" "github.com/raphael/goa" ) var _ = Describe("Application", func() { const appName = "foo" var s goa.Service BeforeEach(func() { s = goa.New(appName) }) Describe("New", func() { It("creates an application", func() { Ω(s).ShouldNot(BeNil()) }) It("initializes the application fields", func() { Ω(s.Name()).Should(Equal(appName)) Ω(s).Should(BeAssignableToTypeOf(&goa.Application{})) app, _ := s.(*goa.Application) Ω(app.Name()).Should(Equal(appName)) Ω(app.Logger).ShouldNot(BeNil())
// MountController mounts the API JSON schema controller under "/schema.json". func MountController(service goa.Service) { service.ServeFiles("/schema.json", "schema/schema.json") }
// NewBottle creates a bottle controller. func NewBottle(service goa.Service) *BottleController { return &BottleController{ Controller: service.NewController("Bottle"), db: NewDB(), } }
// NewAccount creates a account controller. func NewAccount(service goa.Service) *AccountController { return &AccountController{ Controller: service.NewController("Account"), db: NewDB(), } }
// MountController mounts the swagger spec controller under "/swagger.json". func MountController(service goa.Service) { service.ServeFiles("/swagger.json", "swagger/swagger.json") }
// MountBottleController "mounts" a Bottle resource controller on the given service. func MountBottleController(service goa.Service, ctrl BottleController) { var h goa.Handler mux := service.ServeMux() h = func(c *goa.Context) error { ctx, err := NewCreateBottleContext(c) if err != nil { return goa.NewBadRequestError(err) } return ctrl.Create(ctx) } mux.Handle("POST", "/cellar/accounts/:accountID/bottles", ctrl.HandleFunc("Create", h)) service.Info("mount", "ctrl", "Bottle", "action", "Create", "route", "POST /cellar/accounts/:accountID/bottles") h = func(c *goa.Context) error { ctx, err := NewDeleteBottleContext(c) if err != nil { return goa.NewBadRequestError(err) } return ctrl.Delete(ctx) } mux.Handle("DELETE", "/cellar/accounts/:accountID/bottles/:bottleID", ctrl.HandleFunc("Delete", h)) service.Info("mount", "ctrl", "Bottle", "action", "Delete", "route", "DELETE /cellar/accounts/:accountID/bottles/:bottleID") h = func(c *goa.Context) error { ctx, err := NewListBottleContext(c) if err != nil { return goa.NewBadRequestError(err) } return ctrl.List(ctx) } mux.Handle("GET", "/cellar/accounts/:accountID/bottles", ctrl.HandleFunc("List", h)) service.Info("mount", "ctrl", "Bottle", "action", "List", "route", "GET /cellar/accounts/:accountID/bottles") h = func(c *goa.Context) error { ctx, err := NewRateBottleContext(c) if err != nil { return goa.NewBadRequestError(err) } return ctrl.Rate(ctx) } mux.Handle("PUT", "/cellar/accounts/:accountID/bottles/:bottleID/actions/rate", ctrl.HandleFunc("Rate", h)) service.Info("mount", "ctrl", "Bottle", "action", "Rate", "route", "PUT /cellar/accounts/:accountID/bottles/:bottleID/actions/rate") h = func(c *goa.Context) error { ctx, err := NewShowBottleContext(c) if err != nil { return goa.NewBadRequestError(err) } return ctrl.Show(ctx) } mux.Handle("GET", "/cellar/accounts/:accountID/bottles/:bottleID", ctrl.HandleFunc("Show", h)) service.Info("mount", "ctrl", "Bottle", "action", "Show", "route", "GET /cellar/accounts/:accountID/bottles/:bottleID") h = func(c *goa.Context) error { ctx, err := NewUpdateBottleContext(c) if err != nil { return goa.NewBadRequestError(err) } return ctrl.Update(ctx) } mux.Handle("PATCH", "/cellar/accounts/:accountID/bottles/:bottleID", ctrl.HandleFunc("Update", h)) service.Info("mount", "ctrl", "Bottle", "action", "Update", "route", "PATCH /cellar/accounts/:accountID/bottles/:bottleID") }