hugolib: Add sort ByExpiryDate function
authorHanchen Wang <hanchen.wang@mail.utoronto.ca>
Wed, 11 May 2016 14:08:48 +0000 (10:08 -0400)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Tue, 14 Jun 2016 13:45:25 +0000 (15:45 +0200)
hugolib/pageSort.go
hugolib/pageSort_test.go

index 40c18e4c648b0cf5263a2e78aaccd2b492362193..248e3ed5dd1a76315017a059d1983f5b75bf3288 100644 (file)
@@ -158,6 +158,24 @@ func (p Pages) ByPublishDate() Pages {
        return pages
 }
 
+// ByExpiryDate sorts the Pages by publish date and returns a copy.
+//
+// Adjacent invocactions on the same receiver will return a cached result.
+//
+// This may safely be executed  in parallel.
+func (p Pages) ByExpiryDate() Pages {
+
+       key := "pageSort.ByExpiryDate"
+
+       expDate := func(p1, p2 *Page) bool {
+               return p1.ExpiryDate.Unix() < p2.ExpiryDate.Unix()
+       }
+
+       pages, _ := spc.get(key, p, pageBy(expDate).Sort)
+
+       return pages
+}
+
 // ByLastmod sorts the Pages by the last modification date and returns a copy.
 //
 // Adjacent invocactions on the same receiver will return a cached result.
index f3fecb0beadd21b1083c60c5baac8ff10b3d2228..7f0e89091ede5fbad5ec3ee636f863948cfe789a 100644 (file)
@@ -68,6 +68,7 @@ func TestSortByN(t *testing.T) {
                {(Pages).ByLinkTitle, func(p Pages) bool { return p[0].LinkTitle() == "abl" }},
                {(Pages).ByDate, func(p Pages) bool { return p[0].Date == d3 }},
                {(Pages).ByPublishDate, func(p Pages) bool { return p[0].PublishDate == d3 }},
+               {(Pages).ByExpiryDate, func(p Pages) bool { return p[0].ExpiryDate == d3 }},
                {(Pages).ByLastmod, func(p Pages) bool { return p[1].Lastmod == d2 }},
                {(Pages).ByLength, func(p Pages) bool { return p[0].Content == "b_content" }},
        } {
@@ -122,6 +123,7 @@ func setSortVals(dates [3]time.Time, titles [3]string, weights [3]int, pages Pag
                // make sure we compare apples and ... apples ...
                pages[len(dates)-1-i].linkTitle = pages[i].Title + "l"
                pages[len(dates)-1-i].PublishDate = dates[i]
+               pages[len(dates)-1-i].ExpiryDate = dates[i]
                pages[len(dates)-1-i].Content = template.HTML(titles[i] + "_content")
        }
        lastLastMod := pages[2].Lastmod