shithub: hugo

Download patch

ref: 58f31d2769ec63aa8dfd4eaad47703ce09b57a96
parent: faa64abdc2d0d676bf59bba5d3aa1b5683b0a57b
author: Bjørn Erik Pedersen <[email protected]>
date: Mon Oct 17 15:30:21 EDT 2016

Consolidate the Param methods

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

--- a/hugolib/node.go
+++ b/hugolib/node.go
@@ -24,8 +24,6 @@
 	jww "github.com/spf13/jwalterweatherman"
 
 	"github.com/spf13/hugo/helpers"
-
-	"github.com/spf13/cast"
 )
 
 type Node struct {
@@ -124,13 +122,9 @@
 
 // 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 {
--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -194,12 +194,13 @@
 // 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
 	}
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -223,8 +223,21 @@
 // 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 {