core: Rename uniq -> distinct and add docs
This commit is contained in:
parent
df3e017f6c
commit
4b6a632246
|
@ -60,6 +60,7 @@ func Funcs() map[string]ast.Function {
|
||||||
"coalesce": interpolationFuncCoalesce(),
|
"coalesce": interpolationFuncCoalesce(),
|
||||||
"compact": interpolationFuncCompact(),
|
"compact": interpolationFuncCompact(),
|
||||||
"concat": interpolationFuncConcat(),
|
"concat": interpolationFuncConcat(),
|
||||||
|
"distinct": interpolationFuncDistinct(),
|
||||||
"element": interpolationFuncElement(),
|
"element": interpolationFuncElement(),
|
||||||
"file": interpolationFuncFile(),
|
"file": interpolationFuncFile(),
|
||||||
"format": interpolationFuncFormat(),
|
"format": interpolationFuncFormat(),
|
||||||
|
@ -71,7 +72,6 @@ func Funcs() map[string]ast.Function {
|
||||||
"lower": interpolationFuncLower(),
|
"lower": interpolationFuncLower(),
|
||||||
"md5": interpolationFuncMd5(),
|
"md5": interpolationFuncMd5(),
|
||||||
"uuid": interpolationFuncUUID(),
|
"uuid": interpolationFuncUUID(),
|
||||||
"uniq": interpolationFuncUniq(),
|
|
||||||
"replace": interpolationFuncReplace(),
|
"replace": interpolationFuncReplace(),
|
||||||
"sha1": interpolationFuncSha1(),
|
"sha1": interpolationFuncSha1(),
|
||||||
"sha256": interpolationFuncSha256(),
|
"sha256": interpolationFuncSha256(),
|
||||||
|
@ -383,9 +383,9 @@ func interpolationFuncIndex() ast.Function {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// interpolationFuncUniq implements the "uniq" function that
|
// interpolationFuncDistinct implements the "distinct" function that
|
||||||
// removes duplicate elements from a list.
|
// removes duplicate elements from a list.
|
||||||
func interpolationFuncUniq() ast.Function {
|
func interpolationFuncDistinct() ast.Function {
|
||||||
return ast.Function{
|
return ast.Function{
|
||||||
ArgTypes: []ast.Type{ast.TypeList},
|
ArgTypes: []ast.Type{ast.TypeList},
|
||||||
ReturnType: ast.TypeList,
|
ReturnType: ast.TypeList,
|
||||||
|
@ -395,7 +395,7 @@ func interpolationFuncUniq() ast.Function {
|
||||||
var list []string
|
var list []string
|
||||||
|
|
||||||
if len(args) != 1 {
|
if len(args) != 1 {
|
||||||
return nil, fmt.Errorf("uniq() excepts only one argument.")
|
return nil, fmt.Errorf("distinct() excepts only one argument.")
|
||||||
}
|
}
|
||||||
|
|
||||||
if argument, ok := args[0].([]ast.Variable); ok {
|
if argument, ok := args[0].([]ast.Variable); ok {
|
||||||
|
|
|
@ -261,24 +261,24 @@ func TestInterpolationFuncConcatListOfMaps(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestInterpolateFuncUniq(t *testing.T) {
|
func TestInterpolateFuncDistinct(t *testing.T) {
|
||||||
testFunction(t, testFunctionConfig{
|
testFunction(t, testFunctionConfig{
|
||||||
Cases: []testFunctionCase{
|
Cases: []testFunctionCase{
|
||||||
// 3 duplicates
|
// 3 duplicates
|
||||||
{
|
{
|
||||||
`${uniq(concat(split(",", "user1,user2,user3"), split(",", "user1,user2,user3")))}`,
|
`${distinct(concat(split(",", "user1,user2,user3"), split(",", "user1,user2,user3")))}`,
|
||||||
[]interface{}{"user1", "user2", "user3"},
|
[]interface{}{"user1", "user2", "user3"},
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
// 1 duplicate
|
// 1 duplicate
|
||||||
{
|
{
|
||||||
`${uniq(concat(split(",", "user1,user2,user3"), split(",", "user1,user4")))}`,
|
`${distinct(concat(split(",", "user1,user2,user3"), split(",", "user1,user4")))}`,
|
||||||
[]interface{}{"user1", "user2", "user3", "user4"},
|
[]interface{}{"user1", "user2", "user3", "user4"},
|
||||||
false,
|
false,
|
||||||
},
|
},
|
||||||
// too many args
|
// too many args
|
||||||
{
|
{
|
||||||
`${uniq(concat(split(",", "user1,user2,user3"), split(",", "user1,user4")), "foo")}`,
|
`${distinct(concat(split(",", "user1,user2,user3"), split(",", "user1,user4")), "foo")}`,
|
||||||
nil,
|
nil,
|
||||||
true,
|
true,
|
||||||
},
|
},
|
||||||
|
|
|
@ -114,6 +114,10 @@ The supported built-in functions are:
|
||||||
* `concat(list1, list2)` - Combines two or more lists into a single list.
|
* `concat(list1, list2)` - Combines two or more lists into a single list.
|
||||||
Example: `concat(aws_instance.db.*.tags.Name, aws_instance.web.*.tags.Name)`
|
Example: `concat(aws_instance.db.*.tags.Name, aws_instance.web.*.tags.Name)`
|
||||||
|
|
||||||
|
* `distinct(list)` - Removes duplicate items from a list. Keeps the first
|
||||||
|
occurrence of each element, and removes subsequent occurences.
|
||||||
|
Example: `distinct(var.usernames)`
|
||||||
|
|
||||||
* `element(list, index)` - Returns a single element from a list
|
* `element(list, index)` - Returns a single element from a list
|
||||||
at the given index. If the index is greater than the number of
|
at the given index. If the index is greater than the number of
|
||||||
elements, this function will wrap using a standard mod algorithm.
|
elements, this function will wrap using a standard mod algorithm.
|
||||||
|
|
Loading…
Reference in New Issue