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