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  }