--- /dev/null
+// Copyright (c) 2012-2016 The Revel Framework Authors, All rights reserved.
+// Revel Framework source code and usage is governed by a MIT style
+// license that can be found in the LICENSE file.
+
+package revel
+
+import (
+ "os"
+ "path/filepath"
+ "reflect"
+)
+
+type Hotel struct {
+ HotelID int
+ Name, Address string
+ City, State, Zip string
+ Country string
+ Price int
+}
+
+type Hotels struct {
+ *Controller
+}
+
+type Static struct {
+ *Controller
+}
+
+type Implicit struct {
+ *Controller
+}
+
+type Application struct {
+ *Controller
+}
+
+func (c Hotels) Show(id int) Result {
+ title := "View Hotel"
+ hotel := &Hotel{id, "A Hotel", "300 Main St.", "New York", "NY", "10010", "USA", 300}
+ // The line number below must match the one with the code : RenderArgNames: map[int][]string{43: {"title", "hotel"}},
+ return c.Render(title, hotel)
+}
+
+func (c Hotels) Book(id int) Result {
+ hotel := &Hotel{id, "A Hotel", "300 Main St.", "New York", "NY", "10010", "USA", 300}
+ return c.RenderJSON(hotel)
+}
+
+func (c Hotels) Index() Result {
+ return c.RenderText("Hello, World!")
+}
+
+func (c Static) Serve(prefix, path string) Result {
+ var basePath, dirName string
+
+ if !filepath.IsAbs(dirName) {
+ basePath = BasePath
+ }
+
+ fname := filepath.Join(basePath, prefix, path)
+ file, err := os.Open(fname)
+ if os.IsNotExist(err) {
+ return c.NotFound("")
+ } else if err != nil {
+ RevelLog.Errorf("Problem opening file (%s): %s ", fname, err)
+ return c.NotFound("This was found but not sure why we couldn't open it.")
+ }
+ return c.RenderFile(file, "")
+}
+
+// Register controllers is in its own function so the route test can use it as well
+func registerControllers() {
+ controllers = make(map[string]*ControllerType)
+ RaiseEvent(ROUTE_REFRESH_REQUESTED, nil)
+ RegisterController((*Hotels)(nil),
+ []*MethodType{
+ {
+ Name: "Index",
+ },
+ {
+ Name: "Show",
+ Args: []*MethodArg{
+ {"id", reflect.TypeOf((*int)(nil))},
+ },
+ RenderArgNames: map[int][]string{41: {"title", "hotel"}},
+ },
+ {
+ Name: "Book",
+ Args: []*MethodArg{
+ {"id", reflect.TypeOf((*int)(nil))},
+ },
+ },
+ })
+
+ RegisterController((*Static)(nil),
+ []*MethodType{
+ {
+ Name: "Serve",
+ Args: []*MethodArg{
+ {Name: "prefix", Type: reflect.TypeOf((*string)(nil))},
+ {Name: "filepath", Type: reflect.TypeOf((*string)(nil))},
+ },
+ RenderArgNames: map[int][]string{},
+ },
+ })
+ RegisterController((*Implicit)(nil),
+ []*MethodType{
+ {
+ Name: "Implicit",
+ Args: []*MethodArg{
+ {Name: "prefix", Type: reflect.TypeOf((*string)(nil))},
+ {Name: "filepath", Type: reflect.TypeOf((*string)(nil))},
+ },
+ RenderArgNames: map[int][]string{},
+ },
+ })
+ RegisterController((*Application)(nil),
+ []*MethodType{
+ {
+ Name: "Application",
+ Args: []*MethodArg{
+ {Name: "prefix", Type: reflect.TypeOf((*string)(nil))},
+ {Name: "filepath", Type: reflect.TypeOf((*string)(nil))},
+ },
+ RenderArgNames: map[int][]string{},
+ },
+ {
+ Name: "Index",
+ Args: []*MethodArg{
+ {Name: "foo", Type: reflect.TypeOf((*string)(nil))},
+ {Name: "bar", Type: reflect.TypeOf((*string)(nil))},
+ },
+ RenderArgNames: map[int][]string{},
+ },
+ })
+}
+func startFakeBookingApp() {
+ Init("prod", "github.com/revel/revel/testdata", "")
+
+ MainTemplateLoader = NewTemplateLoader([]string{ViewsPath, filepath.Join(RevelPath, "templates")})
+ if err := MainTemplateLoader.Refresh(); err != nil {
+ RevelLog.Fatal("Template error","error",err)
+ }
+
+ registerControllers()
+
+ InitServerEngine(9000, GO_NATIVE_SERVER_ENGINE)
+ RaiseEvent(ENGINE_BEFORE_INITIALIZED, nil)
+ InitServer()
+
+ RaiseEvent(ENGINE_STARTED, nil)
+}