hugolib: Allow arrays of arrays in frontmatter Params
authorCameron Moore <moorereason@gmail.com>
Wed, 28 Dec 2016 02:08:24 +0000 (20:08 -0600)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Fri, 6 Jan 2017 10:56:22 +0000 (11:56 +0100)
Fixes #2752

hugolib/page.go
hugolib/page_test.go

index fa46ed77b2399442b78f10615dc1a725b44ffa74..50c10e9359655a51faaed28efa4f7d689830e878 100644 (file)
@@ -1018,6 +1018,8 @@ func (p *Page) update(f interface{}) error {
                                                        p.Params[loki] = vvv
                                                case map[string]interface{}: // Proper parsing structured array from JSON based FrontMatter
                                                        p.Params[loki] = vvv
+                                               case []interface{}:
+                                                       p.Params[loki] = vvv
                                                default:
                                                        a := make([]string, len(vvv))
                                                        for i, u := range vvv {
index 2098063b48c485f053865eccb4ed19fd87c6cb9e..9de2898d57f23e36bfa288416e509f881189e960 100644 (file)
@@ -1261,6 +1261,61 @@ func TestDraft(t *testing.T) {
        }
 }
 
+var pagesParamsTemplate = []string{`+++
+title = "okay"
+draft = false
+tags = [ "hugo", "web" ]
+social= [
+  [ "a", "#" ],
+  [ "b", "#" ],
+]
++++
+some content
+`,
+       `---
+title: "okay"
+draft: false
+tags:
+  - hugo
+  - web
+social:
+  - - a
+    - "#"
+  - - b
+    - "#"
+---
+some content
+`,
+       `{
+       "title": "okay",
+       "draft": false,
+       "tags": [ "hugo", "web" ],
+       "social": [
+               [ "a", "#" ],
+               [ "b", "#" ]
+       ]
+}
+some content
+`,
+}
+
+func TestPageParams(t *testing.T) {
+       want := map[string]interface{}{
+               "tags": []string{"hugo", "web"},
+               // Issue #2752
+               "social": []interface{}{
+                       []interface{}{"a", "#"},
+                       []interface{}{"b", "#"},
+               },
+       }
+
+       for i, c := range pagesParamsTemplate {
+               p, err := NewPageFrom(strings.NewReader(c), "content/post/params.md")
+               require.NoError(t, err, "err during parse", "#%d", i)
+               assert.Equal(t, want, p.Params, "#%d", i)
+       }
+}
+
 func TestPageSimpleMethods(t *testing.T) {
        for i, this := range []struct {
                assertFunc func(p *Page) bool