github.com/JarrahG/buffalocli@v0.0.0-20230801092127-b85bfd5d395a/internal/genny/refresh/refresh.go (about)

     1  package refresh
     2  
     3  import (
     4  	"embed"
     5  	"io/fs"
     6  	"strings"
     7  
     8  	"github.com/gobuffalo/genny/v2"
     9  	"github.com/gobuffalo/genny/v2/plushgen"
    10  	"github.com/gobuffalo/plush/v4"
    11  )
    12  
    13  //go:embed templates/*
    14  var templates embed.FS
    15  
    16  // New generator to generate refresh templates
    17  func New(opts *Options) (*genny.Generator, error) {
    18  	g := genny.New()
    19  	if err := opts.Validate(); err != nil {
    20  		return g, err
    21  	}
    22  
    23  	sub, err := fs.Sub(templates, "templates")
    24  	if err != nil {
    25  		return g, err
    26  	}
    27  
    28  	if err := g.FS(sub); err != nil {
    29  		return g, err
    30  	}
    31  
    32  	ctx := plush.NewContext()
    33  	ctx.Set("app", opts.App)
    34  	g.Transformer(plushgen.Transformer(ctx))
    35  	g.Transformer(genny.Dot())
    36  
    37  	// TODO: workaround for 1.16, remove when we upgrade to 1.17 and rename "dot-*" files back to "-dot-*"
    38  	g.Transformer(genny.NewTransformer("*", func(f genny.File) (genny.File, error) {
    39  		name := f.Name()
    40  		if strings.HasPrefix(name, "dot-") {
    41  			name = strings.TrimPrefix(name, "dot-")
    42  			name = "." + name
    43  		}
    44  		return genny.NewFile(name, f), nil
    45  	}))
    46  	g.Transformer(genny.Replace("/dot-", "/."))
    47  
    48  	return g, nil
    49  }