From d57d2c7d60fd5cfa43e83445675a87da9ce19d29 Mon Sep 17 00:00:00 2001 From: Dave Henderson Date: Wed, 14 Jun 2017 00:42:15 -0400 Subject: Enhancing indent function Signed-off-by: Dave Henderson --- funcs/strings.go | 35 +++++++++++++++++++++++++++++++++++ funcs/strings_test.go | 8 ++++++++ 2 files changed, 43 insertions(+) (limited to 'funcs') diff --git a/funcs/strings.go b/funcs/strings.go index b78fe40c..c5117ccd 100644 --- a/funcs/strings.go +++ b/funcs/strings.go @@ -6,9 +6,12 @@ package funcs // in templates easier. import ( + "log" "sync" "strings" + + gompstrings "github.com/hairyhenderson/gomplate/strings" ) var ( @@ -31,6 +34,7 @@ func AddStringFuncs(f map[string]interface{}) { f["toUpper"] = StrNS().ToUpper f["toLower"] = StrNS().ToLower f["trimSpace"] = StrNS().TrimSpace + f["indent"] = StrNS().Indent // these are legacy aliases with non-pipelinable arg order f["contains"] = strings.Contains @@ -98,3 +102,34 @@ func (f *StringFuncs) ToLower(s string) string { func (f *StringFuncs) TrimSpace(s string) string { return strings.TrimSpace(s) } + +// Indent - +func (f *StringFuncs) Indent(args ...interface{}) string { + input, ok := args[len(args)-1].(string) + if !ok { + log.Fatal("Indent: invalid arguments") + } + indent := " " + width := 1 + switch len(args) { + case 2: + indent, ok = args[0].(string) + if !ok { + width, ok = args[0].(int) + if !ok { + log.Fatal("Indent: invalid arguments") + } + indent = " " + } + case 3: + width, ok = args[0].(int) + if !ok { + log.Fatal("Indent: invalid arguments") + } + indent, ok = args[1].(string) + if !ok { + log.Fatal("Indent: invalid arguments") + } + } + return gompstrings.Indent(width, indent, input) +} diff --git a/funcs/strings_test.go b/funcs/strings_test.go index 69bfabd9..2d2c7b63 100644 --- a/funcs/strings_test.go +++ b/funcs/strings_test.go @@ -14,3 +14,11 @@ func TestReplaceAll(t *testing.T) { assert.Equal(t, "ReplacedReplaced", sf.ReplaceAll("Orig", "Replaced", "OrigOrig")) } + +func TestIndent(t *testing.T) { + sf := &StringFuncs{} + assert.Equal(t, " foo\n bar\n baz", sf.Indent("foo\nbar\nbaz")) + assert.Equal(t, " foo\n bar\n baz", sf.Indent(" ", "foo\nbar\nbaz")) + assert.Equal(t, "---foo\n---bar\n---baz", sf.Indent(3, "-", "foo\nbar\nbaz")) + assert.Equal(t, " foo\n bar\n baz", sf.Indent(3, "foo\nbar\nbaz")) +} -- cgit v1.2.3