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  }