Adding support for date field in front matter as date (as TOML provides)
authorspf13 <steve.francia@gmail.com>
Thu, 24 Oct 2013 22:18:57 +0000 (15:18 -0700)
committerspf13 <steve.francia@gmail.com>
Thu, 24 Oct 2013 22:18:57 +0000 (15:18 -0700)
hugolib/metadata.go
hugolib/page.go
hugolib/page_time_integration_test.go

index 222edf109ff245311d94fe550ed075ca6b53f944..a398fffe892df1caebdcc100825011650618b6c1 100644 (file)
@@ -8,10 +8,35 @@ import (
        "time"
 )
 
+func interfaceToTime(i interface{}) time.Time {
+       switch s := i.(type) {
+       case time.Time:
+               return s
+       case string:
+               d, e := stringToDate(s)
+               if e == nil {
+                       return d
+               }
+               errorf("Invalid Time/Date format")
+       default:
+               errorf("Only Time is supported for this key")
+       }
+
+       return *new(time.Time)
+}
+
 func interfaceToStringToDate(i interface{}) time.Time {
        s := interfaceToString(i)
 
-       if d, e := parseDateWith(s, []string{
+       if d, e := stringToDate(s); e == nil {
+               return d
+       }
+
+       return time.Unix(0, 0)
+}
+
+func stringToDate(s string) (time.Time, error) {
+       return parseDateWith(s, []string{
                time.RFC3339,
                time.RFC1123Z,
                time.RFC1123,
@@ -24,11 +49,7 @@ func interfaceToStringToDate(i interface{}) time.Time {
                "02 Jan 06 15:04 MST",
                "2006-01-02",
                "02 Jan 2006",
-       }); e == nil {
-               return d
-       }
-
-       return time.Unix(0, 0)
+       })
 }
 
 // TODO remove this and return a proper error.
@@ -118,17 +139,6 @@ func interfaceToInt(i interface{}) int {
        return 0
 }
 
-func interfaceToTime(i interface{}) time.Time {
-       switch s := i.(type) {
-       case time.Time:
-               return s
-       default:
-               errorf("Only Time is supported for this key")
-       }
-
-       return *new(time.Time)
-}
-
 func interfaceToString(i interface{}) string {
        switch s := i.(type) {
        case string:
index 4acd902f2fee2f237a9b1138c3be924f6bee7cb1..b8a2d45b7b031f5319e40de9359cd867544c5a1e 100644 (file)
@@ -348,7 +348,7 @@ func (page *Page) update(f interface{}) error {
                case "keywords":
                        page.Keywords = interfaceArrayToStringArray(v)
                case "date", "pubdate":
-                       page.Date = interfaceToStringToDate(v)
+                       page.Date = interfaceToTime(v)
                case "draft":
                        page.Draft = interfaceToBool(v)
                case "layout":
@@ -384,7 +384,7 @@ func (page *Page) update(f interface{}) error {
                                        for i, u := range vvv {
                                                a[i] = interfaceToString(u)
                                        }
-                                       page.Params[strings.ToLower(k)] = a
+                                       page.Params[loki] = a
                                }
                        }
                }
index 3053bea207ee4b2f680a06bfb4399ac6817b95e3..7682c5f9c328bed826e526f0494cab3bc1a9acac 100644 (file)
@@ -75,8 +75,8 @@ Page With Date HugoLong`
 
 func TestDegenerateDateFrontMatter(t *testing.T) {
        p, _ := ReadFrom(strings.NewReader(PAGE_WITH_INVALID_DATE), "page/with/invalid/date")
-       if p.Date != time.Unix(0, 0) {
-               t.Fatalf("Date should be set to computer epoch.  Got: %s", p.Date)
+       if p.Date != *new(time.Time) {
+               t.Fatalf("Date should be set to time.Time zero value.  Got: %s", p.Date)
        }
 }