mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
Fix Params case handling in where with slices of structs (e.g. Pages)
Fixes #7009
This commit is contained in:
parent
057e5a22af
commit
bca40cf0c9
2 changed files with 28 additions and 1 deletions
|
@ -382,12 +382,21 @@ func (ns *Namespace) checkWhereArray(seqv, kv, mv reflect.Value, path []string,
|
||||||
vvv = reflect.ValueOf(params.Get(path...))
|
vvv = reflect.ValueOf(params.Get(path...))
|
||||||
} else {
|
} else {
|
||||||
vvv = rvv
|
vvv = rvv
|
||||||
for _, elemName := range path {
|
for i, elemName := range path {
|
||||||
var err error
|
var err error
|
||||||
vvv, err = evaluateSubElem(vvv, elemName)
|
vvv, err = evaluateSubElem(vvv, elemName)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if i < len(path)-1 && vvv.IsValid() {
|
||||||
|
if params, ok := vvv.Interface().(maps.Params); ok {
|
||||||
|
// The current path element is the map itself, .Params.
|
||||||
|
vvv = reflect.ValueOf(params.Get(path[i+1:]...))
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -164,6 +164,24 @@ func TestWhere(t *testing.T) {
|
||||||
{1: "a", 2: "m"},
|
{1: "a", 2: "m"},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
// Case insensitive maps.Params
|
||||||
|
// Slice of structs
|
||||||
|
{
|
||||||
|
seq: []TstParams{{params: maps.Params{"i": 0, "color": "indigo"}}, {params: maps.Params{"i": 1, "color": "blue"}}, {params: maps.Params{"i": 2, "color": "green"}}, {params: maps.Params{"i": 3, "color": "blue"}}},
|
||||||
|
key: ".Params.COLOR", match: "blue",
|
||||||
|
expect: []TstParams{{params: maps.Params{"i": 1, "color": "blue"}}, {params: maps.Params{"i": 3, "color": "blue"}}},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
seq: []TstParams{{params: maps.Params{"nested": map[string]interface{}{"color": "indigo"}}}, {params: maps.Params{"nested": map[string]interface{}{"color": "blue"}}}},
|
||||||
|
key: ".Params.NEsTED.COLOR", match: "blue",
|
||||||
|
expect: []TstParams{{params: maps.Params{"nested": map[string]interface{}{"color": "blue"}}}},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
seq: []TstParams{{params: maps.Params{"i": 0, "color": "indigo"}}, {params: maps.Params{"i": 1, "color": "blue"}}, {params: maps.Params{"i": 2, "color": "green"}}, {params: maps.Params{"i": 3, "color": "blue"}}},
|
||||||
|
key: ".Params", match: "blue",
|
||||||
|
expect: []TstParams{},
|
||||||
|
},
|
||||||
|
// Slice of maps
|
||||||
{
|
{
|
||||||
seq: []maps.Params{
|
seq: []maps.Params{
|
||||||
{"a": "a1", "b": "b1"}, {"a": "a2", "b": "b2"},
|
{"a": "a1", "b": "b1"}, {"a": "a2", "b": "b2"},
|
||||||
|
|
Loading…
Reference in a new issue