Skip to content

Commit

Permalink
Consolidate the Param methods
Browse files Browse the repository at this point in the history
Maps in Viper, Hugo's config backing store, is now properly lower-cased not just on top level, the current situation.

While this is mostly a good thing, as you don't need to know the original casing to look up a value, it will be breaking for people doing direct lookups in the ´Site.Params` map.

We will try to find a solution to this "breakage", but the recommended method to get params values is via the `.Param` methods.

This method is now implemented on `Node`, `Page` and `Site` and is case-insensitive:

* Use `.Param "someKey" ` if you want page param with fall back to site param if not found on page.
* Use `.Site.Param "someKey"` to get a site param

See #2590
  • Loading branch information
bep committed Oct 17, 2016
1 parent faa64ab commit 58f31d2
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 9 deletions.
10 changes: 2 additions & 8 deletions hugolib/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,6 @@ import (
jww "github.com/spf13/jwalterweatherman"

"github.com/spf13/hugo/helpers"

"github.com/spf13/cast"
)

type Node struct {
Expand Down Expand Up @@ -124,13 +122,9 @@ func (n *Node) IsMenuCurrent(menuID string, inme *MenuEntry) bool {

// Param is a convenience method to do lookups in Site's Params map.
//
// This method is also implemented on Page.
// This method is also implemented on Page and SiteInfo.
func (n *Node) Param(key interface{}) (interface{}, error) {
keyStr, err := cast.ToStringE(key)
if err != nil {
return nil, err
}
return n.Site.Params[keyStr], err
return n.Site.Param(key)
}

func (n *Node) Hugo() *HugoInfo {
Expand Down
3 changes: 2 additions & 1 deletion hugolib/page.go
Original file line number Diff line number Diff line change
Expand Up @@ -194,12 +194,13 @@ func (p *Page) IsPage() bool {
// Param is a convenience method to do lookups in Page's and Site's Params map,
// in that order.
//
// This method is also implemented on Node.
// This method is also implemented on Node and SiteInfo.
func (p *Page) Param(key interface{}) (interface{}, error) {
keyStr, err := cast.ToStringE(key)
if err != nil {
return nil, err
}
keyStr = strings.ToLower(keyStr)
if val, ok := p.Params[keyStr]; ok {
return val, nil
}
Expand Down
13 changes: 13 additions & 0 deletions hugolib/site.go
Original file line number Diff line number Diff line change
Expand Up @@ -223,8 +223,21 @@ func newSiteInfoDefaultLanguage(baseURL string, pages ...*Page) *SiteInfo {
// linkedin
type SiteSocial map[string]string

// Param is a convenience method to do lookups in Site's Params map.
//
// This method is also implemented on Page and Node.
func (s *SiteInfo) Param(key interface{}) (interface{}, error) {
keyStr, err := cast.ToStringE(key)
if err != nil {
return nil, err
}
keyStr = strings.ToLower(keyStr)
return s.Params[keyStr], nil
}

// GetParam gets a site parameter value if found, nil if not.
func (s *SiteInfo) GetParam(key string) interface{} {
helpers.Deprecated("SiteInfo", ".GetParam", ".Param")
v := s.Params[strings.ToLower(key)]

if v == nil {
Expand Down

0 comments on commit 58f31d2

Please sign in to comment.