mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-07 20:30:36 -05:00
common/maps: Do not return error on params dot access on incompatible types
This error was introduced in 0.56 and has shown some site breakage in the wild. Fixes #6121
This commit is contained in:
parent
93d02aabe6
commit
e393c6290e
3 changed files with 62 additions and 3 deletions
|
@ -16,8 +16,6 @@ package maps
|
||||||
import (
|
import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
|
||||||
|
|
||||||
"github.com/spf13/cast"
|
"github.com/spf13/cast"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -72,7 +70,7 @@ func traverseNestedParams(keySegments []string, lookupFn func(key string) interf
|
||||||
v, key, owner := traverseParams(rest, m)
|
v, key, owner := traverseParams(rest, m)
|
||||||
return v, key, owner, nil
|
return v, key, owner, nil
|
||||||
default:
|
default:
|
||||||
return nil, "", nil, errors.Errorf("unsupported Params type: %T", result)
|
return nil, "", nil, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -22,10 +22,14 @@ import (
|
||||||
func TestGetNestedParam(t *testing.T) {
|
func TestGetNestedParam(t *testing.T) {
|
||||||
|
|
||||||
m := map[string]interface{}{
|
m := map[string]interface{}{
|
||||||
|
"string": "value",
|
||||||
"first": 1,
|
"first": 1,
|
||||||
"with_underscore": 2,
|
"with_underscore": 2,
|
||||||
"nested": map[string]interface{}{
|
"nested": map[string]interface{}{
|
||||||
"color": "blue",
|
"color": "blue",
|
||||||
|
"nestednested": map[string]interface{}{
|
||||||
|
"color": "green",
|
||||||
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,5 +45,7 @@ func TestGetNestedParam(t *testing.T) {
|
||||||
assert.Equal(1, must("First", "_", m))
|
assert.Equal(1, must("First", "_", m))
|
||||||
assert.Equal(2, must("with_underscore", "_", m))
|
assert.Equal(2, must("with_underscore", "_", m))
|
||||||
assert.Equal("blue", must("nested_color", "_", m))
|
assert.Equal("blue", must("nested_color", "_", m))
|
||||||
|
assert.Equal("green", must("nested.nestednested.color", ".", m))
|
||||||
|
assert.Nil(must("string.name", ".", m))
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1543,3 +1543,58 @@ title: Scratch Me!
|
||||||
b.AssertFileContent("public/index.html", "B: bv")
|
b.AssertFileContent("public/index.html", "B: bv")
|
||||||
b.AssertFileContent("public/scratchme/index.html", "C: cv")
|
b.AssertFileContent("public/scratchme/index.html", "C: cv")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestPageParam(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
b := newTestSitesBuilder(t).WithConfigFile("toml", `
|
||||||
|
|
||||||
|
baseURL = "https://example.org"
|
||||||
|
|
||||||
|
[params]
|
||||||
|
[params.author]
|
||||||
|
name = "Kurt Vonnegut"
|
||||||
|
|
||||||
|
`)
|
||||||
|
b.WithTemplatesAdded("index.html", `
|
||||||
|
|
||||||
|
{{ $withParam := .Site.GetPage "withparam" }}
|
||||||
|
{{ $noParam := .Site.GetPage "noparam" }}
|
||||||
|
{{ $withStringParam := .Site.GetPage "withstringparam" }}
|
||||||
|
|
||||||
|
Author page: {{ $withParam.Param "author.name" }}
|
||||||
|
Author page string: {{ $withStringParam.Param "author.name" }}|
|
||||||
|
Author site config: {{ $noParam.Param "author.name" }}
|
||||||
|
|
||||||
|
`,
|
||||||
|
)
|
||||||
|
|
||||||
|
b.WithContent("withparam.md", `
|
||||||
|
+++
|
||||||
|
title = "With Param!"
|
||||||
|
[author]
|
||||||
|
name = "Ernest Miller Hemingway"
|
||||||
|
|
||||||
|
+++
|
||||||
|
|
||||||
|
`,
|
||||||
|
|
||||||
|
"noparam.md", `
|
||||||
|
---
|
||||||
|
title: "No Param!"
|
||||||
|
---
|
||||||
|
`, "withstringparam.md", `
|
||||||
|
+++
|
||||||
|
title = "With string Param!"
|
||||||
|
author = "Jo Nesbø"
|
||||||
|
|
||||||
|
+++
|
||||||
|
|
||||||
|
`)
|
||||||
|
b.Build(BuildCfg{})
|
||||||
|
|
||||||
|
b.AssertFileContent("public/index.html", "Author page: Ernest Miller Hemingway")
|
||||||
|
b.AssertFileContent("public/index.html", "Author page string: |")
|
||||||
|
b.AssertFileContent("public/index.html", "Author site config: Kurt Vonnegut")
|
||||||
|
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue