todo-jsonl 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/todo.rb +35 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d377d1c1d58686c97a60bec10e9267eda9bb05204cacfaa9cb63af9d84dd6ab4
|
4
|
+
data.tar.gz: dd458140d3c0267c6e3f5508823eb28cd3e99b719da41ba7e4721005a5e1e896
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2d65cc701711b1fff15a3e630554ddf0e48d0455717d24a179ec504d17b7d0b690736e4c58a8cff614d1813782350d64cba7411b38f8c29fcb1c52162481b73e
|
7
|
+
data.tar.gz: 40132a85f1a25e96a44c1ff45aa98a2a4602562cefcad8b7870b0f87fa9da3260b8c4f554ec1eb9471e920411655174df1f447e31641b5c8794d69c5896cebb3
|
data/bin/todo.rb
CHANGED
@@ -25,6 +25,7 @@
|
|
25
25
|
# SOFTWARE.
|
26
26
|
|
27
27
|
require 'json'
|
28
|
+
require 'date'
|
28
29
|
|
29
30
|
DATE_FORMAT = '%Y-%m-%d'
|
30
31
|
|
@@ -72,6 +73,13 @@ QUERIES = {
|
|
72
73
|
':all' => 'state=\w+'
|
73
74
|
}
|
74
75
|
|
76
|
+
TODAY = DateTime.now
|
77
|
+
|
78
|
+
DUE_DATE_DAYS = ['today', 'tomorrow']
|
79
|
+
(2..6).each do |day|
|
80
|
+
DUE_DATE_DAYS.push((TODAY.to_date + day).strftime('%A').downcase)
|
81
|
+
end
|
82
|
+
|
75
83
|
PRIORITY_FLAG = '*'
|
76
84
|
|
77
85
|
TODO_FILE = "#{ENV['HOME']}/todo.jsonl"
|
@@ -86,6 +94,7 @@ def usage
|
|
86
94
|
* done <tasknumber> mark task as completed
|
87
95
|
* block <tasknumber> mark task as blocked
|
88
96
|
* prio <tasknumber> toggle high priority flag
|
97
|
+
* due <tasknumber> <date> set due date
|
89
98
|
|
90
99
|
* append <tasknumber> <text> append text to task title
|
91
100
|
* rename <tasknumber> <text> rename task
|
@@ -183,6 +192,14 @@ def set_priority(item)
|
|
183
192
|
list(tasks)
|
184
193
|
end
|
185
194
|
|
195
|
+
def due_date(item, date = '')
|
196
|
+
tasks = load_tasks(item)
|
197
|
+
tasks[item][:due] = date.nil? || date.empty? ? nil : Date.parse(date).strftime(DATE_FORMAT)
|
198
|
+
tasks[item][:modified] = Time.now.strftime(DATE_FORMAT)
|
199
|
+
write_tasks(tasks)
|
200
|
+
list(tasks)
|
201
|
+
end
|
202
|
+
|
186
203
|
def list(tasks = nil, patterns = nil)
|
187
204
|
items = {}
|
188
205
|
tasks = tasks || load_tasks
|
@@ -204,7 +221,19 @@ def list(tasks = nil, patterns = nil)
|
|
204
221
|
display_state = colorize(STATES[state], color)
|
205
222
|
title = task[:title].gsub(/@\w+/) { |tag| colorize(tag, :cyan) }
|
206
223
|
priority_flag = task[:priority] ? colorize(PRIORITY_FLAG, :red) : ' '
|
207
|
-
|
224
|
+
due_date = ''
|
225
|
+
if task[:due] && state != 'done'
|
226
|
+
date_diff = (Date.parse(task[:due]) - TODAY.to_date).to_i
|
227
|
+
if date_diff < 0
|
228
|
+
due_date = colorize("(#{date_diff.abs}d overdue)", :red)
|
229
|
+
elsif date_diff == 0 || date_diff == 1
|
230
|
+
due_date = colorize("(#{DUE_DATE_DAYS[date_diff]})", :yellow)
|
231
|
+
else
|
232
|
+
due_date = colorize("(#{DUE_DATE_DAYS[date_diff] || task[:due]})", :magenta) if date_diff > 1
|
233
|
+
end
|
234
|
+
due_date = ' ' + due_date
|
235
|
+
end
|
236
|
+
puts "#{num.to_s.rjust(4, ' ')}:#{priority_flag}#{display_state} #{title}#{due_date}"
|
208
237
|
end
|
209
238
|
puts 'No todos found' if items.empty?
|
210
239
|
end
|
@@ -266,14 +295,16 @@ def read(arguments)
|
|
266
295
|
args.length == 1 ? change_state(args.first.to_i, 'blocked') : list(nil, [':blocked'])
|
267
296
|
when 'prio'
|
268
297
|
set_priority(args.first.to_i) if args.length == 1
|
298
|
+
when 'due'
|
299
|
+
due_date(args.first.to_i, (args[1..-1] || []).join(' ')) unless args.length < 1
|
269
300
|
when 'append'
|
270
|
-
append(args.first.to_i, args[1..-1].join(' ')) unless args.length <
|
301
|
+
append(args.first.to_i, args[1..-1].join(' ')) unless args.length < 2
|
271
302
|
when 'rename'
|
272
|
-
rename(args.first.to_i, args[1..-1].join(' ')) unless args.length <
|
303
|
+
rename(args.first.to_i, args[1..-1].join(' ')) unless args.length < 2
|
273
304
|
when 'del'
|
274
305
|
delete(args.first.to_i) if args.length == 1
|
275
306
|
when 'note'
|
276
|
-
add_note(args.first.to_i, args[1..-1].join(' ')) unless args.length <
|
307
|
+
add_note(args.first.to_i, args[1..-1].join(' ')) unless args.length < 2
|
277
308
|
when 'delnote'
|
278
309
|
delete_note(args.first.to_i) if args.length == 1
|
279
310
|
when 'list'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: todo-jsonl
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gabor Bata
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-10-02 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email:
|