github.com/gobuffalo/buffalo-cli/v2@v2.0.0-alpha.15.0.20200919213536-a7350c8e6799/cli/internal/plugins/pop/generators/actions/generate.go (about) 1 package actions 2 3 import ( 4 "context" 5 "fmt" 6 "html/template" 7 "os" 8 "path" 9 "path/filepath" 10 11 "github.com/gobuffalo/flect/name" 12 "github.com/gobuffalo/here" 13 "github.com/gobuffalo/meta/v2" 14 "github.com/gobuffalo/plugins" 15 ) 16 17 func (mg *Generator) GenerateResourceActions(ctx context.Context, root string, args []string) error { 18 if len(args) == 0 { 19 err := fmt.Errorf("you must specify a resource") 20 return plugins.Wrap(mg, err) 21 } 22 23 info, err := here.Dir(root) 24 if err != nil { 25 return plugins.Wrap(mg, err) 26 } 27 28 resourceName := args[0] 29 30 modelName := mg.modelName 31 if len(modelName) == 0 { 32 modelName = resourceName 33 } 34 35 modelsPkg := mg.modelsPkg 36 if len(modelsPkg) == 0 { 37 modelsPkg = path.Join(info.ImportPath, "models") 38 } 39 40 modelsPkgSel := mg.modelsPkgSel 41 importName := modelsPkgSel 42 if len(modelsPkgSel) == 0 { 43 modelsPkgSel = path.Base(modelsPkg) 44 importName = "" 45 } 46 47 app, err := meta.New(info) 48 if err != nil { 49 return plugins.Wrap(mg, err) 50 } 51 52 pres := struct { 53 AsWeb bool 54 ImportName string 55 Model name.Ident 56 ModelsPkg string 57 ModelsPkgSel string 58 Name name.Ident 59 }{ 60 AsWeb: app.As["web"], 61 ImportName: importName, 62 Model: name.New(modelName), 63 ModelsPkg: modelsPkg, 64 ModelsPkgSel: modelsPkgSel, 65 Name: name.New(resourceName), 66 } 67 68 t, err := template.New(resourceName).Parse(actionsTmpl) 69 if err != nil { 70 return plugins.Wrap(mg, err) 71 } 72 73 p := fmt.Sprintf("%s.go", pres.Name.Folder().Pluralize()) 74 fp := filepath.Join(root, "actions", p) 75 76 if err := os.MkdirAll(filepath.Dir(fp), 0755); err != nil { 77 return plugins.Wrap(mg, err) 78 } 79 80 f, err := os.Create(fp) 81 if err != nil { 82 return plugins.Wrap(mg, err) 83 } 84 defer f.Close() 85 86 if err := t.Execute(f, pres); err != nil { 87 return plugins.Wrap(mg, err) 88 } 89 90 return nil 91 }