From 8218e45cbcc756333bee6b6245ef5a4c2aaa273f Mon Sep 17 00:00:00 2001 From: James Nugent Date: Wed, 17 May 2017 20:48:12 -0400 Subject: Add "replaceAll" function and documentation This commit adds a `replaceAll` function which takes three arguments - an original string, the substring to replace, and the string with which to replace it. This is of particular use when generating node names from IP addresses where the node name may not contain "." characters. --- README.md | 18 ++++++++++++++++++ gomplate.go | 3 ++- stringfunc.go | 10 ++++++++++ stringfunc_test.go | 16 ++++++++++++++++ 4 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 stringfunc.go create mode 100644 stringfunc_test.go diff --git a/README.md b/README.md index 92b8085f..cb60f2c6 100644 --- a/README.md +++ b/README.md @@ -46,6 +46,7 @@ Gomplate is an alternative that will let you process templates which also includ - [`slice`](#slice) - [`split`](#split) - [`splitN`](#splitn) + - [`replaceAll`](#replaceAll) - [`title`](#title) - [`toLower`](#tolower) - [`toUpper`](#toupper) @@ -355,6 +356,23 @@ $ gomplate -i '{{ range splitN "foo:bar:baz" ":" 2 }}{{.}}{{end}}' foo bar:baz ``` +#### `replaceAll` + +Replaces all occurrences of a given string with another. + +##### Example + +```console +$ gomplate -i '{{ replaceAll "." "-" "172.21.1.42" }}' +172-21-1-42 +``` + +##### Example (with pipeline) + +```console +$ gomplate -i '{{ "172.21.1.42" | replaceAll "." "-" }}' +172-21-1-42 +``` #### `title` diff --git a/gomplate.go b/gomplate.go index 28e623ab..c2490e81 100644 --- a/gomplate.go +++ b/gomplate.go @@ -4,7 +4,6 @@ import ( "io" "log" "net/url" - "strings" "text/template" @@ -39,6 +38,7 @@ func (g *Gomplate) RunTemplate(text string, out io.Writer) { func NewGomplate(data *Data, leftDelim, rightDelim string) *Gomplate { env := &Env{} typeconv := &TypeConv{} + stringfunc := &stringFunc{} ec2meta := aws.NewEc2Meta() ec2info := aws.NewEc2Info() return &Gomplate{ @@ -65,6 +65,7 @@ func NewGomplate(data *Data, leftDelim, rightDelim string) *Gomplate { "contains": strings.Contains, "hasPrefix": strings.HasPrefix, "hasSuffix": strings.HasSuffix, + "replaceAll": stringfunc.replaceAll, "split": strings.Split, "splitN": strings.SplitN, "title": strings.Title, diff --git a/stringfunc.go b/stringfunc.go new file mode 100644 index 00000000..ff51b80a --- /dev/null +++ b/stringfunc.go @@ -0,0 +1,10 @@ +package main + +import "strings" + +// stringFunc - string manipulation function wrappers +type stringFunc struct{} + +func (t stringFunc) replaceAll(old, new, s string) string { + return strings.Replace(s, old, new, -1) +} diff --git a/stringfunc_test.go b/stringfunc_test.go new file mode 100644 index 00000000..62d95dcb --- /dev/null +++ b/stringfunc_test.go @@ -0,0 +1,16 @@ +package main + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestReplaceAll(t *testing.T) { + sf := &stringFunc{} + + assert.Equal(t, "Replaced", + sf.replaceAll("Orig", "Replaced", "Orig")) + assert.Equal(t, "ReplacedReplaced", + sf.replaceAll("Orig", "Replaced", "OrigOrig")) +} -- cgit v1.2.3