diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2020-06-19 10:37:37 +0300 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2020-06-19 12:58:58 +0300 |
commit | 82abca32fa8791e526edd820c32c0b8f9d8e0e78 (patch) | |
tree | 6dca74b256e12d11fc0e64a9864e4c1860b0aac4 /resources | |
parent | fc045e12a953aac88b942c25b958c5c0554b252b (diff) |
Add GroupByLastmod
Fixes #7408
Diffstat (limited to 'resources')
-rw-r--r-- | resources/page/pagegroup.go | 14 | ||||
-rw-r--r-- | resources/page/pagegroup_test.go | 37 |
2 files changed, 51 insertions, 0 deletions
diff --git a/resources/page/pagegroup.go b/resources/page/pagegroup.go index fbb6e7e53..2d37a5d4d 100644 --- a/resources/page/pagegroup.go +++ b/resources/page/pagegroup.go @@ -284,6 +284,20 @@ func (p Pages) GroupByExpiryDate(format string, order ...string) (PagesGroup, er return p.groupByDateField(sorter, formatter, order...) } +// GroupByLastmod groups by the given page's Lastmod value in +// the given format and with the given order. +// Valid values for order is asc, desc, rev and reverse. +// For valid format strings, see https://golang.org/pkg/time/#Time.Format +func (p Pages) GroupByLastmod(format string, order ...string) (PagesGroup, error) { + sorter := func(p Pages) Pages { + return p.ByLastmod() + } + formatter := func(p Page) string { + return p.Lastmod().Format(format) + } + return p.groupByDateField(sorter, formatter, order...) +} + // GroupByParamDate groups by a date set as a param on the page in // the given format and with the given order. // Valid values for order is asc, desc, rev and reverse. diff --git a/resources/page/pagegroup_test.go b/resources/page/pagegroup_test.go index 26a25c381..fe6dbf94b 100644 --- a/resources/page/pagegroup_test.go +++ b/resources/page/pagegroup_test.go @@ -49,6 +49,7 @@ func preparePageGroupTestPages(t *testing.T) Pages { p.date = cast.ToTime(src.date) p.pubDate = cast.ToTime(src.date) p.expiryDate = cast.ToTime(src.date) + p.lastMod = cast.ToTime(src.date).AddDate(3, 0, 0) p.params["custom_param"] = src.param p.params["custom_date"] = cast.ToTime(src.date) pages = append(pages, p) @@ -378,6 +379,42 @@ func TestGroupByParamDate(t *testing.T) { } } +func TestGroupByLastmod(t *testing.T) { + t.Parallel() + pages := preparePageGroupTestPages(t) + expect := PagesGroup{ + {Key: "2015-04", Pages: Pages{pages[4], pages[2], pages[0]}}, + {Key: "2015-03", Pages: Pages{pages[3]}}, + {Key: "2015-01", Pages: Pages{pages[1]}}, + } + + groups, err := pages.GroupByLastmod("2006-01") + if err != nil { + t.Fatalf("Unable to make PagesGroup array: %s", err) + } + if !reflect.DeepEqual(groups, expect) { + t.Errorf("PagesGroup has unexpected groups. It should be %#v, got %#v", expect, groups) + } +} + +func TestGroupByLastmodInReverseOrder(t *testing.T) { + t.Parallel() + pages := preparePageGroupTestPages(t) + expect := PagesGroup{ + {Key: "2015-01", Pages: Pages{pages[1]}}, + {Key: "2015-03", Pages: Pages{pages[3]}}, + {Key: "2015-04", Pages: Pages{pages[0], pages[2], pages[4]}}, + } + + groups, err := pages.GroupByLastmod("2006-01", "asc") + if err != nil { + t.Fatalf("Unable to make PagesGroup array: %s", err) + } + if !reflect.DeepEqual(groups, expect) { + t.Errorf("PagesGroup has unexpected groups. It should be\n%#v, got\n%#v", expect, groups) + } +} + func TestGroupByParamDateInReverseOrder(t *testing.T) { t.Parallel() pages := preparePageGroupTestPages(t) |