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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZmE1ZjUxZWYwNzIxNGNlOWMxMDU2N2M1YzFiMzBlODY2NWEyZWI3NA==
4
+ ZGQ3NGYyZWYwNTk0YmI5NDJlZmY4ZTdiNzEwZTQ2NjUyMTAxMzc3Mw==
5
5
  data.tar.gz: !binary |-
6
- MmRkMzk0ZWZiYmZjY2M1MjE0ZjQ3MzA2NTZmNzNjMDMzMTgxMjExZA==
6
+ OGM5OWNjOGFlNjdlMTZjYTZiMTljMDUwMzgyZTFiYzQ4YTgxY2MzZg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MmM5MTdlOTNmZjU2ZmYwZDhlOTM0ODNjOTA0NGE0ZmUyMGU0YTUwZDhhNDc3
10
- NDI5Mzk5OWNiMTg2NWUwOWY0ZWM0YjIzNDA1MzE1NWU0MzNkMTVlNTU1YTg2
11
- MjY1YmE5NmQ3OWIyOGYyOGM4YmNhMzg5YzJhOTI0MjNiNmYwZmU=
9
+ ZTkxYjAxY2JmZmNiZDRmMTE0NjlkMDRkY2Y2YmVmMGRjOTFmZGQ5MjdkMTFj
10
+ NzA0YTUzZjc2NDhiOGYzYTI1ZDkyNDRjOTFhMDBlNjRkZDgzNDI1ZTkzOTk1
11
+ ZGQ2N2FkMjFkZDUxM2E5OTlkODY1MjM1MDZjNzdmYTE1Yjg4M2M=
12
12
  data.tar.gz: !binary |-
13
- MGY5ZGE4NjZkYTJhMGYzNzBjNmMyZjkyMWYzMGMyOWMyNTliMGQ3ZDIyNjg4
14
- OTYwMDdiMWMxZWI2Mjc4YjRjMDAzYzA3NzdhYjczMzIwNjA0MTg0NzY5NWU5
15
- ZTMyYmM2Y2I2ZTE2ZjRjMmUzNGE2MTMwNzU0M2VhM2FiMTcyY2M=
13
+ MWM5ODAxOGZiNjZjMjQ3NmVmZWQ1Mzc5NWYyMzcxOGFlMTM1ODZmYmEyMTU4
14
+ M2MxMGFhNmI2ZDZkODFiMTQ2M2ZiNmE5NzNmMzFmMzE3MjE1ZmU4MzE2NDQx
15
+ YTU4NzNlMTYyYmYxMWJjM2ZiNWI1NDRkN2NmMzBjNzExMGRjNzg=
@@ -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 view tasks within a task list prepend them with '-'.
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
- Scanning tasks from a file
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 today's unplanned task and allows to edit, delete, mark as done or
245
- plan
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] which allows to specify additional time distances to yesterday, today tomorrow.
556
- Time distances come in two flavors as long and short forms.
557
-
558
- Examples for long forms are
559
- - yesterday|today|tomorrow
560
- - next|previous_monday|tuesday|...|sunday
561
- - monday|tuesday|...|sunday_in|back_1_week|month|year
562
- - in|back_10_days|weeks|months|years
563
-
564
- Examples for short forms are
565
- - y|tod|tom
566
- - n|pmo|tu|..|su
567
- - mo|tu|...|sui|b1w|m|y
568
- - i|b10d|w|m|y
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
 
@@ -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,..,IDn'
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]
@@ -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
@@ -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 which is an array
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
- options[field] = task_values[index].strip
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
@@ -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"]
@@ -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, (c)omplete, (s)kip, '+
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
- already_planned = self.get_tasks(date)
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
- already_planned = self.get_tasks(date)
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
- tasks.each do |task|
80
- next if already_planned.find_index {|t| t == task}
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
- count = @service.delete(task.dir, {id: task.id.to_s}) if answer == "Y"
104
- puts sprintf("--> Deleted %d task%s",
105
- count, count == 1 ? "" : "s").color(:green)
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
- #do nothing
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 a file. If override is true the file is overriden
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
@@ -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)
@@ -104,6 +104,8 @@ module Syctask
104
104
  @tasks = []
105
105
  if @tracks
106
106
  @tracks.each { |track| @tasks << @service.read(track.dir, track.id) }
107
+ else
108
+ @tracks = []
107
109
  end
108
110
  end
109
111
  end
@@ -1,5 +1,5 @@
1
1
  # Syctask provides functions for managing tasks in a task list
2
2
  module Syctask
3
3
  #Holds the version number of syctask
4
- VERSION = '0.3.2'
4
+ VERSION = '0.4.2'
5
5
  end
@@ -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.3.2
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-09-11 00:00:00.000000000 Z
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 view tasks within a task list prepend them with
147
- '-'.\nIf you have tasks with different fields then you have to add another annotation\nwith
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\n description - the description of the task\n follow_up - the
150
- follow-up date of the task in the form yyyy-mm-dd\n due_date - the due-date
151
- of the task in the form yyyy-mm-dd\n prio - the priority of the task\n
152
- \ tags - tags the task is annotated with\n note - a note for
153
- the task\n\nScanning tasks from a file\n\n $ syctask scan 2016-09-10-mom.md 2016-09-09-mom.md\n\n===Plan
154
- tasks\nThe plan command will print tasks and prompts whether to (a)dd or (s)kip
155
- the \ntask. If (q)uit is selected the tasks already added will be add to the today's
156
- \ntask list. If (c)omplete is selected the complete task will be printed and the
157
- \nuser will be prompted again for adding the task.\n\nInvoke plan without filter\n
158
- \ $ syctask plan\n 1 - My first task\n (a)dd, (c)omplete, (s)kip, (q)uit?
159
- a\n Duration (1 = 15 minutes, return 30 minutes): 3\n --> 1 task(s) planned\n\nInvoke
160
- plan with a filter\n $ syctask plan --id \"1,3,5,8\"\n 1 - My first task\n
161
- \ (a)dd, (c)omplete, (s)kip, (q)uit?\n\nMove tasks to another days plan\n $
162
- syctask plan today --move tomorrow --id 3,5\n\nThis will move the tasks with ID
163
- 3 and 5 from the today's plan to the \ntomorrow's plan. The duration will be set
164
- to the remaining processing time but \nat least to 30 minutes.\n\n===Prioritize
165
- tasks\nPlanned tasks can be prioritized in a pair wise comparisson. So each task
166
- is\ncompared to all other tasks. The task with the highest priority will bubble
167
- on\ntop followed by the task with the next highest priority and so on.\n\n $
168
- syctask prio\n 1: My first task\n 2: My second task\n Task 1 has (h)igher
169
- or (l)ower priority, or (q)uit: h\n 1: My first task\n 2: My third task\n
170
- \ Task 1 has (h)igher or (l)ower priority, or (q)uit: l\n 1: My third task\n
171
- \ 2: My fourth task\n Task 1 has (h)igher or (l)ower priority, or (q)uit:
172
- h\n ...\n\nsyctask schedule will then print tasks as follows\n Tasks\n -----\n
173
- \ 0: 10 - My fourth task\n 1: 7 - My third task\n 2: 3 - My first task\n
174
- \ 3: 9 - My second task \n ...\n \nInstead of conducting pairwise comparisson
175
- the order of the tasks in the plan\ncan be specified with the -o flag\n $ syctask
176
- plan -o 7,3,10,9\n\nThe plan or schedule command will print the tasks in the specified
177
- order\n Tasks\n -----\n 0: 7 - My third task\n 1: 3 - My first task\n
178
- \ 2: 10 - My fourth task\n 3: 9 - My second task\n\nIf only a part of the
179
- tasks is provided the rest of the tasks is appended to\nthe end of the task plan.
180
- If you specify a position flag the prioritized tasks \nare added at the provided
181
- position.\n $ syctask plan -o 7,9 -p 2\n Tasks\n -----\n 0: 3 - My
182
- first task\n 1: 10 - My fourth task\n 2: 7 - My third task\n 3: 9 - My
183
- second task\n\n===Create schedule\nThe schedule command will print a graphical schedule
184
- with assigning the tasks\nselected with plan. When schedule command is invoked the
185
- planned tasks are \nadded at or after the current time within the time schedule.
186
- Tasks that are done\nand scheduled in the future are not shown. Tasks done and in
187
- the past are shown\nwith the actual processing time.\n\nCreate a schedule with working
188
- time from 8a.m. to 6p.m. and meetings between\n9a.m. and 9.30a.m. and 1p.m. and
189
- 2.45p.m.\n $ syctask schedule -w \"8:00-18:00\" -b \"9:00-9:30,13:00-14:45\"\n\nAdd
190
- titles to the meetings\n $ syctask schedule -m \"Project status,Management meeting\"\n\nThe
191
- output will be\n Meetings\n --------\n A - Project status\n B - Management
192
- meeting\n\n A B\n xxx-///-|---|---|---///////-|---|---|---|\n
193
- \ 8 9 10 11 12 13 14 15 16 17 18\n 1\n\n Tasks\n -----\n 0
194
- - 1: My first task\n\nAdding a task to a meeting\n $ syctask schedule -a \"A:0\"\n\nwill
195
- print\n Meetings\n --------\n A - Project status\n 1 - My first
196
- task\n B - Management meeting\n\n A B\n ----///-|---|---|---///////-|---|---|---|\n
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 today's unplanned task and allows to edit, delete, mark as done
207
- or\nplan\n $ syctask inspect\n 0016 Create command for inspection\n (e)dit,
208
- (d)one, de(l)ete, (p)lan, (c)omplete, (s)kip, (q)uit: \n\n===Edit task\nEdit a task
209
- with ID 10 in vi\n $ syctask edit 10\n\n===Update tasks\nExcept for title and
210
- id all values can be updated. Note and tags are not\noverridden rather supplemented
211
- with the update value.\n\nUpdate task with ID 1 and provide some informative note\n
212
- \ $ syctask update 1 --note \"Some explanation about the progress on the task\"\n\n===Complete
213
- tasks\nComplete the task with ID 1 and provide a final note\n $ syctask done
214
- 1 --note \"Finalize my first task\"\n\n===Delete tasks\nDelete tasks with ID 1,3
215
- and 5 from the default task directory\n $ syctask delete --id 1,3,5\n\nDelete
216
- tasks with ID 8 and 12 from the planned tasks of today. The tasks are\nonly removed
217
- from the planned tasks and not physically deleted.\n $ syctask delete --plan
218
- today --id 8,12\n\n===Settings\nThe settings command allows to define default values
219
- for task directory and to \ncreate general purpose tasks that can be used for tracking
220
- and later statistical \nevaluation.\n\nCreate general purpose tasks for phone and
221
- talk\n $ syctask setting --general PHONE,TALK\n\nList all settings\n $ syctask
222
- setting --list\n\n===Info\nInfo searches for the location of a task and lists all
223
- task directories\n\nSearch for task with id 102\n $ syctask info --id 102\n\nList
224
- all task directories\n $ syctask info --taskdir\n\n===Statistics\nShows statistics
225
- for work and meeting times as well as for task processing\n\nEvaluate the complete
226
- log file\n $ syctask statistics\n\nEvaluate work times, meetings and tasks between
227
- 2013-01-01 and 2013-04-14\n $ syctask statistics 2013-01-01 2013-04-14\n\nEvaluate
228
- yesterday and today\n $ syctask statistics yesterday today\n\n===Task directory
229
- and project directory\nThe global options --taskdir and --project determine where
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\nVersion 0.0.1 \nImplementation of new, update, list and done commands.\n\nVersion
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\nVersion 0.0.6\n*
311
- start: start a task and track the lead time\n* stop: stop the tracking and print
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\nVersion 0.0.7\n* updated rdoc\n\nVersion 0.1.15\n* IDs are
319
- now unique independent of the task or project directory. After\n upgrading from
320
- a version 0.0.7 or older the user asked whether to re-index\n the tasks. It is
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\nVersion 0.2.0\n* Migrated from TestUnit to Minitest\n*
351
- Implemented _timeleap_ {<img src=\"https://badge.fury.io/rb/timeleap.svg\" alt=\"Gem
352
- Version\" />}[http://badge.fury.io/rb/timeleap] which allows to specify additional
353
- time distances to yesterday, today tomorrow. \n Time distances come in two flavors
354
- as long and short forms.\n\n Examples for long forms are\n - yesterday|today|tomorrow\n
355
- \ - next|previous_monday|tuesday|...|sunday\n - monday|tuesday|...|sunday_in|back_1_week|month|year\n
356
- \ - in|back_10_days|weeks|months|years\n\n Examples for short forms are\n - y|tod|tom\n
357
- \ - n|pmo|tu|..|su\n - mo|tu|...|sui|b1w|m|y\n - i|b10d|w|m|y\n \nVersion 0.2.1\n*
358
- Fix a bug in `syctask delete --plan`\n* Add indicator '>' to task list when task
359
- contains notes\n* Refactor migration from version 0.0.7 and when user has deleted
360
- system files.\n The user can now specify the directories where the tasks are located
361
- and can\n also define directories to be excluded. This is especially helpful to
362
- omit \n search in large mounted directories, like from NAS servers.\n\nVersion
363
- 0.3.1\n* Add csv output spearated by ';' to the list command\n* Fix bug when schedule
364
- file is empty\n* Add scan command to scan tasks from files\n\n==Development\nPull
365
- from Github and then run \n\n $ bundle install \n \nNew classes have to be
366
- added to 'lib/syctask.rb'\n\nDebugging the interface can be done with GLI_DEBUG:
367
- \n\n $ bundle exec env GLI_DEBUG=true bin/syctask\n\nBuilding and pushing the
368
- gemfile to Rubygems\n\n $ gem build syctask.gemspec\n $ gem push syc-task-0.2.1.gem\n\n==Tests\nThe
369
- test files live in the folder test and start with test_.\n\nThere is a rake file
370
- available to run all tests\n\n $ rake test\n \nThe CLI is tested with Cucumber.
371
- To run the Cucumber features in verbose mode\n\n $ cucumber\n\nor if you prefer
372
- cleaner output run\n\n $ rake features\n\n==License\nsyc-task is released under
373
- the {MIT License}[http://opensource.org/licenses/MIT]\n\n==Links\n* [http://www.github.com/sugaryourcoffee/syc-task]
374
- - Source code on GitHub\n* [https://rubygems.org/gems/syc-task] - RubyGems\n"
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: