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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/bin/todo.rb +35 -4
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 39c4196d7a61cdddc60d741fd7f872748fee16e6dfac6b0005ad9d790927a6b0
4
- data.tar.gz: ee8ca459774e1df288db13e31cc9883cadb6d5cfabbccb68f4f5174d57e9c35b
3
+ metadata.gz: d377d1c1d58686c97a60bec10e9267eda9bb05204cacfaa9cb63af9d84dd6ab4
4
+ data.tar.gz: dd458140d3c0267c6e3f5508823eb28cd3e99b719da41ba7e4721005a5e1e896
5
5
  SHA512:
6
- metadata.gz: b84db7afa428f64e5028be1e06da854d26c233c0ae85d95df0d7a47f4f645392fd5289580f9342d39642e895e902c84f6896d80747c6f91466a9b614b19d724b
7
- data.tar.gz: 8ce70a368b56dc5df598188e23e0406224258ccfc8066630c0cab7829c0651fba188eb03066e4545eef9e371089c796ef39be1bf110be485b92509d7ef79e69c
6
+ metadata.gz: 2d65cc701711b1fff15a3e630554ddf0e48d0455717d24a179ec504d17b7d0b690736e4c58a8cff614d1813782350d64cba7411b38f8c29fcb1c52162481b73e
7
+ data.tar.gz: 40132a85f1a25e96a44c1ff45aa98a2a4602562cefcad8b7870b0f87fa9da3260b8c4f554ec1eb9471e920411655174df1f447e31641b5c8794d69c5896cebb3
@@ -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
- puts "#{num.to_s.rjust(4, ' ')}:#{priority_flag}#{display_state} #{title}"
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 < 1
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 < 1
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 < 1
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.2
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-09-15 00:00:00.000000000 Z
11
+ date: 2020-10-02 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email: