taskish 0.3 → 0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/HISTORY +12 -0
- data/coverage/assets/0.4.5/app.js +66 -0
- data/coverage/assets/0.4.5/fancybox/blank.gif +0 -0
- data/coverage/assets/0.4.5/fancybox/fancy_close.png +0 -0
- data/coverage/assets/0.4.5/fancybox/fancy_loading.png +0 -0
- data/coverage/assets/0.4.5/fancybox/fancy_nav_left.png +0 -0
- data/coverage/assets/0.4.5/fancybox/fancy_nav_right.png +0 -0
- data/coverage/assets/0.4.5/fancybox/fancy_shadow_e.png +0 -0
- data/coverage/assets/0.4.5/fancybox/fancy_shadow_n.png +0 -0
- data/coverage/assets/0.4.5/fancybox/fancy_shadow_ne.png +0 -0
- data/coverage/assets/0.4.5/fancybox/fancy_shadow_nw.png +0 -0
- data/coverage/assets/0.4.5/fancybox/fancy_shadow_s.png +0 -0
- data/coverage/assets/0.4.5/fancybox/fancy_shadow_se.png +0 -0
- data/coverage/assets/0.4.5/fancybox/fancy_shadow_sw.png +0 -0
- data/coverage/assets/0.4.5/fancybox/fancy_shadow_w.png +0 -0
- data/coverage/assets/0.4.5/fancybox/fancy_title_left.png +0 -0
- data/coverage/assets/0.4.5/fancybox/fancy_title_main.png +0 -0
- data/coverage/assets/0.4.5/fancybox/fancy_title_over.png +0 -0
- data/coverage/assets/0.4.5/fancybox/fancy_title_right.png +0 -0
- data/coverage/assets/0.4.5/fancybox/fancybox-x.png +0 -0
- data/coverage/assets/0.4.5/fancybox/fancybox-y.png +0 -0
- data/coverage/assets/0.4.5/fancybox/fancybox.png +0 -0
- data/coverage/assets/0.4.5/fancybox/jquery.fancybox-1.3.1.css +363 -0
- data/coverage/assets/0.4.5/fancybox/jquery.fancybox-1.3.1.pack.js +44 -0
- data/coverage/assets/0.4.5/favicon.png +0 -0
- data/coverage/assets/0.4.5/jquery-1.4.2.min.js +155 -0
- data/coverage/assets/0.4.5/jquery.dataTables.min.js +152 -0
- data/coverage/assets/0.4.5/jquery.timeago.js +141 -0
- data/coverage/assets/0.4.5/jquery.url.js +174 -0
- data/coverage/assets/0.4.5/loading.gif +0 -0
- data/coverage/assets/0.4.5/magnify.png +0 -0
- data/coverage/assets/0.4.5/smoothness/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/coverage/assets/0.4.5/smoothness/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/coverage/assets/0.4.5/smoothness/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/coverage/assets/0.4.5/smoothness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/coverage/assets/0.4.5/smoothness/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/coverage/assets/0.4.5/smoothness/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/coverage/assets/0.4.5/smoothness/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/coverage/assets/0.4.5/smoothness/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/coverage/assets/0.4.5/smoothness/images/ui-icons_222222_256x240.png +0 -0
- data/coverage/assets/0.4.5/smoothness/images/ui-icons_2e83ff_256x240.png +0 -0
- data/coverage/assets/0.4.5/smoothness/images/ui-icons_454545_256x240.png +0 -0
- data/coverage/assets/0.4.5/smoothness/images/ui-icons_888888_256x240.png +0 -0
- data/coverage/assets/0.4.5/smoothness/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/coverage/assets/0.4.5/smoothness/jquery-ui-1.8.4.custom.css +295 -0
- data/coverage/assets/0.4.5/stylesheet.css +341 -0
- data/coverage/index.html +5499 -0
- data/coverage/resultset.yml +415 -0
- data/lib/taskish.rb +61 -23
- data/lib/taskish/app.rb +5 -6
- data/lib/taskish/project.rb +80 -0
- data/lib/taskish/task.rb +16 -8
- data/lib/taskish/version.rb +1 -1
- data/taskish.gemspec +1 -0
- data/test/app_test.rb +1 -1
- data/test/project_test.rb +125 -0
- data/test/task_test.rb +50 -31
- data/test/taskish.txt +9 -0
- data/test/taskish_test.rb +53 -2
- data/test/test_helper.rb +5 -0
- data/test/version_test.rb +2 -2
- metadata +68 -3
data/lib/taskish/app.rb
CHANGED
@@ -57,15 +57,14 @@ class Taskish # :nodoc:
|
|
57
57
|
Taskish.new do |taskish|
|
58
58
|
app.files.each { |f| taskish.readlines(f) }
|
59
59
|
case app.command
|
60
|
+
when 'debug'
|
61
|
+
taskish.debug
|
60
62
|
when 'done'
|
61
|
-
|
62
|
-
puts "DONE\n~~~~~"
|
63
|
+
puts "DONE\n~~~~"
|
63
64
|
taskish.done.each { |task| puts task }
|
64
|
-
when 'today', 'week'
|
65
|
-
# taskish.readlines(app.file)
|
65
|
+
when 'today', 'tomorrow', 'week'
|
66
66
|
tasks = taskish.due( app.command.to_sym )
|
67
67
|
if tasks.size > 0
|
68
|
-
puts "#{ app.command.upcase }\n#{ '~' * app.command.length }"
|
69
68
|
tasks.each { |task| puts task }
|
70
69
|
end
|
71
70
|
else
|
@@ -77,7 +76,7 @@ class Taskish # :nodoc:
|
|
77
76
|
end
|
78
77
|
|
79
78
|
def usage
|
80
|
-
"USAGE: taskish { done | today | week } <file>"
|
79
|
+
"USAGE: taskish { debug | done | today | tomorrow | week } <file>"
|
81
80
|
end
|
82
81
|
|
83
82
|
end # class Taskish::App
|
@@ -0,0 +1,80 @@
|
|
1
|
+
require 'date'
|
2
|
+
|
3
|
+
class Taskish # :nodoc:
|
4
|
+
|
5
|
+
# = Taskish::Project - A single project
|
6
|
+
#
|
7
|
+
# == USAGE
|
8
|
+
#
|
9
|
+
# Taskish::Project.new(project) do |project|
|
10
|
+
# # Get project's name
|
11
|
+
# project.name
|
12
|
+
#
|
13
|
+
# # Add task to project
|
14
|
+
# project << Taskish::Task.new( project.name, 'my task' )
|
15
|
+
#
|
16
|
+
# # Add child project to project
|
17
|
+
# project << Taskish::Project.new( 'child project' )
|
18
|
+
#
|
19
|
+
# # Get project's child projects
|
20
|
+
# project.projects
|
21
|
+
#
|
22
|
+
# # Get project's tasks
|
23
|
+
# project.tasks
|
24
|
+
#
|
25
|
+
# end
|
26
|
+
#
|
27
|
+
# == SEE ALSO
|
28
|
+
#
|
29
|
+
# <Taskish>, <Taskish::Task>
|
30
|
+
#
|
31
|
+
class Project
|
32
|
+
attr_reader :name, :parent
|
33
|
+
|
34
|
+
def initialize(project)
|
35
|
+
@name = project
|
36
|
+
@children = []
|
37
|
+
@parent = nil
|
38
|
+
yield self if block_given?
|
39
|
+
end
|
40
|
+
|
41
|
+
def <<(child)
|
42
|
+
if ( child.nil? || !( child.kind_of?(Taskish::Project) || child.kind_of?(Taskish::Task) ) )
|
43
|
+
raise(ArgumentError, 'invalid project/task')
|
44
|
+
end
|
45
|
+
if child.kind_of?(Taskish::Project)
|
46
|
+
child.instance_variable_set( :@parent, self )
|
47
|
+
end
|
48
|
+
@children << child
|
49
|
+
self
|
50
|
+
end
|
51
|
+
|
52
|
+
def debug(depth = 0)
|
53
|
+
puts "%s#{ @name }:" % [ ' ' * depth ]
|
54
|
+
projects.each { |p| p.debug( depth + 1 ) }
|
55
|
+
tasks(false).each do |t|
|
56
|
+
puts "%s- #{ t.raw }" % [ ' ' * ( depth + 1 ) ]
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def projects
|
61
|
+
@children.select { |child| child.kind_of? Taskish::Project }
|
62
|
+
end
|
63
|
+
|
64
|
+
def tasks(recurse = true)
|
65
|
+
if recurse
|
66
|
+
return @children.collect { |child| child.kind_of?( Taskish::Project ) ? child.tasks : child }.flatten
|
67
|
+
else
|
68
|
+
return @children.select { |child| child.kind_of?( Taskish::Task ) }
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
# TODO Include parent information?
|
73
|
+
def to_s
|
74
|
+
@parent ? sprintf( "%s: %s" % [ self.parent, @name ] ) : @name
|
75
|
+
end
|
76
|
+
|
77
|
+
end # class Taskish::Project
|
78
|
+
|
79
|
+
end # class Taskish
|
80
|
+
|
data/lib/taskish/task.rb
CHANGED
@@ -15,8 +15,12 @@ class Taskish # :nodoc:
|
|
15
15
|
# <Taskish>
|
16
16
|
#
|
17
17
|
class Task
|
18
|
+
attr_reader :parent
|
19
|
+
|
18
20
|
def initialize(project, task)
|
19
|
-
|
21
|
+
raise(ArgumentError, 'invalid project') if ( project.nil? || !project.kind_of?(Taskish::Project) )
|
22
|
+
@data = Task.parse(task)
|
23
|
+
@parent = project
|
20
24
|
yield self if block_given?
|
21
25
|
end
|
22
26
|
|
@@ -33,10 +37,10 @@ class Taskish # :nodoc:
|
|
33
37
|
case date
|
34
38
|
when :today
|
35
39
|
return @data[:due] <= Date.today
|
40
|
+
when :tomorrow
|
41
|
+
return @data[:due] > Date.today && @data[:due] <= ( Date.today + 1 )
|
36
42
|
when :week
|
37
|
-
|
38
|
-
week = DateTime.new( d.year, d.mon, d.mday, 23, 59 )
|
39
|
-
return @data[:due] <= week
|
43
|
+
return @data[:due] <= ( Date.today + 7 )
|
40
44
|
else
|
41
45
|
warn "invalid due date specification - '#{date}'"
|
42
46
|
end
|
@@ -47,10 +51,9 @@ class Taskish # :nodoc:
|
|
47
51
|
@data.key? key
|
48
52
|
end
|
49
53
|
|
50
|
-
def self.parse(
|
51
|
-
raise(ArgumentError, 'invalid project') if ( project.nil? || project.empty? )
|
54
|
+
def self.parse(task)
|
52
55
|
raise(ArgumentError, 'invalid task') if ( task.nil? || task.empty? )
|
53
|
-
data = { :
|
56
|
+
data = { :raw => task }
|
54
57
|
|
55
58
|
# TODO Extract to something that sucks less.
|
56
59
|
task.gsub!(/\s*$/, '')
|
@@ -73,12 +76,17 @@ class Taskish # :nodoc:
|
|
73
76
|
data
|
74
77
|
end
|
75
78
|
|
79
|
+
def raw
|
80
|
+
@data[:raw]
|
81
|
+
end
|
82
|
+
|
76
83
|
def task
|
77
84
|
@data[:task]
|
78
85
|
end
|
79
86
|
|
87
|
+
# TODO Make more flexible
|
80
88
|
def to_s
|
81
|
-
s = sprintf( "%-
|
89
|
+
s = sprintf( "%-25s\t%s" % [ self.parent.to_s + ':', @data[:task] ] )
|
82
90
|
if key? :due
|
83
91
|
s = sprintf( "%s @due(%s)" % [ s, @data[:due] ] )
|
84
92
|
end
|
data/lib/taskish/version.rb
CHANGED
data/taskish.gemspec
CHANGED
data/test/app_test.rb
CHANGED
@@ -46,7 +46,7 @@ class AppTest < Test::Unit::TestCase
|
|
46
46
|
|
47
47
|
context '#usage()' do
|
48
48
|
should 'return expected usage string' do
|
49
|
-
assert_equal "USAGE: taskish { done | today | week } <file>", Taskish::App.new.usage
|
49
|
+
assert_equal "USAGE: taskish { debug | done | today | tomorrow | week } <file>", Taskish::App.new.usage
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
@@ -0,0 +1,125 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
#require 'date'
|
3
|
+
|
4
|
+
class ProjectTest < Test::Unit::TestCase
|
5
|
+
|
6
|
+
context '#initialize()' do
|
7
|
+
should 'return object if no block given' do
|
8
|
+
assert_instance_of Taskish::Project, Taskish::Project.new("p")
|
9
|
+
end
|
10
|
+
should 'work as a block' do
|
11
|
+
Taskish::Project.new("p") do |project|
|
12
|
+
assert_instance_of Taskish::Project, project
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'accessors' do
|
18
|
+
setup do
|
19
|
+
@name = 'my project'
|
20
|
+
@project = Taskish::Project.new(@name)
|
21
|
+
@tasks = []
|
22
|
+
end
|
23
|
+
should 'provide getter for :name' do
|
24
|
+
assert_equal @name, @project.name
|
25
|
+
end
|
26
|
+
should 'provide getter for :tasks' do
|
27
|
+
assert_equal @tasks, @project.tasks
|
28
|
+
end
|
29
|
+
should 'raise NoMethodError for :name setter' do
|
30
|
+
assert_raise(NoMethodError, 'undefined method `name=') { @project.name = 'foo' }
|
31
|
+
end
|
32
|
+
should 'raise NoMethodError for :tasks setter' do
|
33
|
+
assert_raise(NoMethodError, 'undefined method `tasks=') { @project.tasks = [] }
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
context '#<<(child)' do
|
38
|
+
setup do
|
39
|
+
@project = Taskish::Project.new('my project')
|
40
|
+
end
|
41
|
+
should 'raise ArgumentError if child nil' do
|
42
|
+
assert_raise(ArgumentError, 'invalid project/task') { @project << nil }
|
43
|
+
end
|
44
|
+
should 'raise ArgumentError if child string' do
|
45
|
+
assert_raise(ArgumentError, 'invalid project/task') { @project << '' }
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context 'tasks' do
|
50
|
+
setup do
|
51
|
+
@project = Taskish::Project.new('my project')
|
52
|
+
end
|
53
|
+
should 'default to 0 tasks' do
|
54
|
+
assert_equal 0, @project.tasks.size
|
55
|
+
end
|
56
|
+
should 'be able to add tasks' do
|
57
|
+
( 1 .. 5 ).to_a.each do |n|
|
58
|
+
assert_equal n - 1, @project.tasks.size
|
59
|
+
@project << Taskish::Task.new( @project, n.to_s )
|
60
|
+
assert_equal n, @project.tasks.size
|
61
|
+
end
|
62
|
+
( 1 .. 5 ).to_a.each do |n|
|
63
|
+
assert_equal n.to_s, @project.tasks[n - 1].task
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
context 'child projects' do
|
69
|
+
setup do
|
70
|
+
@parent = Taskish::Project.new('parent project')
|
71
|
+
@child = Taskish::Project.new('child project')
|
72
|
+
@parent_task = Taskish::Task.new( @parent, 'parent task' )
|
73
|
+
@child_task = Taskish::Task.new( @child, 'child task' )
|
74
|
+
@parent << @parent_task
|
75
|
+
@child << @child_task
|
76
|
+
@parent << @child
|
77
|
+
end
|
78
|
+
should 'be able to add child project to a project' do
|
79
|
+
@parent << @child
|
80
|
+
end
|
81
|
+
should 'return appropriate tasks for child' do
|
82
|
+
assert_equal 1, @child.tasks.size
|
83
|
+
assert_equal false, @child.tasks.include?( @parent_task )
|
84
|
+
assert_equal true, @child.tasks.include?( @child_task )
|
85
|
+
end
|
86
|
+
should 'return appropriate tasks for parent' do
|
87
|
+
assert_equal 2, @parent.tasks.size
|
88
|
+
assert_equal true, @parent.tasks.include?( @parent_task )
|
89
|
+
assert_equal true, @parent.tasks.include?( @child_task )
|
90
|
+
end
|
91
|
+
should 'return appropriate projects for child' do
|
92
|
+
assert_equal 0, @child.projects.size
|
93
|
+
assert_equal false, @child.projects.include?( @parent )
|
94
|
+
assert_equal false, @child.projects.include?( @child )
|
95
|
+
end
|
96
|
+
should 'return appropriate projects for parent' do
|
97
|
+
assert_equal 1, @parent.projects.size
|
98
|
+
assert_equal false, @parent.projects.include?( @parent )
|
99
|
+
assert_equal true, @parent.projects.include?( @child )
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
context '#to_s()' do
|
104
|
+
setup do
|
105
|
+
@parent = Taskish::Project.new('parent project')
|
106
|
+
@child_1 = Taskish::Project.new('child project #1')
|
107
|
+
@child_2 = Taskish::Project.new('child project #2')
|
108
|
+
end
|
109
|
+
should 'return correct string representation when solo' do
|
110
|
+
assert_equal 'parent project', @parent.to_s
|
111
|
+
assert_equal 'child project #1', @child_1.to_s
|
112
|
+
assert_equal 'child project #2', @child_2.to_s
|
113
|
+
end
|
114
|
+
should 'return correct string representation when child projects have been added' do
|
115
|
+
@parent << @child_1
|
116
|
+
@parent << @child_2
|
117
|
+
assert_equal 'parent project', @parent.to_s
|
118
|
+
assert_equal 'parent project: child project #1', @child_1.to_s
|
119
|
+
assert_equal 'parent project: child project #2', @child_2.to_s
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
|
124
|
+
end # class ProjectTest
|
125
|
+
|
data/test/task_test.rb
CHANGED
@@ -4,22 +4,28 @@ require 'date'
|
|
4
4
|
class TaskTest < Test::Unit::TestCase
|
5
5
|
|
6
6
|
context '#initialize()' do
|
7
|
+
setup do
|
8
|
+
@p = Taskish::Project.new('my project')
|
9
|
+
end
|
7
10
|
should 'return object if no block given' do
|
8
|
-
assert_instance_of Taskish::Task, Taskish::Task.new(
|
11
|
+
assert_instance_of Taskish::Task, Taskish::Task.new(@p, "t")
|
9
12
|
end
|
10
13
|
should 'work as a block' do
|
11
|
-
Taskish::Task.new(
|
14
|
+
Taskish::Task.new(@p, "t") do |task|
|
12
15
|
assert_instance_of Taskish::Task, task
|
13
16
|
end
|
14
17
|
end
|
15
18
|
end
|
16
19
|
|
17
20
|
context '#done?' do
|
21
|
+
setup do
|
22
|
+
@p = Taskish::Project.new('my project')
|
23
|
+
end
|
18
24
|
should 'return false if @done not set' do
|
19
|
-
assert_equal false, Taskish::Task.new(
|
25
|
+
assert_equal false, Taskish::Task.new(@p, 'foo').done?
|
20
26
|
end
|
21
27
|
should 'return true if @done set' do
|
22
|
-
assert_equal true, Taskish::Task.new(
|
28
|
+
assert_equal true, Taskish::Task.new(@p, 'foo @done').done?
|
23
29
|
end
|
24
30
|
end
|
25
31
|
|
@@ -27,7 +33,7 @@ class TaskTest < Test::Unit::TestCase
|
|
27
33
|
|
28
34
|
context ' with no due date' do
|
29
35
|
setup do
|
30
|
-
@task = Taskish::Task.new('
|
36
|
+
@task = Taskish::Task.new( Taskish::Project.new('my project'), 'do something')
|
31
37
|
end
|
32
38
|
should 'be nil' do
|
33
39
|
assert_nil @task.due
|
@@ -43,7 +49,7 @@ class TaskTest < Test::Unit::TestCase
|
|
43
49
|
context ' with implicit due date of today' do
|
44
50
|
setup do
|
45
51
|
@d = Date.today
|
46
|
-
@task = Taskish::Task.new('
|
52
|
+
@task = Taskish::Task.new( Taskish::Project.new('my project') , 'do something @due' )
|
47
53
|
end
|
48
54
|
should 'not be nil' do
|
49
55
|
assert_not_nil @task.due
|
@@ -62,7 +68,7 @@ class TaskTest < Test::Unit::TestCase
|
|
62
68
|
context ' with implicit due date of today and additional tag' do
|
63
69
|
setup do
|
64
70
|
@d = Date.today
|
65
|
-
@task = Taskish::Task.new('
|
71
|
+
@task = Taskish::Task.new( Taskish::Project.new('my project'), 'do something @due @weekly' )
|
66
72
|
end
|
67
73
|
should 'not be nil' do
|
68
74
|
assert_not_nil @task.due
|
@@ -81,7 +87,7 @@ class TaskTest < Test::Unit::TestCase
|
|
81
87
|
context ' with explicit due date of today' do
|
82
88
|
setup do
|
83
89
|
@d = Date.today
|
84
|
-
@task = Taskish::Task.new('
|
90
|
+
@task = Taskish::Task.new( Taskish::Project.new('my project'), "do something @due(#{ @d.strftime('%Y-%m-%d') })" )
|
85
91
|
end
|
86
92
|
should 'not be nil' do
|
87
93
|
assert_not_nil @task.due
|
@@ -100,7 +106,7 @@ class TaskTest < Test::Unit::TestCase
|
|
100
106
|
context ' with explicit due date of today and additional tag' do
|
101
107
|
setup do
|
102
108
|
@d = Date.today
|
103
|
-
@task = Taskish::Task.new('
|
109
|
+
@task = Taskish::Task.new( Taskish::Project.new('my project'), "do something @due(#{ @d.strftime('%Y-%m-%d') }) @weekly" )
|
104
110
|
end
|
105
111
|
should 'not be nil' do
|
106
112
|
assert_not_nil @task.due
|
@@ -119,7 +125,7 @@ class TaskTest < Test::Unit::TestCase
|
|
119
125
|
context ' with explicit due date of tomorrow' do
|
120
126
|
setup do
|
121
127
|
@d = Date.today + 1
|
122
|
-
@task = Taskish::Task.new('
|
128
|
+
@task = Taskish::Task.new( Taskish::Project.new('my project'), "do something @due(#{ @d.strftime('%Y-%m-%d') })" )
|
123
129
|
end
|
124
130
|
should 'not be nil' do
|
125
131
|
assert_not_nil @task.due
|
@@ -138,28 +144,27 @@ class TaskTest < Test::Unit::TestCase
|
|
138
144
|
|
139
145
|
context 'parse()' do
|
140
146
|
setup do
|
141
|
-
@project = '
|
147
|
+
@project = Taskish::Project.new('my project')
|
142
148
|
@task = 'some task'
|
143
149
|
@today = Date.today
|
144
150
|
end
|
145
151
|
|
146
152
|
should 'raise ArgumentError if nil project' do
|
147
|
-
assert_raise(ArgumentError, 'invalid project')
|
153
|
+
assert_raise(ArgumentError, 'invalid project') { Taskish::Task.new(nil, @task) }
|
148
154
|
end
|
149
155
|
should 'raise ArgumentError if empty project' do
|
150
|
-
assert_raise(ArgumentError, 'invalid project')
|
156
|
+
assert_raise(ArgumentError, 'invalid project') { Taskish::Task.new('', @task) }
|
151
157
|
end
|
152
158
|
should 'raise ArgumentError if nil task' do
|
153
|
-
assert_raise(ArgumentError, 'invalid task')
|
159
|
+
assert_raise(ArgumentError, 'invalid project/task') { Taskish::Task.new(@project, nil) }
|
154
160
|
end
|
155
161
|
should 'raise ArgumentError if empty task' do
|
156
|
-
assert_raise(ArgumentError, 'invalid task')
|
162
|
+
assert_raise(ArgumentError, 'invalid project/task') { Taskish::Task.new(@project, '') }
|
157
163
|
end
|
158
164
|
|
159
165
|
should 'handle :project and :task' do
|
160
166
|
task = @task
|
161
|
-
hash = Taskish::Task.parse(
|
162
|
-
assert_equal @project, hash[:project]
|
167
|
+
hash = Taskish::Task.parse(task)
|
163
168
|
assert_equal @task, hash[:task]
|
164
169
|
assert_equal false, hash.key?(:due)
|
165
170
|
assert_equal false, hash.key?(:done)
|
@@ -168,8 +173,7 @@ class TaskTest < Test::Unit::TestCase
|
|
168
173
|
|
169
174
|
should 'handle :project and :task with trailing whitespace' do
|
170
175
|
task = "#{ @task } "
|
171
|
-
hash = Taskish::Task.parse(
|
172
|
-
assert_equal @project, hash[:project]
|
176
|
+
hash = Taskish::Task.parse(task)
|
173
177
|
assert_equal @task, hash[:task]
|
174
178
|
assert_equal false, hash.key?(:due)
|
175
179
|
assert_equal false, hash.key?(:done)
|
@@ -178,8 +182,7 @@ class TaskTest < Test::Unit::TestCase
|
|
178
182
|
|
179
183
|
should 'handle :project, :task and implicit :due' do
|
180
184
|
task = "#{ @task } @due"
|
181
|
-
hash = Taskish::Task.parse(
|
182
|
-
assert_equal @project, hash[:project]
|
185
|
+
hash = Taskish::Task.parse(task)
|
183
186
|
assert_equal @task, hash[:task]
|
184
187
|
assert_equal @today.to_s, hash[:due].to_s
|
185
188
|
assert_equal false, hash.key?(:done)
|
@@ -188,8 +191,7 @@ class TaskTest < Test::Unit::TestCase
|
|
188
191
|
|
189
192
|
should 'handle :project, :task and :done' do
|
190
193
|
task = "#{ @task } @done"
|
191
|
-
hash = Taskish::Task.parse(
|
192
|
-
assert_equal @project, hash[:project]
|
194
|
+
hash = Taskish::Task.parse(task)
|
193
195
|
assert_equal @task, hash[:task]
|
194
196
|
assert_equal false, hash.key?(:due)
|
195
197
|
assert_equal true, hash.key?(:done)
|
@@ -198,8 +200,7 @@ class TaskTest < Test::Unit::TestCase
|
|
198
200
|
|
199
201
|
should 'handle :project, :task, implicit :due and :done' do
|
200
202
|
task = "#{ @task } @due @done"
|
201
|
-
hash = Taskish::Task.parse(
|
202
|
-
assert_equal @project, hash[:project]
|
203
|
+
hash = Taskish::Task.parse(task)
|
203
204
|
assert_equal @task, hash[:task]
|
204
205
|
assert_equal @today.to_s, hash[:due].to_s
|
205
206
|
assert_equal true, hash.key?(:done)
|
@@ -208,8 +209,7 @@ class TaskTest < Test::Unit::TestCase
|
|
208
209
|
|
209
210
|
should 'handle :project, :task and explicit :due' do
|
210
211
|
task = "#{ @task } @due(#{ @today.to_s })"
|
211
|
-
hash = Taskish::Task.parse(
|
212
|
-
assert_equal @project, hash[:project]
|
212
|
+
hash = Taskish::Task.parse(task)
|
213
213
|
assert_equal @task, hash[:task]
|
214
214
|
assert_equal @today.to_s, hash[:due].to_s
|
215
215
|
assert_equal false, hash.key?(:done)
|
@@ -218,8 +218,7 @@ class TaskTest < Test::Unit::TestCase
|
|
218
218
|
|
219
219
|
should 'handle :project, :task, explicit :due and :done' do
|
220
220
|
task = "#{ @task } @due(#{ @today.to_s }) @done"
|
221
|
-
hash = Taskish::Task.parse(
|
222
|
-
assert_equal @project, hash[:project]
|
221
|
+
hash = Taskish::Task.parse(task)
|
223
222
|
assert_equal @task, hash[:task]
|
224
223
|
assert_equal @today.to_s, hash[:due].to_s
|
225
224
|
assert_equal true, hash.key?(:done)
|
@@ -228,8 +227,7 @@ class TaskTest < Test::Unit::TestCase
|
|
228
227
|
|
229
228
|
should 'handle :project, :task and random other tag (by ignoring random other tag)' do
|
230
229
|
task = "#{ @task } @weekly"
|
231
|
-
hash = Taskish::Task.parse(
|
232
|
-
assert_equal @project, hash[:project]
|
230
|
+
hash = Taskish::Task.parse(task)
|
233
231
|
assert_equal task, hash[:task]
|
234
232
|
assert_equal false, hash.key?(:due)
|
235
233
|
assert_equal false, hash.key?(:done)
|
@@ -237,5 +235,26 @@ class TaskTest < Test::Unit::TestCase
|
|
237
235
|
end
|
238
236
|
end
|
239
237
|
|
238
|
+
context '#to_s()' do
|
239
|
+
setup do
|
240
|
+
@parent = Taskish::Project.new('parent project')
|
241
|
+
@task = Taskish::Task.new( @parent, 'child task #1' )
|
242
|
+
@child_p1 = Taskish::Project.new('child project #1')
|
243
|
+
@child_p2 = Taskish::Project.new('child project #2')
|
244
|
+
@child_t1 = Taskish::Task.new( @child_p1, 'child project #1 task #1' )
|
245
|
+
@child_t2 = Taskish::Task.new( @child_p2, 'child project #2 task #1' )
|
246
|
+
@parent << @task
|
247
|
+
@child_p1 << @child_t1
|
248
|
+
@child_p2 << @child_t2
|
249
|
+
@parent << @child_p1
|
250
|
+
@parent << @child_p2
|
251
|
+
end
|
252
|
+
should 'return correct string representation' do
|
253
|
+
assert_equal "parent project: \tchild task #1", @task.to_s
|
254
|
+
assert_equal "parent project: child project #1:\tchild project #1 task #1", @child_t1.to_s
|
255
|
+
assert_equal "parent project: child project #2:\tchild project #2 task #1", @child_t2.to_s
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
240
259
|
end # class TaskTest
|
241
260
|
|