aboutsummaryrefslogtreecommitdiffstats
path: root/todolist
diff options
context:
space:
mode:
authorStuart Skelton <stuarts@broadbean.com>2017-08-01 12:43:30 +0100
committerStuart Skelton <stuarts@broadbean.com>2017-08-01 12:43:30 +0100
commitbd8acfdea25486e71e4f19ff0703ef59d5ba5dfa (patch)
tree9eb52d9842af3bc6c8c493687aebb98b47b58aa8 /todolist
parentca8ee26484fa425b8228417534aca557bc7f04f6 (diff)
Make the exact date take a filterOn parameter
Diffstat (limited to 'todolist')
-rw-r--r--todolist/date_filter.go20
-rw-r--r--todolist/date_filter_test.go4
2 files changed, 14 insertions, 10 deletions
diff --git a/todolist/date_filter.go b/todolist/date_filter.go
index cccd869..a43e3c8 100644
--- a/todolist/date_filter.go
+++ b/todolist/date_filter.go
@@ -14,6 +14,10 @@ func NewDateFilter(todos []*Todo) *DateFilter {
return &DateFilter{Todos: todos, Location: time.Now().Location()}
}
+func filterOnDue(todo *Todo) string {
+ return todo.Due
+}
+
func (f *DateFilter) FilterDate(input string) []*Todo {
agendaRegex, _ := regexp.Compile(`agenda.*$`)
if agendaRegex.MatchString(input) {
@@ -24,9 +28,9 @@ func (f *DateFilter) FilterDate(input string) []*Todo {
match := r.FindString(input)
switch {
case match == "due tod" || match == "due today":
- return f.filterToday(bod(time.Now()))
+ return f.filterDueToday(bod(time.Now()))
case match == "due tom" || match == "due tomorrow":
- return f.filterTomorrow(bod(time.Now()))
+ return f.filterDueTomorrow(bod(time.Now()))
case match == "due sun" || match == "due sunday":
return f.filterDay(bod(time.Now()), time.Sunday)
case match == "due mon" || match == "due monday":
@@ -68,23 +72,23 @@ func (f *DateFilter) filterAgenda(pivot time.Time) []*Todo {
return ret
}
-func (f *DateFilter) filterToExactDate(pivot time.Time) []*Todo {
+func (f *DateFilter) filterToExactDate(pivot time.Time, filterOn func(*Todo) string) []*Todo {
var ret []*Todo
for _, todo := range f.Todos {
- if todo.Due == pivot.Format("2006-01-02") {
+ if filterOn(todo) == pivot.Format("2006-01-02") {
ret = append(ret, todo)
}
}
return ret
}
-func (f *DateFilter) filterToday(pivot time.Time) []*Todo {
- return f.filterToExactDate(pivot)
+func (f *DateFilter) filterDueToday(pivot time.Time) []*Todo {
+ return f.filterToExactDate(pivot, filterOnDue)
}
-func (f *DateFilter) filterTomorrow(pivot time.Time) []*Todo {
+func (f *DateFilter) filterDueTomorrow(pivot time.Time) []*Todo {
pivot = pivot.AddDate(0, 0, 1)
- return f.filterToExactDate(pivot)
+ return f.filterToExactDate(pivot, filterOnDue)
}
func (f *DateFilter) filterDay(pivot time.Time, day time.Weekday) []*Todo {
diff --git a/todolist/date_filter_test.go b/todolist/date_filter_test.go
index 6dd88f6..a89e27f 100644
--- a/todolist/date_filter_test.go
+++ b/todolist/date_filter_test.go
@@ -17,7 +17,7 @@ func TestFilterToday(t *testing.T) {
todos = append(todos, tomorrowTodo)
filter := NewDateFilter(todos)
- filtered := filter.filterToday(time.Now())
+ filtered := filter.filterDueToday(time.Now())
assert.Equal(1, len(filtered))
assert.Equal(1, filtered[0].Id)
@@ -33,7 +33,7 @@ func TestFilterTomorrow(t *testing.T) {
todos = append(todos, tomorrowTodo)
filter := NewDateFilter(todos)
- filtered := filter.filterTomorrow(time.Now())
+ filtered := filter.filterDueTomorrow(time.Now())
assert.Equal(1, len(filtered))
assert.Equal(2, filtered[0].Id)