hugolib: Support an expiration date

This commit is contained in:
Hanchen Wang 2016-05-11 10:04:53 -04:00 committed by Bjørn Erik Pedersen
parent 2564f46a68
commit d4156e6127
2 changed files with 55 additions and 5 deletions

View file

@ -59,6 +59,7 @@ type Page struct {
Truncated bool
Draft bool
PublishDate time.Time
ExpiryDate time.Time
Markup string
extension string
contentType string
@ -467,7 +468,8 @@ func (p *Page) LinkTitle() string {
}
func (p *Page) ShouldBuild() bool {
if viper.GetBool("BuildFuture") || p.PublishDate.IsZero() || p.PublishDate.Before(time.Now()) {
if (viper.GetBool("BuildFuture") || p.PublishDate.IsZero() || p.PublishDate.Before(time.Now())) &&
(viper.GetBool("BuildExpired") || p.ExpiryDate.IsZero() || p.ExpiryDate.After(time.Now())) {
if viper.GetBool("BuildDrafts") || !p.Draft {
return true
}
@ -480,10 +482,11 @@ func (p *Page) IsDraft() bool {
}
func (p *Page) IsFuture() bool {
if p.PublishDate.Before(time.Now()) {
return false
}
return true
return p.PublishDate.After(time.Now())
}
func (p *Page) IsExpired() bool {
return p.ExpiryDate.Before(time.Now())
}
func (p *Page) Permalink() (string, error) {
@ -564,6 +567,11 @@ func (p *Page) update(f interface{}) error {
if err != nil {
jww.ERROR.Printf("Failed to parse publishdate '%v' in page %s", v, p.File.Path())
}
case "expirydate", "unpublishdate":
p.ExpiryDate, err = cast.ToTimeE(v)
if err != nil {
jww.ERROR.Printf("Failed to parse expirydate '%v' in page %s", v, p.File.Path())
}
case "draft":
draft = new(bool)
*draft = cast.ToBool(v)

View file

@ -296,6 +296,48 @@ func TestDraftAndFutureRender(t *testing.T) {
viper.Set("BuildFuture", false)
}
func TestFutureExpirationRender(t *testing.T) {
viper.Reset()
defer viper.Reset()
hugofs.InitMemFs()
sources := []source.ByteSource{
{filepath.FromSlash("sect/doc3.md"), []byte("---\ntitle: doc1\nexpirydate: \"2400-05-29\"\n---\n# doc1\n*some content*")},
{filepath.FromSlash("sect/doc4.md"), []byte("---\ntitle: doc2\nexpirydate: \"2000-05-29\"\n---\n# doc2\n*some content*")},
}
siteSetup := func() *Site {
s := &Site{
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")
s := siteSetup()
if len(s.Pages) != 1 {
if len(s.Pages) > 1 {
t.Fatal("Expired content published unexpectedly")
}
if len(s.Pages) < 1 {
t.Fatal("Valid content expired unexpectedly")
}
}
if s.Pages[0].Title == "doc2" {
t.Fatal("Expired content published unexpectedly")
}
}
// Issue #957
func TestCrossrefs(t *testing.T) {
hugofs.InitMemFs()