Skip to content

Commit b122ae9

Browse files
authored
Merge pull request #130 from hackberrydev/event-with-body
Add support for body for events
2 parents c15e270 + 18da9e4 commit b122ae9

5 files changed

Lines changed: 77 additions & 13 deletions

File tree

src/event.janet

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
### ————————————————————————————————————————————————————————————————————————————
1+
### ————————————————————————————————————————————————————————————————————————————————————————————————
22
### This module implements event entity and related functions.
33

4-
(defn build-event [text]
5-
{:text text})
4+
(defn build-event [title &opt body]
5+
{:title title :body body})

src/plan/parser.janet

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,15 @@
2727
:events
2828
{:main (group (any :event))
2929
:event
30-
{:main (replace (* :event-begin :text-line (? "\n")) ,event/build-event)
31-
:event-begin (* "- " (not "["))}}}}
30+
{:main (replace (* :event-begin
31+
:text-line
32+
(? "\n")
33+
:event-body
34+
(? "\n"))
35+
,event/build-event)
36+
:event-begin (* "- " (not "["))
37+
:event-body {:main (group (any :event-body-line))
38+
:event-body-line (* " " :text-line (? "\n"))}}}}}
3239
:tasks
3340
{:main (group (any :task))
3441
:task
@@ -78,7 +85,7 @@
7885
plan
7986
{:serialize-empty-inbox serialize-empty-inbox})]
8087
(if (= (lines-count parsed-plan-string) (lines-count plan-string))
81-
{:plan plan}
88+
{:plan plan :errors []}
8289
{:errors [(string "Plan can not be parsed: last parsed line is line "
8390
(lines-count parsed-plan-string {:ignore-whitespace false}))]}))
8491
{:errors ["Plan can not be parsed"]}))

src/plan/serializer.janet

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,30 @@
33

44
(import ../date)
55

6-
(def task-body-indentation " ")
6+
(def body-indentation " ")
77

88
(defn- plan-title [plan]
99
(string "# " (plan :title)))
1010

1111
(defn- checkbox [done]
1212
(if done "[X]" "[ ]"))
1313

14+
(defn- serialize-event-title [event]
15+
(string "- " (event :title)))
16+
17+
(defn- serialize-event-body [event]
18+
(def body (event :body))
19+
(if (or (nil? body) (empty? body))
20+
""
21+
(string "\n"
22+
(string/join
23+
(map (fn [line] (string body-indentation line)) body)
24+
"\n"))))
25+
1426
(defn- serialize-event [event]
15-
(string "- " (event :text)))
27+
(string
28+
(serialize-event-title event)
29+
(serialize-event-body event)))
1630

1731
(defn- task-mark [task]
1832
(if (task :missed-on)
@@ -28,11 +42,12 @@
2842
""
2943
(string "\n"
3044
(string/join
31-
(map (fn [line] (string task-body-indentation line)) body)
45+
(map (fn [line] (string body-indentation line)) body)
3246
"\n"))))
3347

3448
(defn- serialize-task [task]
35-
(string (serialize-task-title task)
49+
(string
50+
(serialize-task-title task)
3651
(serialize-task-body task)))
3752

3853
(defn- plan-inbox [plan serialize-empty-inbox]

test/plan/parser_test.janet

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@
2828
- [x] #work - Review open pull requests
2929
- [x] #work - Fix the flaky test
3030
```)
31-
(def plan ((parse plan-string) :plan))
31+
(def parse-result (parse plan-string))
32+
(def plan (parse-result :plan))
3233
(def inbox (plan :inbox))
3334
(def day-1 ((plan :days) 0))
3435
(def day-2 ((plan :days) 1))
@@ -51,7 +52,9 @@
5152
(test (not (task :done)) true)
5253
(test (d/equal? (d/date 2020 7 30) (task :missed-on)) true))
5354
(test (= (d/date 2020 7 31) (day-2 :date)) true)
54-
(test (= {:text "Talked to Mike & Molly"} ((day-2 :events) 0)) true)
55+
(let [event ((day-2 :events) 0)]
56+
(test (event :title) "Talked to Mike & Molly")
57+
(test (empty? (event :body)) true))
5558
(let [task ((day-2 :tasks) 0)]
5659
(test (task :title) "#work - Review open pull requests")
5760
(test (task :done) true))
@@ -182,6 +185,44 @@
182185
(test (= (d/date 2020 8 1) (day-1 :date)) true)
183186
(test (= (d/date 2020 7 31) (day-2 :date)) true))
184187

188+
(deftest "parses a plan with an event that has a body"
189+
(def plan-string
190+
```
191+
# Main TODO
192+
193+
## 2020-07-30, Thursday
194+
195+
- Talked to Mike & Molly
196+
- They moved to a new apartment
197+
- [x] Fix the lamp
198+
```)
199+
(def parse-result (parse plan-string))
200+
(def plan (parse-result :plan))
201+
(test (length (plan :days)) 1)
202+
(let [day ((plan :days) 0)
203+
event ((day :events) 0)
204+
task ((day :tasks) 0)]
205+
(test (= (d/date 2020 7 30) (day :date)) true)
206+
(test (event :title) "Talked to Mike & Molly")
207+
(test ((event :body) 0) "- They moved to a new apartment")
208+
(test (task :title) "Fix the lamp")
209+
(test (task :done) true)))
210+
211+
(deftest "parses a plan with an event without any tasks"
212+
(def plan-string
213+
```
214+
# Main TODO
215+
216+
## 2020-07-30, Thursday
217+
218+
- Talked to Mike & Molly
219+
```)
220+
(def plan ((parse plan-string) :plan))
221+
(test (length (plan :days)) 1)
222+
(let [day ((plan :days) 0)
223+
event ((day :events) 0)]
224+
(test (event :title) "Talked to Mike & Molly")))
225+
185226
(deftest "returns an error when the plan can't be parsed"
186227
(def plan-string
187228
```

test/plan/serializer_test.janet

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
:days @[(day/build-day (d/date 2020 8 3))
1616
(day/build-day (d/date 2020 8 2))
1717
(day/build-day (d/date 2020 8 1)
18-
@[(event/build-event "Talked to Mike")]
18+
@[(event/build-event "Talked to Mike" @["- He has a new car"])]
1919
@[(task/build-task "Develop photos" false)
2020
(task/build-task "Pay bills" true @["- Electricity" "- Water"])
2121
(task/build-missed-task "Organize photos" (d/date 2020 7 20))])
@@ -38,6 +38,7 @@
3838
## 2020-08-01, Saturday
3939
4040
- Talked to Mike
41+
- He has a new car
4142
- [ ] Develop photos
4243
- [X] Pay bills
4344
- Electricity

0 commit comments

Comments
 (0)