hugolib: Support an expiration date - hugo - [fork] hugo port for 9front
 (HTM) git clone git@git.drkhsh.at/hugo.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) Submodules
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit d4156e61277f4a006670a9eb1acba8b98140c5ef
 (DIR) parent 2564f46a685704c459bec5d0100f5111c138c9b4
 (HTM) Author: Hanchen Wang <hanchen.wang@mail.utoronto.ca>
       Date:   Wed, 11 May 2016 10:04:53 -0400
       
       hugolib: Support an expiration date
       
       Diffstat:
         M hugolib/page.go                     |      18 +++++++++++++-----
         M hugolib/site_test.go                |      42 +++++++++++++++++++++++++++++++
       
       2 files changed, 55 insertions(+), 5 deletions(-)
       ---
 (DIR) diff --git a/hugolib/page.go b/hugolib/page.go
       @@ -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)
 (DIR) diff --git a/hugolib/site_test.go b/hugolib/site_test.go
       @@ -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()