1
0
Fork 0
mirror of https://github.com/gohugoio/hugo.git synced 2025-04-13 15:15:42 +00: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 
This commit is contained in:
Bjørn Erik Pedersen 2019-07-28 12:31:32 +02:00
parent 93d02aabe6
commit e393c6290e
3 changed files with 62 additions and 3 deletions

View file

@ -16,8 +16,6 @@ package maps
import (
"strings"
"github.com/pkg/errors"
"github.com/spf13/cast"
)
@ -72,7 +70,7 @@ func traverseNestedParams(keySegments []string, lookupFn func(key string) interf
v, key, owner := traverseParams(rest, m)
return v, key, owner, nil
default:
return nil, "", nil, errors.Errorf("unsupported Params type: %T", result)
return nil, "", nil, nil
}
}

View file

@ -22,10 +22,14 @@ import (
func TestGetNestedParam(t *testing.T) {
m := map[string]interface{}{
"string": "value",
"first": 1,
"with_underscore": 2,
"nested": map[string]interface{}{
"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(2, must("with_underscore", "_", m))
assert.Equal("blue", must("nested_color", "_", m))
assert.Equal("green", must("nested.nestednested.color", ".", m))
assert.Nil(must("string.name", ".", m))
}

View file

@ -1543,3 +1543,58 @@ title: Scratch Me!
b.AssertFileContent("public/index.html", "B: bv")
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")
}