github.com/JarrahG/buffalocli@v0.0.0-20230801092127-b85bfd5d395a/internal/genny/grift/grift.go (about) 1 package grift 2 3 import ( 4 "text/template" 5 6 "github.com/gobuffalo/genny/v2" 7 "github.com/gobuffalo/genny/v2/gogen" 8 ) 9 10 // New generator to create a grift task 11 func New(opts *Options) (*genny.Generator, error) { 12 g := genny.New() 13 14 if err := opts.Validate(); err != nil { 15 return g, err 16 } 17 18 data := map[string]interface{}{ 19 "opts": opts, 20 } 21 t := gogen.TemplateTransformer(data, template.FuncMap{}) 22 g.Transformer(t) 23 24 g.RunFn(func(r *genny.Runner) error { 25 return genFile(r, opts) 26 }) 27 return g, nil 28 } 29 30 func genFile(r *genny.Runner, opts *Options) error { 31 header := tmplHeader 32 path := "grifts/" + opts.Name.File(".go.tmpl").String() 33 if f, err := r.FindFile(path); err == nil { 34 header = f.String() 35 } 36 f := genny.NewFileS(path, header+tmplBody) 37 return r.File(f) 38 }