Adding support for date field in front matter as date (as TOML provides)

This commit is contained in:
spf13 2013-10-24 15:18:57 -07:00
parent f3c816eabd
commit 471fb1ff69
3 changed files with 31 additions and 21 deletions

View file

@ -8,10 +8,35 @@ import (
"time" "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 { func interfaceToStringToDate(i interface{}) time.Time {
s := interfaceToString(i) 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.RFC3339,
time.RFC1123Z, time.RFC1123Z,
time.RFC1123, time.RFC1123,
@ -24,11 +49,7 @@ func interfaceToStringToDate(i interface{}) time.Time {
"02 Jan 06 15:04 MST", "02 Jan 06 15:04 MST",
"2006-01-02", "2006-01-02",
"02 Jan 2006", "02 Jan 2006",
}); e == nil { })
return d
}
return time.Unix(0, 0)
} }
// TODO remove this and return a proper error. // TODO remove this and return a proper error.
@ -118,17 +139,6 @@ func interfaceToInt(i interface{}) int {
return 0 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 { func interfaceToString(i interface{}) string {
switch s := i.(type) { switch s := i.(type) {
case string: case string:

View file

@ -348,7 +348,7 @@ func (page *Page) update(f interface{}) error {
case "keywords": case "keywords":
page.Keywords = interfaceArrayToStringArray(v) page.Keywords = interfaceArrayToStringArray(v)
case "date", "pubdate": case "date", "pubdate":
page.Date = interfaceToStringToDate(v) page.Date = interfaceToTime(v)
case "draft": case "draft":
page.Draft = interfaceToBool(v) page.Draft = interfaceToBool(v)
case "layout": case "layout":
@ -384,7 +384,7 @@ func (page *Page) update(f interface{}) error {
for i, u := range vvv { for i, u := range vvv {
a[i] = interfaceToString(u) a[i] = interfaceToString(u)
} }
page.Params[strings.ToLower(k)] = a page.Params[loki] = a
} }
} }
} }

View file

@ -75,8 +75,8 @@ Page With Date HugoLong`
func TestDegenerateDateFrontMatter(t *testing.T) { func TestDegenerateDateFrontMatter(t *testing.T) {
p, _ := ReadFrom(strings.NewReader(PAGE_WITH_INVALID_DATE), "page/with/invalid/date") p, _ := ReadFrom(strings.NewReader(PAGE_WITH_INVALID_DATE), "page/with/invalid/date")
if p.Date != time.Unix(0, 0) { if p.Date != *new(time.Time) {
t.Fatalf("Date should be set to computer epoch. Got: %s", p.Date) t.Fatalf("Date should be set to time.Time zero value. Got: %s", p.Date)
} }
} }