From 0639714136ba11aaec67ee06832d0d1585a4f18c Mon Sep 17 00:00:00 2001 From: KUOKA Yusuke Date: Mon, 25 Mar 2019 18:08:47 +0900 Subject: [PATCH] feat: `tpl` template function (#504) Add `tpl` template function that looks exactly like helm's one. Resolves #420 --- tmpl/context_funcs.go | 9 +++++++++ tmpl/context_funcs_test.go | 15 +++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/tmpl/context_funcs.go b/tmpl/context_funcs.go index 69c853b0..28a6f691 100644 --- a/tmpl/context_funcs.go +++ b/tmpl/context_funcs.go @@ -24,6 +24,7 @@ func (c *Context) createFuncMap() template.FuncMap { "requiredEnv": RequiredEnv, "get": get, "getOrNil": getOrNil, + "tpl": c.Tpl, } if c.preRender { // disable potential side-effect template calls @@ -128,6 +129,14 @@ func (c *Context) ReadFile(filename string) (string, error) { return string(bytes), nil } +func (c *Context) Tpl(text string, data interface{}) (string, error) { + buf, err := c.RenderTemplateToBuffer(text, data) + if err != nil { + return "", err + } + return buf.String(), nil +} + func ToYaml(v interface{}) (string, error) { data, err := yaml.Marshal(v) if err != nil { diff --git a/tmpl/context_funcs_test.go b/tmpl/context_funcs_test.go index f1ac09b4..373d6eb0 100644 --- a/tmpl/context_funcs_test.go +++ b/tmpl/context_funcs_test.go @@ -118,3 +118,18 @@ func TestSetValueAtPath_TwoComponents(t *testing.T) { t.Errorf("unexpected result: expected=%v, actual=%v", expected, actual) } } + +func TestTpl(t *testing.T) { + text := `foo: {{ .foo }} +` + expected := `foo: FOO +` + ctx := &Context{basePath: "."} + actual, err := ctx.Tpl(text, map[string]interface{}{"foo": "FOO"}) + if err != nil { + t.Errorf("unexpected error: %v", err) + } + if !reflect.DeepEqual(actual, expected) { + t.Errorf("unexpected result: expected=%v, actual=%v", expected, actual) + } +}