Add split function

This commit is contained in:
Bryce Kahle 2015-01-28 16:59:16 -05:00
parent 918ba4c3be
commit adccaad252
2 changed files with 40 additions and 0 deletions

View File

@ -19,6 +19,7 @@ func init() {
"file": interpolationFuncFile(), "file": interpolationFuncFile(),
"join": interpolationFuncJoin(), "join": interpolationFuncJoin(),
"element": interpolationFuncElement(), "element": interpolationFuncElement(),
"split": interpolationFuncSplit(),
} }
} }
@ -78,6 +79,18 @@ func interpolationFuncJoin() ast.Function {
} }
} }
// interpolationFuncSplit implements the "split" function that allows
// strings to split into multi-variable values
func interpolationFuncSplit() ast.Function {
return ast.Function{
ArgTypes: []ast.Type{ast.TypeString, ast.TypeString},
ReturnType: ast.TypeString,
Callback: func(args []interface{}) (interface{}, error) {
return strings.Replace(args[1].(string), args[0].(string), InterpSplitDelim, -1), nil
},
}
}
// interpolationFuncLookup implements the "lookup" function that allows // interpolationFuncLookup implements the "lookup" function that allows
// dynamic lookups of map types within a Terraform configuration. // dynamic lookups of map types within a Terraform configuration.
func interpolationFuncLookup(vs map[string]ast.Variable) ast.Function { func interpolationFuncLookup(vs map[string]ast.Variable) ast.Function {

View File

@ -107,6 +107,33 @@ func TestInterpolateFuncJoin(t *testing.T) {
}) })
} }
func TestInterpolateFuncSplit(t *testing.T) {
testFunction(t, testFunctionConfig{
Cases: []testFunctionCase{
{
`${split(",")}`,
nil,
true,
},
{
`${split(",", "foo")}`,
"foo",
false,
},
{
`${split(".", "foo.bar.baz")}`,
fmt.Sprintf(
"foo%sbar%sbaz",
InterpSplitDelim,
InterpSplitDelim),
false,
},
},
})
}
func TestInterpolateFuncLookup(t *testing.T) { func TestInterpolateFuncLookup(t *testing.T) {
testFunction(t, testFunctionConfig{ testFunction(t, testFunctionConfig{
Vars: map[string]ast.Variable{ Vars: map[string]ast.Variable{