Skip to content

Commit

Permalink
Pipeline: Add 'tpl' template function
Browse files Browse the repository at this point in the history
Signed-off-by: Richard Kosegi <richard.kosegi@gmail.com>
  • Loading branch information
rkosegi committed Aug 6, 2024
1 parent 58aabe5 commit dad8dc7
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 0 deletions.
17 changes: 17 additions & 0 deletions pipeline/template_engine.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,25 @@ type templateEngine struct {
fm template.FuncMap
}

func tplFunc(tmpl *template.Template) func(string, interface{}) (string, error) {
return func(tpl string, data interface{}) (string, error) {
t, _ := tmpl.Clone()
t, err := tmpl.New(tmpl.Name()).Parse(tpl)
if err != nil {
return "", err
}
var buf strings.Builder
err = t.Execute(&buf, data)
return buf.String(), err
}
}

func renderTemplate(tmplStr string, data interface{}, fm template.FuncMap) (string, error) {
tmpl := template.New("tmpl").Funcs(fm)
tmpl.Funcs(template.FuncMap{
"tpl": tplFunc(tmpl),
})
tplFunc(tmpl)
_, err := tmpl.Parse(tmplStr)
if err != nil {
return "", err
Expand Down
23 changes: 23 additions & 0 deletions pipeline/template_engine_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,3 +61,26 @@ func TestRenderTemplate(t *testing.T) {
_, err = renderTemplate("{{ .a }}", "", sprig.TxtFuncMap())
assert.Error(t, err)
}

func TestTemplateEngineRenderTpl(t *testing.T) {
var (
out string
err error
)
out, err = renderTemplate("{{ tpl .T . }}", map[string]interface{}{
"T": "{{ add .X 3 }}",
"X": 10,
}, sprig.TxtFuncMap())
assert.NoError(t, err)
assert.Equal(t, "13", out)
}

func TestTemplateEngineRenderTplInvalid(t *testing.T) {
var (
err error
)
_, err = renderTemplate("{{ tpl .T . }}", map[string]interface{}{
"T": "{{",
}, sprig.TxtFuncMap())
assert.Error(t, err)
}

0 comments on commit dad8dc7

Please sign in to comment.