/
templates.go
52 lines (44 loc) · 1.07 KB
/
templates.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
package gogen
import (
"bytes"
"errors"
"io/ioutil"
"text/template"
"github.com/gobuffalo/genny"
)
var TemplateHelpers = map[string]interface{}{}
// TemplateTransformer will run any file that has a ".tmpl" extension through text/template
func TemplateTransformer(data interface{}, helpers map[string]interface{}) genny.Transformer {
if helpers == nil {
helpers = TemplateHelpers
}
t := genny.NewTransformer(".tmpl", func(f genny.File) (genny.File, error) {
return renderWithTemplate(f, data, helpers)
})
t.StripExt = true
return t
}
func renderWithTemplate(f genny.File, data interface{}, helpers template.FuncMap) (genny.File, error) {
if f == nil {
return f, errors.New("file was nil")
}
path := f.Name()
t := template.New(path)
if helpers != nil {
t = t.Funcs(helpers)
}
b, err := ioutil.ReadAll(f)
if err != nil {
return f, err
}
t, err = t.Parse(string(b))
if err != nil {
return f, err
}
var bb bytes.Buffer
if err = t.Execute(&bb, data); err != nil {
err = err
return f, err
}
return genny.StripExt(genny.NewFile(path, &bb), ".tmpl"), nil
}