Add handling for publishDates (which will be ignored if in the future). Fixed #260

This commit is contained in:
spf13
2014-05-29 00:48:40 -04:00
parent 4ebaec8906
commit c502f078bc
4 changed files with 81 additions and 3 deletions

View File

@@ -44,6 +44,7 @@ type Page struct {
Params map[string]interface{}
contentType string
Draft bool
PublishDate time.Time
Aliases []string
Tmpl Template
Markup string
@@ -276,6 +277,15 @@ func (p *Page) LinkTitle() string {
}
}
func (page *Page) ShouldBuild() bool {
if viper.GetBool("BuildFuture") || page.PublishDate.IsZero() || page.PublishDate.Before(time.Now()) {
if viper.GetBool("BuildDrafts") || !page.Draft {
return true
}
}
return false
}
func (p *Page) Permalink() (string, error) {
link, err := p.permalink()
if err != nil {
@@ -323,8 +333,10 @@ func (page *Page) update(f interface{}) error {
page.contentType = cast.ToString(v)
case "keywords":
page.Keywords = cast.ToStringSlice(v)
case "date", "pubdate":
case "date":
page.Date = cast.ToTime(v)
case "publishdate", "pubdate":
page.PublishDate = cast.ToTime(v)
case "draft":
page.Draft = cast.ToBool(v)
case "layout":

View File

@@ -344,7 +344,7 @@ func (s *Site) CreatePages() (err error) {
return err
}
if viper.GetBool("BuildDrafts") || !page.Draft {
if page.ShouldBuild() {
s.Pages = append(s.Pages, page)
}

View File

@@ -219,6 +219,66 @@ func TestTargetPath(t *testing.T) {
}
}
func TestDraftAndFutureRender(t *testing.T) {
files := make(map[string][]byte)
target := &target.InMemoryTarget{Files: files}
sources := []source.ByteSource{
{"sect/doc1.md", []byte("---\ntitle: doc1\ndraft: true\npublishdate: \"2414-05-29\"\n---\n# doc1\n*some content*"), "sect"},
{"sect/doc2.md", []byte("---\ntitle: doc2\ndraft: true\npublishdate: \"2012-05-29\"\n---\n# doc2\n*some content*"), "sect"},
{"sect/doc3.md", []byte("---\ntitle: doc3\ndraft: false\npublishdate: \"2414-05-29\"\n---\n# doc3\n*some content*"), "sect"},
{"sect/doc4.md", []byte("---\ntitle: doc4\ndraft: false\npublishdate: \"2012-05-29\"\n---\n# doc4\n*some content*"), "sect"},
}
siteSetup := func() *Site {
s := &Site{
Target: target,
Source: &source.InMemorySource{ByteSource: sources},
}
s.initializeSiteInfo()
if err := s.CreatePages(); err != nil {
t.Fatalf("Unable to create pages: %s", err)
}
return s
}
viper.Set("baseurl", "http://auth/bub")
// Testing Defaults.. Only draft:true and publishDate in the past should be rendered
s := siteSetup()
if len(s.Pages) != 1 {
t.Fatal("Draft or Future dated content published unexpectedly")
}
// only publishDate in the past should be rendered
viper.Set("BuildDrafts", true)
s = siteSetup()
if len(s.Pages) != 2 {
t.Fatal("Future Dated Posts published unexpectedly")
}
// drafts should not be rendered, but all dates should
viper.Set("BuildDrafts", false)
viper.Set("BuildFuture", true)
s = siteSetup()
if len(s.Pages) != 2 {
t.Fatal("Draft posts published unexpectedly")
}
// all 4 should be included
viper.Set("BuildDrafts", true)
viper.Set("BuildFuture", true)
s = siteSetup()
if len(s.Pages) != 4 {
t.Fatal("Drafts or Future posts not included as expected")
}
//setting defaults back
viper.Set("BuildDrafts", false)
viper.Set("BuildFuture", false)
}
func TestSkipRender(t *testing.T) {
files := make(map[string][]byte)
target := &target.InMemoryTarget{Files: files}