github.com/gobuffalo/buffalo-cli/v2@v2.0.0-alpha.15.0.20200919213536-a7350c8e6799/cli/cmds/newapp/presets/coreapp/generator.go (about) 1 package coreapp 2 3 import ( 4 "context" 5 "io" 6 "io/ioutil" 7 "os" 8 "path/filepath" 9 "strings" 10 "text/template" 11 12 "github.com/gobuffalo/buffalo-cli/v2/cli/cmds/newapp" 13 "github.com/gobuffalo/here" 14 "github.com/gobuffalo/plugins" 15 "github.com/markbates/pkger" 16 ) 17 18 var _ plugins.Plugin = &Generator{} 19 var _ newapp.Newapper = &Generator{} 20 21 type Generator struct{} 22 23 func (g *Generator) PluginName() string { 24 return "core/generator" 25 } 26 27 func (g *Generator) Newapp(ctx context.Context, root string, name string, args []string) error { 28 td := pkger.Include("github.com/gobuffalo/buffalo-cli/v2:/cli/cmds/newapp/presets/coreapp/_templates") 29 30 her, err := here.Dir(root) 31 if err != nil { 32 return err 33 } 34 35 err = pkger.Walk(td, func(path string, info os.FileInfo, err error) error { 36 if err != nil { 37 return err 38 } 39 np := strings.TrimPrefix(path, td) 40 np = strings.TrimPrefix(np, "/") 41 np = strings.TrimSuffix(np, ".tmpl") 42 np = strings.ReplaceAll(np, "-appname-", her.Name) 43 44 if info.IsDir() { 45 return os.MkdirAll(filepath.Join(root, np), 0755) 46 } 47 48 of, err := pkger.Open(path) 49 if err != nil { 50 return err 51 } 52 defer of.Close() 53 54 b, err := ioutil.ReadAll(of) 55 if err != nil { 56 return err 57 } 58 59 f, err := os.Create(filepath.Join(root, np)) 60 if err != nil { 61 return err 62 } 63 defer f.Close() 64 65 tmpl, err := template.New(path).Parse(string(b)) 66 if err != nil { 67 return err 68 } 69 70 if err := tmpl.Execute(f, her); err != nil { 71 return err 72 } 73 74 io.Copy(f, of) 75 76 return nil 77 }) 78 79 if err != nil { 80 return err 81 } 82 return nil 83 }