github.com/JarrahG/buffalocli@v0.0.0-20230801092127-b85bfd5d395a/internal/genny/resource/resource.go (about) 1 package resource 2 3 import ( 4 "embed" 5 "io/fs" 6 "text/template" 7 8 "github.com/gobuffalo/flect" 9 "github.com/gobuffalo/flect/name" 10 "github.com/gobuffalo/genny/v2" 11 "github.com/gobuffalo/genny/v2/gogen" 12 ) 13 14 //go:embed templates/* templates/core/templates/folder-name/_form.plush.html.tmpl 15 var templates embed.FS 16 17 // New resource generator 18 func New(opts *Options) (*genny.Generator, error) { 19 g := genny.New() 20 21 if err := opts.Validate(); err != nil { 22 return g, err 23 } 24 25 if !opts.SkipTemplates { 26 core, err := fs.Sub(templates, "templates/core") 27 if err != nil { 28 return g, err 29 } 30 31 if err := g.FS(core); err != nil { 32 return g, err 33 } 34 } 35 36 sub := "templates/use_model" 37 if opts.SkipModel { 38 sub = "templates/standard" 39 } 40 41 aFS, err := fs.Sub(templates, sub) 42 if err != nil { 43 return g, err 44 } 45 46 if err := g.FS(aFS); err != nil { 47 return g, err 48 } 49 50 pres := presenter{ 51 App: opts.App, 52 Name: name.New(opts.Name), 53 Model: name.New(opts.Model), 54 Attrs: opts.Attrs, 55 } 56 x := pres.Name.Resource().File().String() 57 folder := pres.Name.Folder().Pluralize().String() 58 g.Transformer(genny.Replace("resource-name", x)) 59 g.Transformer(genny.Replace("resource-use_model", x)) 60 g.Transformer(genny.Replace("folder-name", folder)) 61 62 data := map[string]interface{}{ 63 "opts": pres, 64 "actions": actions(opts), 65 "folder": folder, 66 } 67 helpers := template.FuncMap{ 68 "camelize": func(s string) string { 69 return flect.Camelize(s) 70 }, 71 } 72 g.Transformer(gogen.TemplateTransformer(data, helpers)) 73 74 g.RunFn(installPop(opts)) 75 76 g.RunFn(addResource(pres)) 77 return g, nil 78 }