mirror of
https://github.com/stashapp/stash.git
synced 2025-12-16 21:34:14 +01:00
52 lines
1.2 KiB
Go
52 lines
1.2 KiB
Go
package gogen
|
|
|
|
import (
|
|
"bytes"
|
|
"io/ioutil"
|
|
|
|
"text/template"
|
|
|
|
"github.com/gobuffalo/genny"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
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, errors.WithStack(err)
|
|
}
|
|
t, err = t.Parse(string(b))
|
|
if err != nil {
|
|
return f, errors.WithStack(err)
|
|
}
|
|
|
|
var bb bytes.Buffer
|
|
if err = t.Execute(&bb, data); err != nil {
|
|
err = errors.WithStack(err)
|
|
return f, errors.WithStack(err)
|
|
}
|
|
return genny.StripExt(genny.NewFile(path, &bb), ".tmpl"), nil
|
|
}
|