github.com/naoina/kocha@v0.7.1-0.20171129072645-78c7a531f799/cmd/kocha-generate/kocha-generate-controller/main.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "path/filepath" 6 "runtime" 7 "strings" 8 9 "github.com/naoina/kocha/util" 10 ) 11 12 type generateControllerCommand struct { 13 option struct { 14 Help bool `short:"h" long:"help"` 15 } 16 } 17 18 func (c *generateControllerCommand) Name() string { 19 return "kocha generate controller" 20 } 21 22 func (c *generateControllerCommand) Usage() string { 23 return fmt.Sprintf(`Usage: %s [OPTIONS] NAME 24 25 Generate the skeleton files of controller. 26 27 Options: 28 -h, --help display this help and exit 29 30 `, c.Name()) 31 } 32 33 func (c *generateControllerCommand) Option() interface{} { 34 return &c.option 35 } 36 37 // Run generates the controller templates. 38 func (c *generateControllerCommand) Run(args []string) error { 39 if len(args) < 1 || args[0] == "" { 40 return fmt.Errorf("no NAME given") 41 } 42 name := args[0] 43 camelCaseName := util.ToCamelCase(name) 44 snakeCaseName := util.ToSnakeCase(name) 45 receiverName := strings.ToLower(name) 46 if len(receiverName) > 1 { 47 receiverName = receiverName[:2] 48 } else { 49 receiverName = receiverName[:1] 50 } 51 data := map[string]interface{}{ 52 "Name": camelCaseName, 53 "Receiver": receiverName, 54 } 55 if err := util.CopyTemplate( 56 filepath.Join(skeletonDir("controller"), "controller.go"+util.TemplateSuffix), 57 filepath.Join("app", "controller", snakeCaseName+".go"), data); err != nil { 58 return err 59 } 60 if err := util.CopyTemplate( 61 filepath.Join(skeletonDir("controller"), "view.html"+util.TemplateSuffix), 62 filepath.Join("app", "view", snakeCaseName+".html"), data); err != nil { 63 return err 64 } 65 return nil 66 } 67 68 func skeletonDir(name string) string { 69 _, filename, _, _ := runtime.Caller(0) 70 baseDir := filepath.Dir(filename) 71 return filepath.Join(baseDir, "skeleton", name) 72 } 73 74 func main() { 75 util.RunCommand(&generateControllerCommand{}) 76 }