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  }