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 }