github.com/segakazzz/buffalo@v0.16.22-0.20210119082501-1f52048d3feb/genny/resource/resource.go (about) 1 package resource 2 3 import ( 4 "text/template" 5 6 "github.com/gobuffalo/flect" 7 "github.com/gobuffalo/flect/name" 8 "github.com/gobuffalo/genny/v2" 9 "github.com/gobuffalo/genny/v2/gogen" 10 "github.com/gobuffalo/packd" 11 "github.com/gobuffalo/packr/v2" 12 ) 13 14 // New resource generator 15 func New(opts *Options) (*genny.Generator, error) { 16 g := genny.New() 17 18 if err := opts.Validate(); err != nil { 19 return g, err 20 } 21 22 if !opts.SkipTemplates { 23 core := packr.New("github.com/gobuffalo/buffalo/@v0.15.4/genny/resource/templates/core", "../resource/templates/core") 24 25 if err := g.Box(core); err != nil { 26 return g, err 27 } 28 } 29 30 var abox packd.Box 31 if opts.SkipModel { 32 abox = packr.New("github.com/gobuffalo/buffalo/@v0.15.4/genny/resource/templates/standard", "../resource/templates/standard") 33 } else { 34 abox = packr.New("github.com/gobuffalo/buffalo/@v0.15.4/genny/resource/templates/use_model", "../resource/templates/use_model") 35 } 36 37 if err := g.Box(abox); err != nil { 38 return g, err 39 } 40 41 pres := presenter{ 42 App: opts.App, 43 Name: name.New(opts.Name), 44 Model: name.New(opts.Model), 45 Attrs: opts.Attrs, 46 } 47 x := pres.Name.Resource().File().String() 48 folder := pres.Name.Folder().Pluralize().String() 49 g.Transformer(genny.Replace("resource-name", x)) 50 g.Transformer(genny.Replace("resource-use_model", x)) 51 g.Transformer(genny.Replace("folder-name", folder)) 52 53 data := map[string]interface{}{ 54 "opts": pres, 55 "actions": actions(opts), 56 "folder": folder, 57 } 58 helpers := template.FuncMap{ 59 "camelize": func(s string) string { 60 return flect.Camelize(s) 61 }, 62 } 63 g.Transformer(gogen.TemplateTransformer(data, helpers)) 64 65 g.RunFn(installPop(opts)) 66 67 g.RunFn(addResource(pres)) 68 return g, nil 69 }