syc-task 0.3.2 → 0.4.2
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 +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:
|