github.com/kotovmak/go-admin@v1.1.1/adm/plugin.go (about)

     1  package main
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"go/format"
     7  	"io/ioutil"
     8  	"os"
     9  	"strings"
    10  	"text/template"
    11  
    12  	"github.com/mgutz/ansi"
    13  )
    14  
    15  func getPluginTemplate(modulePath, pluginName string) {
    16  	data := PluginTmplData{
    17  		ModulePath:  modulePath,
    18  		PluginName:  pluginName,
    19  		PluginTitle: strings.Title(pluginName),
    20  	}
    21  	checkError(ioutil.WriteFile("./"+pluginName+".go", parsePluginTmpl("main", data), 0644))
    22  	checkError(ioutil.WriteFile("./router.go", parsePluginTmpl("router", data), 0644))
    23  	checkError(os.Mkdir("controller", os.ModePerm))
    24  	checkError(ioutil.WriteFile("./controller/common.go", parsePluginTmpl("controller", data), 0644))
    25  	checkError(ioutil.WriteFile("./controller/example.go", parsePluginTmpl("controller_example", data), 0644))
    26  	checkError(os.Mkdir("guard", os.ModePerm))
    27  	checkError(ioutil.WriteFile("./guard/guard.go", parsePluginTmpl("guard", data), 0644))
    28  	checkError(ioutil.WriteFile("./guard/example.go", parsePluginTmpl("guard_example", data), 0644))
    29  	checkError(os.Mkdir("modules", os.ModePerm))
    30  	checkError(os.Mkdir("./modules/language", os.ModePerm))
    31  	checkError(ioutil.WriteFile("./modules/language/language.go", parsePluginTmpl("language", data), 0644))
    32  	checkError(ioutil.WriteFile("./modules/language/cn.go", parsePluginTmpl("language_cn", data), 0644))
    33  	checkError(ioutil.WriteFile("./modules/language/en.go", parsePluginTmpl("language_en", data), 0644))
    34  	checkError(ioutil.WriteFile("./Makefile", []byte(pluginTemplate["makefile"]), 0644))
    35  	checkError(os.Mkdir("example", os.ModePerm))
    36  	checkError(os.Mkdir("tests", os.ModePerm))
    37  	fmt.Println()
    38  	fmt.Println(ansi.Color(getWord("Generate plugin template success~~🍺🍺"), "green"))
    39  	fmt.Println()
    40  }
    41  
    42  type PluginTmplData struct {
    43  	PluginName  string
    44  	PluginTitle string
    45  	ModulePath  string
    46  }
    47  
    48  func parsePluginTmpl(name string, data PluginTmplData) []byte {
    49  	t, err := template.New("plugin").Parse(pluginTemplate[name])
    50  	checkError(err)
    51  	buf := new(bytes.Buffer)
    52  	checkError(t.Execute(buf, data))
    53  	c, err := format.Source(buf.Bytes())
    54  	checkError(err)
    55  	return c
    56  }