syc-task 0.3.2 → 0.4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/README.rdoc +64 -28
- data/bin/syctask +2 -33
- data/lib/syctask/evaluator.rb +21 -1
- data/lib/syctask/scanner.rb +13 -3
- data/lib/syctask/statistics.rb +6 -0
- data/lib/syctask/task_planner.rb +49 -13
- data/lib/syctask/task_service.rb +3 -1
- data/lib/syctask/task_tracker.rb +2 -0
- data/lib/syctask/version.rb +1 -1
- data/lib/syctime/time_util.rb +52 -0
- metadata +132 -112
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZGQ3NGYyZWYwNTk0YmI5NDJlZmY4ZTdiNzEwZTQ2NjUyMTAxMzc3Mw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
OGM5OWNjOGFlNjdlMTZjYTZiMTljMDUwMzgyZTFiYzQ4YTgxY2MzZg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZTkxYjAxY2JmZmNiZDRmMTE0NjlkMDRkY2Y2YmVmMGRjOTFmZGQ5MjdkMTFj
|
10
|
+
NzA0YTUzZjc2NDhiOGYzYTI1ZDkyNDRjOTFhMDBlNjRkZDgzNDI1ZTkzOTk1
|
11
|
+
ZGQ2N2FkMjFkZDUxM2E5OTlkODY1MjM1MDZjNzdmYTE1Yjg4M2M=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
MWM5ODAxOGZiNjZjMjQ3NmVmZWQ1Mzc5NWYyMzcxOGFlMTM1ODZmYmEyMTU4
|
14
|
+
M2MxMGFhNmI2ZDZkODFiMTQ2M2ZiNmE5NzNmMzFmMzE3MjE1ZmU4MzE2NDQx
|
15
|
+
YTU4NzNlMTYyYmYxMWJjM2ZiNWI1NDRkN2NmMzBjNzExMGRjNzg=
|
data/README.rdoc
CHANGED
@@ -58,6 +58,7 @@ list the tasks in a table, e.g. markdown
|
|
58
58
|
Some text before
|
59
59
|
|
60
60
|
@tasks|
|
61
|
+
|
61
62
|
title |description |follow_up |due_date |prio
|
62
63
|
----------------|--------------------------|----------|----------|----
|
63
64
|
Schedule meeting|Invite all developers |2016-09-12|2016-10-12|1
|
@@ -72,13 +73,13 @@ list the tasks in a table, e.g. markdown
|
|
72
73
|
The example above scans all tasks due to the plural 'tasks'. It also scans all
|
73
74
|
tasks that are separated with non-task text and occur after the annotation and
|
74
75
|
confirm to the field structure. Lines that start with '-' will be ignored. So
|
75
|
-
if you want to skip only a
|
76
|
+
if you want to skip only a few tasks within a task list prepend them with '-'.
|
76
77
|
If you have tasks with different fields then you have to add another annotation
|
77
78
|
with the new field structure.
|
78
79
|
|
79
80
|
Possible fields are
|
80
81
|
|
81
|
-
title - the title of the task
|
82
|
+
title - the title of the task - mandatory field!
|
82
83
|
description - the description of the task
|
83
84
|
follow_up - the follow-up date of the task in the form yyyy-mm-dd
|
84
85
|
due_date - the due-date of the task in the form yyyy-mm-dd
|
@@ -86,7 +87,25 @@ Possible fields are
|
|
86
87
|
tags - tags the task is annotated with
|
87
88
|
note - a note for the task
|
88
89
|
|
89
|
-
|
90
|
+
Note: follow_up and due_date can also be written as Follow-up and Due-Date. Also
|
91
|
+
case is ignored.
|
92
|
+
|
93
|
+
As inidcated in the list the title column is mandatory. Without the title column
|
94
|
+
scan will raise an error during a scan.
|
95
|
+
|
96
|
+
Fields that are not part of the above list will be ignored.
|
97
|
+
|
98
|
+
# | Title | Who
|
99
|
+
- | ------------------------------------ | ---
|
100
|
+
1 | Schedule meeting with all developers | Me
|
101
|
+
2 | Write letter to practice writing | You
|
102
|
+
|
103
|
+
In the table only the column Title will be scanned. The '#' and 'Who' column
|
104
|
+
will be ignored during scan. This table is also a table for a minimum scan
|
105
|
+
structure. You need at least to provide a title column so the scan function
|
106
|
+
will recognize the table as a task list.
|
107
|
+
|
108
|
+
Scanning tasks from files
|
90
109
|
|
91
110
|
$ syctask scan 2016-09-10-mom.md 2016-09-09-mom.md
|
92
111
|
|
@@ -241,11 +260,11 @@ Search tasks that match a pattern
|
|
241
260
|
$ syctask list --id "<10" --follow_up ">2013-02-25" --title "My \w task"
|
242
261
|
|
243
262
|
===Inspect tasks
|
244
|
-
Lists each
|
245
|
-
|
263
|
+
Lists each unplanned task and allows to edit, delete, mark as done or plan for
|
264
|
+
today or another day
|
246
265
|
$ syctask inspect
|
247
266
|
0016 Create command for inspection
|
248
|
-
(e)dit, (d)one, de(l)ete, (p)lan, (c)omplete, (s)kip, (q)uit
|
267
|
+
(e)dit, (d)one, de(l)ete, (p)lan, da(t)e, (c)omplete, (s)kip, (b)ack, (q)uit
|
249
268
|
|
250
269
|
===Edit task
|
251
270
|
Edit a task with ID 10 in vi
|
@@ -484,16 +503,16 @@ To print to Dell-B1160w-Mono the following command can be used
|
|
484
503
|
$ syctask schedule | lpr -P Dell-B1160w-Mono
|
485
504
|
|
486
505
|
==Release Notes
|
487
|
-
Version 0.0.1
|
506
|
+
===Version 0.0.1
|
488
507
|
Implementation of new, update, list and done commands.
|
489
508
|
|
490
|
-
Version 0.0.4
|
509
|
+
===Version 0.0.4
|
491
510
|
* delete: deleting tasks or remove tasks from a task plan
|
492
511
|
* plan: plan tasks and add them to the task plan
|
493
512
|
* schedule: create a schedule with work and busy time and assign the tasks from
|
494
513
|
the task plan to the free times
|
495
514
|
|
496
|
-
Version 0.0.6
|
515
|
+
===Version 0.0.6
|
497
516
|
* start: start a task and track the lead time
|
498
517
|
* stop: stop the tracking and print the lead time of the task
|
499
518
|
* start, stop: the task is logged in the ~/.tasks/task.log file when added and
|
@@ -506,10 +525,10 @@ Version 0.0.6
|
|
506
525
|
the provided dates task plan. If both dates are set the task is added to both
|
507
526
|
dates task plans
|
508
527
|
|
509
|
-
Version 0.0.7
|
528
|
+
===Version 0.0.7
|
510
529
|
* updated rdoc
|
511
530
|
|
512
|
-
Version 0.1.15
|
531
|
+
===Version 0.1.15
|
513
532
|
* IDs are now unique independent of the task or project directory. After
|
514
533
|
upgrading from a version 0.0.7 or older the user asked whether to re-index
|
515
534
|
the tasks. It is adviced to tar the tasks before re-indexing with
|
@@ -550,24 +569,25 @@ Version 0.1.15
|
|
550
569
|
mark as done or plan
|
551
570
|
* Update command now has a duration flag to set the task's duration
|
552
571
|
|
553
|
-
Version 0.2.0
|
572
|
+
====Version 0.2.0
|
554
573
|
* Migrated from TestUnit to Minitest
|
555
|
-
* Implemented _timeleap_ {<img src="https://badge.fury.io/rb/timeleap.svg" alt="Gem Version" />}[http://badge.fury.io/rb/timeleap]
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
|
560
|
-
|
561
|
-
|
562
|
-
|
563
|
-
|
564
|
-
|
565
|
-
|
566
|
-
|
567
|
-
|
568
|
-
|
574
|
+
* Implemented _timeleap_ {<img src="https://badge.fury.io/rb/timeleap.svg" alt="Gem Version" />}[http://badge.fury.io/rb/timeleap]
|
575
|
+
which allows to specify additional time distances to yesterday, today
|
576
|
+
tomorrow. Time distances come in two flavors as long and short forms.
|
577
|
+
|
578
|
+
Examples for long forms are
|
579
|
+
- yesterday|today|tomorrow
|
580
|
+
- next|previous_monday|tuesday|...|sunday
|
581
|
+
- monday|tuesday|...|sunday_in|back_1_week|month|year
|
582
|
+
- in|back_10_days|weeks|months|years
|
583
|
+
|
584
|
+
Examples for short forms are
|
585
|
+
- y|tod|tom
|
586
|
+
- n|pmo|tu|..|su
|
587
|
+
- mo|tu|...|sui|b1w|m|y
|
588
|
+
- i|b10d|w|m|y
|
569
589
|
|
570
|
-
Version 0.2.1
|
590
|
+
====Version 0.2.1
|
571
591
|
* Fix a bug in `syctask delete --plan`
|
572
592
|
* Add indicator '>' to task list when task contains notes
|
573
593
|
* Refactor migration from version 0.0.7 and when user has deleted system files.
|
@@ -575,11 +595,27 @@ Version 0.2.1
|
|
575
595
|
also define directories to be excluded. This is especially helpful to omit
|
576
596
|
search in large mounted directories, like from NAS servers.
|
577
597
|
|
578
|
-
Version 0.3.1
|
598
|
+
====Version 0.3.1
|
579
599
|
* Add csv output spearated by ';' to the list command
|
580
600
|
* Fix bug when schedule file is empty
|
581
601
|
* Add scan command to scan tasks from files
|
582
602
|
|
603
|
+
====Version 0.3.2
|
604
|
+
* Fix bugs of missing class lib/syctask/scanner.rb
|
605
|
+
|
606
|
+
====Version 0.4.2
|
607
|
+
* delete command can take now ranges of ids, e.g. 1,2,4-8,5,20-25
|
608
|
+
* inspect can now go back in the task list
|
609
|
+
* inspect will now show the updated task after making changes to the task in
|
610
|
+
edit
|
611
|
+
* inspect allows to specify a follow_up date
|
612
|
+
* scan will ignore columns that are not part of a syctask task
|
613
|
+
* scan recognizes 'Follow-up' as well as 'follow_up' now. That is an underscore
|
614
|
+
can be replaced with '-'
|
615
|
+
* Fix bug when scanning tables that have spaces between separator and column
|
616
|
+
* When tasks.log file is missing `syctask inspect` prints warning with reason
|
617
|
+
why statistics cannot be printed
|
618
|
+
|
583
619
|
==Development
|
584
620
|
Pull from Github and then run
|
585
621
|
|
data/bin/syctask
CHANGED
@@ -212,8 +212,8 @@ command :delete do |c|
|
|
212
212
|
c.flag :plan
|
213
213
|
|
214
214
|
c.desc 'IDs of the tasks to remove'
|
215
|
-
c.arg_name 'ID1,ID2
|
216
|
-
c.flag [:i, :id], :must_match => /^\d+(?:,\d+)*|\d+/
|
215
|
+
c.arg_name 'ID1,ID2,ID3-ID4,...,IDn'
|
216
|
+
c.flag [:i, :id], :must_match => /^\d+(?:,\d+|-\d+)*|\d+/
|
217
217
|
|
218
218
|
c.action do |global_options,options,args|
|
219
219
|
help_now! "You must provide tasks ids to delete" unless options[:id]
|
@@ -710,37 +710,6 @@ on_error do |exception|
|
|
710
710
|
end
|
711
711
|
end
|
712
712
|
|
713
|
-
# Extracts the time out of a time string. Accepts 'today', 'tomorrow',
|
714
|
-
# 'yesterday' or a date in the form 'YYYY-MM-DD'. Returns the date contained in
|
715
|
-
# the time_string or if time = true in a Time object
|
716
|
-
def extract_time(time_string,time=false)
|
717
|
-
time_string = 'today' if time_string.nil?
|
718
|
-
|
719
|
-
if time_string.match(/\d{4}-\d{2}-\d{2}/)
|
720
|
-
date = time_string
|
721
|
-
date = Time.xmlschema("#{time_string}T00:00:00") if time
|
722
|
-
else
|
723
|
-
timeleap = SycTimeleap::TimeLeap.new
|
724
|
-
begin
|
725
|
-
date = timeleap.send(time_string)
|
726
|
-
date = date.to_s unless time
|
727
|
-
rescue NoMethodError
|
728
|
-
help_now! "Arguments may be 'time distances', YYYY-MM-DD or <RETURN>\n\n"+
|
729
|
-
"time distances are:\n"+
|
730
|
-
"* yesterday|today|tomorrow\n"+
|
731
|
-
"* next|previous_monday|tuesday|...|sunday\n"+
|
732
|
-
"* in|back_10_days|weeks|months|years\n"+
|
733
|
-
"* monday|tuesday|...|sunday_in|back_1_day|week|month|year\n"+
|
734
|
-
"Short forms are also possible:\n"+
|
735
|
-
"* y|tod|tom\n"+
|
736
|
-
"* n|pmo|tu|we|th|fr|sa|su\n"+
|
737
|
-
"* i|b10d|w|m|y\n"+
|
738
|
-
"* mo|tu|we|th|fr|sa|sui|b1d|w|m|y"
|
739
|
-
end
|
740
|
-
end
|
741
|
-
date
|
742
|
-
end
|
743
|
-
|
744
713
|
# Add task to task plan
|
745
714
|
def add_task_to_plan(task)
|
746
715
|
if task.options[:follow_up]
|
data/lib/syctask/evaluator.rb
CHANGED
@@ -64,7 +64,7 @@ module Syctask
|
|
64
64
|
# is returned.
|
65
65
|
def includes?(value, pattern)
|
66
66
|
return false if value.nil? or pattern.nil?
|
67
|
-
captures = pattern.scan(CSV_PATTERN)
|
67
|
+
captures = normalize_ranges(pattern).scan(CSV_PATTERN)
|
68
68
|
!captures.find_index(value.to_s).nil?
|
69
69
|
end
|
70
70
|
|
@@ -75,6 +75,26 @@ module Syctask
|
|
75
75
|
!value.match(Regexp.new(regex, true)).nil?
|
76
76
|
end
|
77
77
|
|
78
|
+
# Checks if the pattern contains number ranges then the ranges are
|
79
|
+
# normalized e.g. 1-5 will become 1,2,3,4,5
|
80
|
+
def normalize_ranges(pattern)
|
81
|
+
if pattern.include? "-"
|
82
|
+
pattern.gsub(/\s/, "").split(',').map do |value|
|
83
|
+
if value.include? '-'
|
84
|
+
if value =~ /^\d+-\d+$/
|
85
|
+
a, b = value.split('-')
|
86
|
+
Array(a..b)
|
87
|
+
else
|
88
|
+
value
|
89
|
+
end
|
90
|
+
else
|
91
|
+
value =~ /^\d+$/ ? value.to_i : value
|
92
|
+
end
|
93
|
+
end.uniq.join(',')
|
94
|
+
else
|
95
|
+
pattern
|
96
|
+
end
|
97
|
+
end
|
78
98
|
end
|
79
99
|
|
80
100
|
end
|
data/lib/syctask/scanner.rb
CHANGED
@@ -82,7 +82,10 @@ module Syctask
|
|
82
82
|
# Checks if the 'line' contains task fields. If it contains task fields it
|
83
83
|
# sets the @task_fields and returns true, otherwise returns false
|
84
84
|
def load_task_fields(line)
|
85
|
-
task_fields = line.split(@separator)
|
85
|
+
task_fields = line.split(@separator).map do |field|
|
86
|
+
field.strip.downcase.gsub(/(?<=.)-(?=.)/, "_")
|
87
|
+
end
|
88
|
+
|
86
89
|
if (Syctask::Task::FIELDS & task_fields).empty?
|
87
90
|
false
|
88
91
|
else
|
@@ -101,8 +104,13 @@ module Syctask
|
|
101
104
|
end
|
102
105
|
end
|
103
106
|
|
104
|
-
# Retrieves the 'title' value from the task_values
|
107
|
+
# Retrieves the 'title' value from the task_values. If title column value
|
108
|
+
# is missing an ArgumentError is trown
|
105
109
|
def title_of(task_values)
|
110
|
+
if @task_fields.index(:title).nil?
|
111
|
+
raise ArgumentError, "scan: No 'title' header column found"
|
112
|
+
end
|
113
|
+
|
106
114
|
task_values[@task_fields.index(:title)].strip
|
107
115
|
end
|
108
116
|
|
@@ -114,7 +122,9 @@ module Syctask
|
|
114
122
|
task_fields = @task_fields - [:title]
|
115
123
|
options = {}
|
116
124
|
task_fields.each_with_index do |field, index|
|
117
|
-
|
125
|
+
if Syctask::Task::FIELDS.include?(field.to_s)
|
126
|
+
options[field] = task_values[index].strip
|
127
|
+
end
|
118
128
|
end
|
119
129
|
options
|
120
130
|
end
|
data/lib/syctask/statistics.rb
CHANGED
@@ -19,6 +19,12 @@ module Syctask
|
|
19
19
|
|
20
20
|
# Creates a statistics report
|
21
21
|
def report(file, from="", to=from)
|
22
|
+
unless File.exists? file
|
23
|
+
return sprintf("Warning: Statistics log file %s",
|
24
|
+
file.bright).color(:red) +
|
25
|
+
sprintf(" is missing!\n%sNo statistics available!\n",
|
26
|
+
" "*9).color(:red)
|
27
|
+
end
|
22
28
|
|
23
29
|
from, to, time_log, count_log = logs(file, from, to)
|
24
30
|
working_days = time_log["work"].count.to_s if time_log["work"]
|
data/lib/syctask/task_planner.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'fileutils'
|
2
2
|
require 'rainbow'
|
3
3
|
require_relative '../sycutil/console.rb'
|
4
|
+
require_relative '../syctime/time_util.rb'
|
4
5
|
require_relative 'task_service.rb'
|
5
6
|
require_relative 'environment.rb'
|
6
7
|
|
@@ -8,8 +9,8 @@ module Syctask
|
|
8
9
|
# String that is prompted during planning
|
9
10
|
PROMPT_STRING = '(a)dd, (c)omplete, (s)kip, (q)uit: '
|
10
11
|
# String that is prompted during inspect
|
11
|
-
INSPECT_STRING = '(e)dit, (d)one, de(l)ete, (p)lan, (
|
12
|
-
'(q)uit: '
|
12
|
+
INSPECT_STRING = '(e)dit, (d)one, de(l)ete, (p)lan, da(t)e, (c)omplete, '+
|
13
|
+
'(s)kip, (b)ack, (q)uit: '
|
13
14
|
# String that is prompted during prioritization
|
14
15
|
PRIORITIZE_STRING = 'Task 1 has (h)igher or (l)ower priority, or (q)uit: '
|
15
16
|
|
@@ -31,12 +32,12 @@ module Syctask
|
|
31
32
|
# duration will be set to 30 minutes which equals two time chunks. The
|
32
33
|
# count of planned tasks is returned
|
33
34
|
def plan_tasks(tasks, date=Time.now.strftime("%Y-%m-%d"))
|
34
|
-
|
35
|
+
already_planned_tasks = self.get_tasks(date)
|
36
|
+
tasks = tasks.delete_if { |t| already_planned_tasks.include?(t) }
|
35
37
|
count = 0
|
36
38
|
re_display = false
|
37
39
|
planned = []
|
38
40
|
tasks.each do |task|
|
39
|
-
next if already_planned.find_index {|t| t == task}
|
40
41
|
unless re_display
|
41
42
|
task.print_pretty
|
42
43
|
else
|
@@ -72,12 +73,14 @@ module Syctask
|
|
72
73
|
|
73
74
|
# Inspect allows to edit, delete and mark tasks as done
|
74
75
|
def inspect_tasks(tasks, date=Time.now.strftime("%Y-%m-%d"))
|
75
|
-
|
76
|
+
already_planned_tasks = self.get_tasks(date)
|
77
|
+
tasks = tasks.delete_if { |t| already_planned_tasks.include?(t) }
|
76
78
|
count = 0
|
77
79
|
re_display = false
|
78
80
|
planned = []
|
79
|
-
|
80
|
-
|
81
|
+
index = 0
|
82
|
+
while index < tasks.length
|
83
|
+
task = tasks[index]
|
81
84
|
unless re_display
|
82
85
|
task.print_pretty
|
83
86
|
else
|
@@ -89,20 +92,27 @@ module Syctask
|
|
89
92
|
when 'e'
|
90
93
|
task_file = "#{task.dir}/#{task.id}.task"
|
91
94
|
system "vi #{task_file}" if File.exists? task_file
|
95
|
+
tasks[index] = @service.read(task.dir, task.id)
|
92
96
|
redo
|
93
97
|
when 'd'
|
94
98
|
puts "Enter a note or hit <RETURN>"
|
95
99
|
note = gets.chomp
|
96
100
|
task.done(note)
|
97
101
|
@service.save(task.dir, task)
|
102
|
+
tasks.delete(task)
|
98
103
|
STDOUT.puts sprintf("--> Marked task %d as done",
|
99
104
|
task.id).color(:green)
|
100
105
|
when 'l'
|
101
106
|
print "Confirm delete task (Y/n)? "
|
102
107
|
answer = gets.chomp
|
103
|
-
|
104
|
-
|
105
|
-
|
108
|
+
del = @service.delete(task.dir, {id: task.id.to_s}) if answer == "Y"
|
109
|
+
if del.nil? or del == 0
|
110
|
+
puts sprintf("--> Task not deleted").color(:green)
|
111
|
+
else del > 0
|
112
|
+
tasks.delete(task)
|
113
|
+
puts sprintf("--> Deleted %d task%s",
|
114
|
+
del, del == 1 ? "" : "s").color(:green)
|
115
|
+
end
|
106
116
|
when 'p'
|
107
117
|
duration = 0
|
108
118
|
until duration > 0
|
@@ -114,12 +124,38 @@ module Syctask
|
|
114
124
|
task.options[:follow_up] = date
|
115
125
|
@service.save(task.dir, task)
|
116
126
|
planned << task
|
127
|
+
tasks.delete(task)
|
117
128
|
count += 1
|
129
|
+
when 't'
|
130
|
+
begin
|
131
|
+
print "Date (yyyy-mm-dd or 'time distance', e.g. tom, i2d, nfr): "
|
132
|
+
specific_date = gets.chomp
|
133
|
+
end until valid_date?(specific_date)
|
134
|
+
|
135
|
+
duration = 0
|
136
|
+
until duration > 0
|
137
|
+
print "Duration (1 = 15 minutes, RETURN defaults to 30 minutes): "
|
138
|
+
answer = gets.chomp
|
139
|
+
duration = answer.empty? ? 2 : answer.to_i
|
140
|
+
end
|
141
|
+
|
142
|
+
task.set_duration(units_to_time(duration))
|
143
|
+
task.options[:follow_up] = extract_time(specific_date)
|
144
|
+
@service.save(task.dir, task)
|
145
|
+
if task.options[:follow_up] == date
|
146
|
+
planned << task
|
147
|
+
tasks.delete(task)
|
148
|
+
count += 1
|
149
|
+
else
|
150
|
+
index += 1
|
151
|
+
end
|
118
152
|
when 'c'
|
119
153
|
re_display = true
|
120
154
|
redo
|
155
|
+
when 'b'
|
156
|
+
index -= 1 if index > 0
|
121
157
|
when 's'
|
122
|
-
|
158
|
+
index += 1
|
123
159
|
when 'q'
|
124
160
|
break
|
125
161
|
end
|
@@ -257,8 +293,8 @@ module Syctask
|
|
257
293
|
@todo_today_file = WORK_DIR+"/"+file_name
|
258
294
|
end
|
259
295
|
|
260
|
-
# Save the tasks to
|
261
|
-
# otherwise the tasks are appended
|
296
|
+
# Save the tasks to the todo_today_file. If override is true the file is
|
297
|
+
# overriden otherwise the tasks are appended
|
262
298
|
def save_tasks(tasks, override=false)
|
263
299
|
mode = override ? 'w' : 'a'
|
264
300
|
FileUtils.mkdir_p WORK_DIR unless File.exists? WORK_DIR
|
data/lib/syctask/task_service.rb
CHANGED
@@ -46,7 +46,9 @@ module Syctask
|
|
46
46
|
end
|
47
47
|
|
48
48
|
# Reads the task identified by ID. If no task with ID is found nil is
|
49
|
-
# returned otherwise the task
|
49
|
+
# returned otherwise the task.
|
50
|
+
# Note: This method might return nil even though the task exists. You should
|
51
|
+
# always use #read instead.
|
50
52
|
def read_by_id(id)
|
51
53
|
return nil unless File.exists? Syctask::IDS
|
52
54
|
ids = File.read(Syctask::IDS)
|
data/lib/syctask/task_tracker.rb
CHANGED
data/lib/syctask/version.rb
CHANGED
data/lib/syctime/time_util.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'time'
|
2
|
+
require 'syctimeleap/time_leap.rb'
|
2
3
|
|
3
4
|
# Functions for time operations
|
4
5
|
module Syctime
|
@@ -66,4 +67,55 @@ module Syctime
|
|
66
67
|
time >= from && time <= to
|
67
68
|
end
|
68
69
|
|
70
|
+
# Checks whether the date is a valid date in the form of yyyy-mm-dd. If it's
|
71
|
+
# no valid date false is returned otherwise true
|
72
|
+
def valid_date?(date_string)
|
73
|
+
if date_string.match(/\d{4}-\d{2}-\d{2}/)
|
74
|
+
begin
|
75
|
+
Date.parse(date_string)
|
76
|
+
return true
|
77
|
+
rescue ArgumentError
|
78
|
+
return false
|
79
|
+
end
|
80
|
+
else
|
81
|
+
begin
|
82
|
+
SycTimeleap::TimeLeap.new.send(date_string)
|
83
|
+
return true
|
84
|
+
rescue
|
85
|
+
return false
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
# Extracts the time out of a time string. Accepts 'today', 'tomorrow',
|
91
|
+
# 'yesterday' or a date in the form 'YYYY-MM-DD'. Returns the date contained
|
92
|
+
# in the time_string or if time = true in a Time object
|
93
|
+
def extract_time(time_string,time=false)
|
94
|
+
time_string = 'today' if time_string.nil?
|
95
|
+
|
96
|
+
if time_string.match(/\d{4}-\d{2}-\d{2}/)
|
97
|
+
date = time_string
|
98
|
+
date = Time.xmlschema("#{time_string}T00:00:00") if time
|
99
|
+
else
|
100
|
+
timeleap = SycTimeleap::TimeLeap.new
|
101
|
+
begin
|
102
|
+
date = timeleap.send(time_string)
|
103
|
+
date = date.to_s unless time
|
104
|
+
rescue NoMethodError
|
105
|
+
help_now! "Arguments may be 'time distances', YYYY-MM-DD or <RETURN>\n"+
|
106
|
+
"\ntime distances are:\n"+
|
107
|
+
"* yesterday|today|tomorrow\n"+
|
108
|
+
"* next|previous_monday|tuesday|...|sunday\n"+
|
109
|
+
"* in|back_10_days|weeks|months|years\n"+
|
110
|
+
"* monday|tuesday|...|sunday_in|back_1_day|week|month|year\n"+
|
111
|
+
"Short forms are also possible:\n"+
|
112
|
+
"* y|tod|tom\n"+
|
113
|
+
"* n|pmo|tu|we|th|fr|sa|su\n"+
|
114
|
+
"* i|b10d|w|m|y\n"+
|
115
|
+
"* mo|tu|we|th|fr|sa|sui|b1d|w|m|y"
|
116
|
+
end
|
117
|
+
end
|
118
|
+
date
|
119
|
+
end
|
120
|
+
|
69
121
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: syc-task
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pierre Sugar
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-10-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -135,7 +135,7 @@ description: ! "= Simple task organizer\nsyctask can be used to create, plan, pr
|
|
135
135
|
the next task because of the singular 'task'\nwhere the task values are separated
|
136
136
|
with ';'. The line after the annotation\n'@task' lists the sequence of the fields
|
137
137
|
of the task. It is also possible to \nlist the tasks in a table, e.g. markdown\n\n
|
138
|
-
\ Some text before\n\n @tasks|\n title |description |follow_up
|
138
|
+
\ Some text before\n\n @tasks|\n\n title |description |follow_up
|
139
139
|
|due_date |prio\n ----------------|--------------------------|----------|----------|----\n
|
140
140
|
\ Schedule meeting|Invite all developers |2016-09-12|2016-10-12|1\n Write
|
141
141
|
letter |Practice writing letters | | |3\n\n Some text after\n\n
|
@@ -143,57 +143,67 @@ description: ! "= Simple task organizer\nsyctask can be used to create, plan, pr
|
|
143
143
|
more text \n\nThe example above scans all tasks due to the plural 'tasks'. It also
|
144
144
|
scans all\ntasks that are separated with non-task text and occur after the annotation
|
145
145
|
and \nconfirm to the field structure. Lines that start with '-' will be ignored.
|
146
|
-
So \nif you want to skip only a
|
147
|
-
|
146
|
+
So \nif you want to skip only a few tasks within a task list prepend them with '-'.\nIf
|
147
|
+
you have tasks with different fields then you have to add another annotation\nwith
|
148
148
|
the new field structure. \n\nPossible fields are\n\n title - the title
|
149
|
-
of the task
|
150
|
-
follow-up date of the task in the form yyyy-mm-dd\n due_date
|
151
|
-
of the task in the form yyyy-mm-dd\n prio - the priority
|
152
|
-
\
|
153
|
-
the task\n\
|
154
|
-
|
155
|
-
|
156
|
-
\
|
157
|
-
\
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
is
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
\
|
171
|
-
\
|
172
|
-
|
173
|
-
|
174
|
-
\
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
\
|
194
|
-
|
195
|
-
|
196
|
-
|
149
|
+
of the task - mandatory field!\n description - the description of the task\n
|
150
|
+
\ follow_up - the follow-up date of the task in the form yyyy-mm-dd\n due_date
|
151
|
+
\ - the due-date of the task in the form yyyy-mm-dd\n prio - the priority
|
152
|
+
of the task\n tags - tags the task is annotated with\n note -
|
153
|
+
a note for the task\n\nNote: follow_up and due_date can also be written as Follow-up
|
154
|
+
and Due-Date. Also\ncase is ignored.\n\nAs inidcated in the list the title column
|
155
|
+
is mandatory. Without the title column\nscan will raise an error during a scan.
|
156
|
+
\n\nFields that are not part of the above list will be ignored. \n\n # | Title
|
157
|
+
\ | Who\n - | ------------------------------------
|
158
|
+
| ---\n 1 | Schedule meeting with all developers | Me\n 2 | Write letter to
|
159
|
+
practice writing | You\n\nIn the table only the column Title will be scanned.
|
160
|
+
The '#' and 'Who' column \nwill be ignored during scan. This table is also a table
|
161
|
+
for a minimum scan\nstructure. You need at least to provide a title column so the
|
162
|
+
scan function\nwill recognize the table as a task list.\n\nScanning tasks from files\n\n
|
163
|
+
\ $ syctask scan 2016-09-10-mom.md 2016-09-09-mom.md\n\n===Plan tasks\nThe plan
|
164
|
+
command will print tasks and prompts whether to (a)dd or (s)kip the \ntask. If (q)uit
|
165
|
+
is selected the tasks already added will be add to the today's \ntask list. If (c)omplete
|
166
|
+
is selected the complete task will be printed and the \nuser will be prompted again
|
167
|
+
for adding the task.\n\nInvoke plan without filter\n $ syctask plan\n 1 -
|
168
|
+
My first task\n (a)dd, (c)omplete, (s)kip, (q)uit? a\n Duration (1 = 15 minutes,
|
169
|
+
return 30 minutes): 3\n --> 1 task(s) planned\n\nInvoke plan with a filter\n
|
170
|
+
\ $ syctask plan --id \"1,3,5,8\"\n 1 - My first task\n (a)dd, (c)omplete,
|
171
|
+
(s)kip, (q)uit?\n\nMove tasks to another days plan\n $ syctask plan today --move
|
172
|
+
tomorrow --id 3,5\n\nThis will move the tasks with ID 3 and 5 from the today's plan
|
173
|
+
to the \ntomorrow's plan. The duration will be set to the remaining processing time
|
174
|
+
but \nat least to 30 minutes.\n\n===Prioritize tasks\nPlanned tasks can be prioritized
|
175
|
+
in a pair wise comparisson. So each task is\ncompared to all other tasks. The task
|
176
|
+
with the highest priority will bubble on\ntop followed by the task with the next
|
177
|
+
highest priority and so on.\n\n $ syctask prio\n 1: My first task\n 2:
|
178
|
+
My second task\n Task 1 has (h)igher or (l)ower priority, or (q)uit: h\n 1:
|
179
|
+
My first task\n 2: My third task\n Task 1 has (h)igher or (l)ower priority,
|
180
|
+
or (q)uit: l\n 1: My third task\n 2: My fourth task\n Task 1 has (h)igher
|
181
|
+
or (l)ower priority, or (q)uit: h\n ...\n\nsyctask schedule will then print tasks
|
182
|
+
as follows\n Tasks\n -----\n 0: 10 - My fourth task\n 1: 7 - My third
|
183
|
+
task\n 2: 3 - My first task\n 3: 9 - My second task \n ...\n \nInstead
|
184
|
+
of conducting pairwise comparisson the order of the tasks in the plan\ncan be specified
|
185
|
+
with the -o flag\n $ syctask plan -o 7,3,10,9\n\nThe plan or schedule command
|
186
|
+
will print the tasks in the specified order\n Tasks\n -----\n 0: 7 - My
|
187
|
+
third task\n 1: 3 - My first task\n 2: 10 - My fourth task\n 3: 9 - My
|
188
|
+
second task\n\nIf only a part of the tasks is provided the rest of the tasks is
|
189
|
+
appended to\nthe end of the task plan. If you specify a position flag the prioritized
|
190
|
+
tasks \nare added at the provided position.\n $ syctask plan -o 7,9 -p 2\n Tasks\n
|
191
|
+
\ -----\n 0: 3 - My first task\n 1: 10 - My fourth task\n 2: 7 - My
|
192
|
+
third task\n 3: 9 - My second task\n\n===Create schedule\nThe schedule command
|
193
|
+
will print a graphical schedule with assigning the tasks\nselected with plan. When
|
194
|
+
schedule command is invoked the planned tasks are \nadded at or after the current
|
195
|
+
time within the time schedule. Tasks that are done\nand scheduled in the future
|
196
|
+
are not shown. Tasks done and in the past are shown\nwith the actual processing
|
197
|
+
time.\n\nCreate a schedule with working time from 8a.m. to 6p.m. and meetings between\n9a.m.
|
198
|
+
and 9.30a.m. and 1p.m. and 2.45p.m.\n $ syctask schedule -w \"8:00-18:00\" -b
|
199
|
+
\"9:00-9:30,13:00-14:45\"\n\nAdd titles to the meetings\n $ syctask schedule
|
200
|
+
-m \"Project status,Management meeting\"\n\nThe output will be\n Meetings\n --------\n
|
201
|
+
\ A - Project status\n B - Management meeting\n\n A B\n
|
202
|
+
\ xxx-///-|---|---|---///////-|---|---|---|\n 8 9 10 11 12 13 14 15
|
203
|
+
\ 16 17 18\n 1\n\n Tasks\n -----\n 0 - 1: My first task\n\nAdding
|
204
|
+
a task to a meeting\n $ syctask schedule -a \"A:0\"\n\nwill print\n Meetings\n
|
205
|
+
\ --------\n A - Project status\n 1 - My first task\n B - Management
|
206
|
+
meeting\n\n A B\n ----///-|---|---|---///////-|---|---|---|\n
|
197
207
|
\ 8 9 10 11 12 13 14 15 16 17 18\n \n\n Tasks\n -----\n 0:
|
198
208
|
1 - My first task\n\nA task that is re-scheduled with\n $ syctask update 1 -f
|
199
209
|
tomorrow\n\nwill be shown as done (green) in the schedule and instead of separator
|
@@ -203,31 +213,31 @@ description: ! "= Simple task organizer\nsyctask can be used to create, plan, pr
|
|
203
213
|
as done in short form\n $ syctask list\n\nList all tasks in long form\n $
|
204
214
|
syctask list --all --complete\n\nSearch tasks that match a pattern\n $ syctask
|
205
215
|
list --id \"<10\" --follow_up \">2013-02-25\" --title \"My \\w task\"\n\n===Inspect
|
206
|
-
tasks\nLists each
|
207
|
-
or\
|
208
|
-
(d)one, de(l)ete, (p)lan, (c)omplete, (s)kip, (q)uit
|
209
|
-
with ID 10 in vi\n $ syctask edit 10\n\n===Update tasks\nExcept
|
210
|
-
id all values can be updated. Note and tags are not\noverridden rather
|
211
|
-
with the update value.\n\nUpdate task with ID 1 and provide some informative
|
212
|
-
\
|
213
|
-
tasks\nComplete the task with ID 1 and provide a final note\n
|
214
|
-
1 --note \"Finalize my first task\"\n\n===Delete tasks\nDelete
|
215
|
-
and 5 from the default task directory\n $ syctask delete --id
|
216
|
-
tasks with ID 8 and 12 from the planned tasks of today. The tasks
|
217
|
-
from the planned tasks and not physically deleted.\n $ syctask
|
218
|
-
today --id 8,12\n\n===Settings\nThe settings command allows to define
|
219
|
-
for task directory and to \ncreate general purpose tasks that can
|
220
|
-
and later statistical \nevaluation.\n\nCreate general purpose
|
221
|
-
talk\n $ syctask setting --general PHONE,TALK\n\nList all
|
222
|
-
setting --list\n\n===Info\nInfo searches for the location
|
223
|
-
task directories\n\nSearch for task with id 102\n $ syctask
|
224
|
-
all task directories\n $ syctask info --taskdir\n\n===Statistics\nShows
|
225
|
-
for work and meeting times as well as for task processing\n\nEvaluate
|
226
|
-
log file\n $ syctask statistics\n\nEvaluate work times, meetings
|
227
|
-
2013-01-01 and 2013-04-14\n $ syctask statistics 2013-01-01
|
228
|
-
yesterday and today\n $ syctask statistics yesterday today\n\n===Task
|
229
|
-
and project directory\nThe global options --taskdir and --project determine
|
230
|
-
the command finds\nor creates the tasks. The default task directory is ~/.tasks,
|
216
|
+
tasks\nLists each unplanned task and allows to edit, delete, mark as done or plan
|
217
|
+
for\ntoday or another day\n $ syctask inspect\n 0016 Create command for inspection\n
|
218
|
+
\ (e)dit, (d)one, de(l)ete, (p)lan, da(t)e, (c)omplete, (s)kip, (b)ack, (q)uit\n\n===Edit
|
219
|
+
task\nEdit a task with ID 10 in vi\n $ syctask edit 10\n\n===Update tasks\nExcept
|
220
|
+
for title and id all values can be updated. Note and tags are not\noverridden rather
|
221
|
+
supplemented with the update value.\n\nUpdate task with ID 1 and provide some informative
|
222
|
+
note\n $ syctask update 1 --note \"Some explanation about the progress on the
|
223
|
+
task\"\n\n===Complete tasks\nComplete the task with ID 1 and provide a final note\n
|
224
|
+
\ $ syctask done 1 --note \"Finalize my first task\"\n\n===Delete tasks\nDelete
|
225
|
+
tasks with ID 1,3 and 5 from the default task directory\n $ syctask delete --id
|
226
|
+
1,3,5\n\nDelete tasks with ID 8 and 12 from the planned tasks of today. The tasks
|
227
|
+
are\nonly removed from the planned tasks and not physically deleted.\n $ syctask
|
228
|
+
delete --plan today --id 8,12\n\n===Settings\nThe settings command allows to define
|
229
|
+
default values for task directory and to \ncreate general purpose tasks that can
|
230
|
+
be used for tracking and later statistical \nevaluation.\n\nCreate general purpose
|
231
|
+
tasks for phone and talk\n $ syctask setting --general PHONE,TALK\n\nList all
|
232
|
+
settings\n $ syctask setting --list\n\n===Info\nInfo searches for the location
|
233
|
+
of a task and lists all task directories\n\nSearch for task with id 102\n $ syctask
|
234
|
+
info --id 102\n\nList all task directories\n $ syctask info --taskdir\n\n===Statistics\nShows
|
235
|
+
statistics for work and meeting times as well as for task processing\n\nEvaluate
|
236
|
+
the complete log file\n $ syctask statistics\n\nEvaluate work times, meetings
|
237
|
+
and tasks between 2013-01-01 and 2013-04-14\n $ syctask statistics 2013-01-01
|
238
|
+
2013-04-14\n\nEvaluate yesterday and today\n $ syctask statistics yesterday today\n\n===Task
|
239
|
+
directory and project directory\nThe global options --taskdir and --project determine
|
240
|
+
where the command finds\nor creates the tasks. The default task directory is ~/.tasks,
|
231
241
|
so if no task\ndirectory is specified all commands obtain tasks from or create tasks
|
232
242
|
in\n~/.tasks. If a project is specified the tasks will be saved to or obtained from
|
233
243
|
\nthe task directories subdirectory specified with the --project flag.\n\n --taskdir
|
@@ -304,21 +314,21 @@ description: ! "= Simple task organizer\nsyctask can be used to create, plan, pr
|
|
304
314
|
since Sat 16 Mar 2013 04:26:15 PM CET\n Dell-B1160w-Mono accepting requests since
|
305
315
|
Sat 16 Mar 2013 04:27:45 PM CET\n \nTo print to Dell-B1160w-Mono the following
|
306
316
|
command can be used\n\n $ syctask schedule | lpr -P Dell-B1160w-Mono\n\n==Release
|
307
|
-
Notes\
|
317
|
+
Notes\n===Version 0.0.1 \nImplementation of new, update, list and done commands.\n\n===Version
|
308
318
|
0.0.4\n* delete: deleting tasks or remove tasks from a task plan\n* plan: plan tasks
|
309
319
|
and add them to the task plan\n* schedule: create a schedule with work and busy
|
310
|
-
time and assign the tasks from\n the task plan to the free times\n\
|
311
|
-
start: start a task and track the lead time\n* stop: stop the tracking
|
312
|
-
the lead time of the task\n* start, stop: the task is logged in the ~/.tasks/task.log
|
320
|
+
time and assign the tasks from\n the task plan to the free times\n\n===Version
|
321
|
+
0.0.6\n* start: start a task and track the lead time\n* stop: stop the tracking
|
322
|
+
and print the lead time of the task\n* start, stop: the task is logged in the ~/.tasks/task.log
|
313
323
|
file when added and\n when stopped\n* prio: prioritize tasks in the task plan,
|
314
324
|
that is specifying the sequence in\n that the tasks should be conducted\n* plan:
|
315
325
|
--move flag added to move tasks from the specified plan to another days\n task
|
316
326
|
plan\n* update, new: when a follow-up or a due date is provided the task is added
|
317
327
|
to\n the provided dates task plan. If both dates are set the task is added to both\n
|
318
|
-
\ dates task plans\n\
|
319
|
-
now unique independent of the task or project directory. After\n upgrading
|
320
|
-
a version 0.0.7 or older the user asked whether to re-index\n the tasks. It
|
321
|
-
adviced to tar the tasks before re-indexing with\n $ tar cvfz tasks.tar.gz
|
328
|
+
\ dates task plans\n\n===Version 0.0.7\n* updated rdoc\n\n===Version 0.1.15\n* IDs
|
329
|
+
are now unique independent of the task or project directory. After\n upgrading
|
330
|
+
from a version 0.0.7 or older the user asked whether to re-index\n the tasks. It
|
331
|
+
is adviced to tar the tasks before re-indexing with\n $ tar cvfz tasks.tar.gz
|
322
332
|
.tasks other_task_directories\n* start will now show a timer in the upper right
|
323
333
|
corner of the screen when\n started with the -t (--timer) flag.\n $ syctask
|
324
334
|
start 10 -t\n In order to use the task timer ncurses has to be installed as the
|
@@ -347,31 +357,40 @@ description: ! "= Simple task organizer\nsyctask can be used to create, plan, pr
|
|
347
357
|
task file. If the id is not \n contained in the ids file the task is looked up
|
348
358
|
in the provided directory\n* Inspect command allows to list each today's unplanned
|
349
359
|
task to edit, delete,\n mark as done or plan\n* Update command now has a duration
|
350
|
-
flag to set the task's duration\n\
|
351
|
-
Implemented _timeleap_ {<img src=\"https://badge.fury.io/rb/timeleap.svg\"
|
352
|
-
Version\" />}[http://badge.fury.io/rb/timeleap] which allows to specify
|
353
|
-
time distances to yesterday, today tomorrow.
|
354
|
-
as long and short forms.\n\n
|
355
|
-
\
|
356
|
-
\
|
357
|
-
\
|
358
|
-
Fix a bug in `syctask delete --plan`\n* Add indicator '>'
|
359
|
-
contains notes\n* Refactor migration from version 0.0.7 and
|
360
|
-
system files.\n The user can now specify the directories
|
361
|
-
and can\n also define directories to be excluded. This
|
362
|
-
omit \n search in large mounted directories, like from
|
363
|
-
0.3.1\n* Add csv output spearated by ';' to the list
|
364
|
-
file is empty\n* Add scan command to scan tasks
|
365
|
-
from
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
360
|
+
flag to set the task's duration\n\n====Version 0.2.0\n* Migrated from TestUnit to
|
361
|
+
Minitest\n* Implemented _timeleap_ {<img src=\"https://badge.fury.io/rb/timeleap.svg\"
|
362
|
+
alt=\"Gem Version\" />}[http://badge.fury.io/rb/timeleap] \n which allows to specify
|
363
|
+
additional time distances to yesterday, today \n tomorrow. Time distances come
|
364
|
+
in two flavors as long and short forms.\n\n Examples for long forms are\n -
|
365
|
+
yesterday|today|tomorrow\n - next|previous_monday|tuesday|...|sunday\n - monday|tuesday|...|sunday_in|back_1_week|month|year\n
|
366
|
+
\ - in|back_10_days|weeks|months|years\n\n Examples for short forms are\n -
|
367
|
+
y|tod|tom\n - n|pmo|tu|..|su\n - mo|tu|...|sui|b1w|m|y\n - i|b10d|w|m|y\n
|
368
|
+
\ \n====Version 0.2.1\n* Fix a bug in `syctask delete --plan`\n* Add indicator '>'
|
369
|
+
to task list when task contains notes\n* Refactor migration from version 0.0.7 and
|
370
|
+
when user has deleted system files.\n The user can now specify the directories
|
371
|
+
where the tasks are located and can\n also define directories to be excluded. This
|
372
|
+
is especially helpful to omit \n search in large mounted directories, like from
|
373
|
+
NAS servers.\n\n====Version 0.3.1\n* Add csv output spearated by ';' to the list
|
374
|
+
command\n* Fix bug when schedule file is empty\n* Add scan command to scan tasks
|
375
|
+
from files\n\n====Version 0.3.2\n* Fix bugs of missing class lib/syctask/scanner.rb\n\n====Version
|
376
|
+
0.4.2\n* delete command can take now ranges of ids, e.g. 1,2,4-8,5,20-25 \n* inspect
|
377
|
+
can now go back in the task list\n* inspect will now show the updated task after
|
378
|
+
making changes to the task in \n edit\n* inspect allows to specify a follow_up
|
379
|
+
date\n* scan will ignore columns that are not part of a syctask task\n* scan recognizes
|
380
|
+
'Follow-up' as well as 'follow_up' now. That is an underscore\n can be replaced
|
381
|
+
with '-'\n* Fix bug when scanning tables that have spaces between separator and
|
382
|
+
column\n* When tasks.log file is missing `syctask inspect` prints warning with reason\n
|
383
|
+
\ why statistics cannot be printed\n\n==Development\nPull from Github and then run
|
384
|
+
\n\n $ bundle install \n \nNew classes have to be added to 'lib/syctask.rb'\n\nDebugging
|
385
|
+
the interface can be done with GLI_DEBUG: \n\n $ bundle exec env GLI_DEBUG=true
|
386
|
+
bin/syctask\n\nBuilding and pushing the gemfile to Rubygems\n\n $ gem build syctask.gemspec\n
|
387
|
+
\ $ gem push syc-task-0.2.1.gem\n\n==Tests\nThe test files live in the folder
|
388
|
+
test and start with test_.\n\nThere is a rake file available to run all tests\n\n
|
389
|
+
\ $ rake test\n \nThe CLI is tested with Cucumber. To run the Cucumber features
|
390
|
+
in verbose mode\n\n $ cucumber\n\nor if you prefer cleaner output run\n\n $
|
391
|
+
rake features\n\n==License\nsyc-task is released under the {MIT License}[http://opensource.org/licenses/MIT]\n\n==Links\n*
|
392
|
+
[http://www.github.com/sugaryourcoffee/syc-task] - Source code on GitHub\n* [https://rubygems.org/gems/syc-task]
|
393
|
+
- RubyGems\n"
|
375
394
|
email: pierre@sugaryourcoffee.de
|
376
395
|
executables:
|
377
396
|
- syctask
|
@@ -405,7 +424,8 @@ files:
|
|
405
424
|
- lib/sycutil/console_timer.rb
|
406
425
|
- syctask.rdoc
|
407
426
|
homepage: https://github.com/sugaryourcoffee/syc-task
|
408
|
-
licenses:
|
427
|
+
licenses:
|
428
|
+
- MIT
|
409
429
|
metadata: {}
|
410
430
|
post_install_message:
|
411
431
|
rdoc_options:
|