accept just a string for a todo task that converts to a struct on parse
This commit is contained in:
@@ -15,3 +15,13 @@ func (todo Todo) Triggered() bool {
|
|||||||
next, err := todo.Schedule.Next(last.time())
|
next, err := todo.Schedule.Next(last.time())
|
||||||
return err == nil && time.Now().After(next)
|
return err == nil && time.Now().After(next)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (todo *Todo) UnmarshalYAML(unmarshal func(interface{}) error) error {
|
||||||
|
*todo = Todo{}
|
||||||
|
if err := unmarshal(&todo.Todo); err == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
type Alt Todo
|
||||||
|
alt := (*Alt)(todo)
|
||||||
|
return unmarshal(alt)
|
||||||
|
}
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ package pttodo
|
|||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
yaml "gopkg.in/yaml.v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestJSONTodo(t *testing.T) {
|
func TestJSONTodo(t *testing.T) {
|
||||||
@@ -41,3 +43,42 @@ func TestJSONTodo(t *testing.T) {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestTodoUnmarshalYAML(t *testing.T) {
|
||||||
|
t.Run("just a string", func(t *testing.T) {
|
||||||
|
var littleRoot struct {
|
||||||
|
Todo Todo
|
||||||
|
}
|
||||||
|
if err := yaml.Unmarshal([]byte(`
|
||||||
|
todo: my full task here
|
||||||
|
`), &littleRoot); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if littleRoot.Todo.Todo != "my full task here" {
|
||||||
|
t.Fatal(littleRoot)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("full struct", func(t *testing.T) {
|
||||||
|
var littleRoot struct {
|
||||||
|
Todo Todo
|
||||||
|
}
|
||||||
|
if err := yaml.Unmarshal([]byte(`
|
||||||
|
todo:
|
||||||
|
todo: the todo part of my task
|
||||||
|
detail: whatever
|
||||||
|
schedule: "* * * * *"
|
||||||
|
`), &littleRoot); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if littleRoot.Todo.Todo != "the todo part of my task" {
|
||||||
|
t.Fatal(littleRoot)
|
||||||
|
}
|
||||||
|
if littleRoot.Todo.Detail != "whatever" {
|
||||||
|
t.Fatal(littleRoot)
|
||||||
|
}
|
||||||
|
if littleRoot.Todo.Schedule != "* * * * *" {
|
||||||
|
t.Fatal(littleRoot)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
@@ -9,6 +9,12 @@ todo:
|
|||||||
todo: task that appeared when 'when'
|
todo: task that appeared when 'when'
|
||||||
schedule: "* * * * *" # or ([0-9]*[a-z])+ for durations, or int for scheduled/deferred
|
schedule: "* * * * *" # or ([0-9]*[a-z])+ for durations, or int for scheduled/deferred
|
||||||
ts: 222
|
ts: 222
|
||||||
|
- todo: short 1
|
||||||
|
- todo: short 2
|
||||||
|
- todo: short 3
|
||||||
|
- todo: short 4
|
||||||
|
- todo: short 5
|
||||||
|
- and this teeny line which is just the line
|
||||||
scheduled:
|
scheduled:
|
||||||
-
|
-
|
||||||
todo: task that will appear when 'when'
|
todo: task that will appear when 'when'
|
||||||
|
|||||||
Reference in New Issue
Block a user