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