github.com/gobuffalo/buffalo-cli/v2@v2.0.0-alpha.15.0.20200919213536-a7350c8e6799/cli/internal/plugins/pop/newapp/generator.go (about) 1 package newapp 2 3 import ( 4 "context" 5 "fmt" 6 "io/ioutil" 7 "os" 8 "path/filepath" 9 "text/template" 10 11 "github.com/markbates/pkger" 12 "github.com/spf13/pflag" 13 ) 14 15 type Generator struct { 16 databaseType string 17 skip bool 18 19 flags *pflag.FlagSet 20 } 21 22 func (g Generator) PluginName() string { 23 return "pop/db" 24 } 25 26 func (g Generator) Description() string { 27 return "Generates Pop needed files when application is created" 28 } 29 30 func (g *Generator) Newapp(ctx context.Context, root string, name string, args []string) error { 31 if g.skip { 32 return nil 33 } 34 35 err := g.addModels(root, name) 36 if err != nil { 37 return err 38 } 39 40 err = g.addDatabaseConfig(root, name) 41 if err != nil { 42 return err 43 } 44 45 return nil 46 } 47 48 func (g *Generator) addDatabaseConfig(root, name string) error { 49 td := pkger.Include("github.com/gobuffalo/buffalo-cli/v2:/cli/internal/plugins/pop/newapp/templates") 50 51 dbtype := g.databaseType 52 if dbtype == "" { 53 dbtype = "postgres" 54 } 55 56 tfile := fmt.Sprintf("database.%v.yml.tmpl", dbtype) 57 tf, err := pkger.Open(filepath.Join(td, tfile)) 58 if err != nil { 59 return err 60 } 61 62 t, err := ioutil.ReadAll(tf) 63 if err != nil { 64 return err 65 } 66 67 template, err := template.New("database.yml").Parse(string(t)) 68 if err != nil { 69 return err 70 } 71 72 f, err := os.Create(filepath.Join(root, "database.yml")) 73 if err != nil { 74 return err 75 } 76 77 data := struct { 78 Root string 79 Name string 80 }{ 81 Root: root + string(filepath.Separator), 82 Name: name, 83 } 84 85 err = template.Execute(f, data) 86 if err != nil { 87 return err 88 } 89 90 return nil 91 } 92 93 func (g *Generator) addModels(root, name string) error { 94 td := pkger.Include("github.com/gobuffalo/buffalo-cli/v2:/cli/internal/plugins/pop/newapp/templates") 95 err := os.Mkdir(filepath.Join(root, "models"), 0777) 96 if err != nil { 97 return err 98 } 99 100 tf, err := pkger.Open(filepath.Join(td, "models.go.tmpl")) 101 if err != nil { 102 return err 103 } 104 105 t, err := ioutil.ReadAll(tf) 106 if err != nil { 107 return err 108 } 109 110 template, err := template.New("models.go").Parse(string(t)) 111 if err != nil { 112 return err 113 } 114 115 f, err := os.Create(filepath.Join(root, "models", "models.go")) 116 if err != nil { 117 return err 118 } 119 120 err = template.Execute(f, nil) 121 if err != nil { 122 return err 123 } 124 125 return nil 126 }