ref: 1bb00b8c194266d5cf3e7497dd383fd43adff9c0
parent: 1de19926640ffc2baa43a9691b5d277a7f22cf49
author: Ross Lawley <[email protected]>
date: Tue Aug 27 06:09:50 EDT 2013
Refactored added RenderThingOrDefault and tests Signed-off-by: Noah Campbell <[email protected]> Conflicts: hugolib/site.go
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -447,13 +447,9 @@
func (s *Site) RenderPages() error {
for i, _ := range s.Pages {
- content, err := s.RenderThing(s.Pages[i], s.Pages[i].Layout())
+ content, err := s.RenderThingOrDefault(s.Pages[i], s.Pages[i].Layout(), "_default/single.html")
if err != nil {
- var err2 error
- content, err2 = s.RenderThing(s.Pages[i], "_default/single.html")
- if err2 != nil {
- return err
- }
+ return err
}
s.Pages[i].RenderedContent = content
}
@@ -549,11 +545,11 @@
n.Data["Pages"] = data
layout := "indexes/" + section + ".html"
- x, err := s.RenderThing(n, layout)
+ content, err := s.RenderThingOrDefault(n, layout, "_default/index.html")
if err != nil {
return err
}
- s.WritePublic(section+"/index.html", x.Bytes())
+ s.WritePublic(section+"/index.html", content.Bytes())
if a := s.Tmpl.Lookup("rss.xml"); a != nil {
// XML Feed
@@ -637,6 +633,18 @@
buffer := new(bytes.Buffer)
err := s.Tmpl.ExecuteTemplate(buffer, layout, d)
return buffer, err
+}
+
+func (s *Site) RenderThingOrDefault(d interface{}, layout string, defaultLayout string) (*bytes.Buffer, error) {
+ content, err := s.RenderThing(d, layout)
+ if err != nil {
+ var err2 error
+ content, err2 = s.RenderThing(d, defaultLayout)
+ if err2 == nil {
+ return content, err2
+ }
+ }
+ return content, err
}
func (s *Site) NewXMLBuffer() *bytes.Buffer {
--- a/hugolib/site_test.go
+++ b/hugolib/site_test.go
@@ -2,6 +2,7 @@
import (
"fmt"
+ "bytes"
"strings"
"testing"
)
@@ -104,8 +105,8 @@
t.Fatalf("Unable to add template")
}
- html, err := s.RenderThing(p, templateName)
- if err != nil {
+ html, err2 := s.RenderThing(p, templateName)
+ if err2 != nil {
t.Errorf("Unable to render html: %s", err)
}
@@ -114,3 +115,47 @@
}
}
}
+
+func TestRenderThingOrDefault(t *testing.T) {
+ tests := []struct {
+ content string
+ missing bool
+ template string
+ expected string
+ }{
+ {PAGE_SIMPLE_TITLE, true, TEMPLATE_TITLE, "simple template"},
+ {PAGE_SIMPLE_TITLE, true, TEMPLATE_FUNC, "simple-template"},
+ {PAGE_SIMPLE_TITLE, false, TEMPLATE_TITLE, "simple template"},
+ {PAGE_SIMPLE_TITLE, false, TEMPLATE_FUNC, "simple-template"},
+ }
+
+ s := new(Site)
+ s.prepTemplates()
+
+ for i, test := range tests {
+ p, err := ReadFrom(strings.NewReader(PAGE_SIMPLE_TITLE), "content/a/file.md")
+ if err != nil {
+ t.Fatalf("Error parsing buffer: %s", err)
+ }
+ templateName := fmt.Sprintf("default%d", i)
+ err = s.addTemplate(templateName, test.template)
+ if err != nil {
+ t.Fatalf("Unable to add template")
+ }
+
+ var html *bytes.Buffer
+ var err2 error
+ if test.missing {
+ html, err2 = s.RenderThingOrDefault(p, "missing", templateName)
+ } else {
+ html, err2 = s.RenderThingOrDefault(p, templateName, "missing_default")
+ }
+
+ if err2 != nil {
+ t.Errorf("Unable to render html: %s", err)
+ }
+
+ if string(html.Bytes()) != test.expected {
+ t.Errorf("Content does not match. Expected '%s', got '%s'", test.expected, html)
+ }
+ }}