working_class 0.1.1
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 +7 -0
- data/.gitignore +17 -0
- data/.travis.yml +8 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +674 -0
- data/README.md +195 -0
- data/Rakefile +11 -0
- data/lib/working_class.rb +29 -0
- data/lib/working_class/parser.rb +165 -0
- data/lib/working_class/task.rb +82 -0
- data/lib/working_class/tasklist.rb +57 -0
- data/lib/working_class/version.rb +5 -0
- data/test/examples/example_1.txt +3 -0
- data/test/examples/example_2.txt +3 -0
- data/test/examples/example_3.txt +4 -0
- data/test/examples/example_4.txt +4 -0
- data/test/examples/example_5.txt +5 -0
- data/test/examples/example_6.txt +5 -0
- data/test/parser_test.rb +185 -0
- data/test/task_test.rb +108 -0
- data/test/tasklist_test.rb +69 -0
- data/test/test_helper.rb +2 -0
- data/test/working_class_test.rb +24 -0
- data/workingclass.gemspec +26 -0
- metadata +122 -0
@@ -0,0 +1,57 @@
|
|
1
|
+
module WorkingClass
|
2
|
+
|
3
|
+
# A represantation of a Tasklist
|
4
|
+
#
|
5
|
+
# @attr_reader name [String] the name of the Tasklist
|
6
|
+
# @attr_reader tasks [Array<WorkingClass::Task>] the tasks of the Tasklist
|
7
|
+
class Tasklist
|
8
|
+
|
9
|
+
attr_reader :name
|
10
|
+
|
11
|
+
attr_reader :tasks
|
12
|
+
|
13
|
+
# Initializes a new Tasklist with a name and optional Tasks
|
14
|
+
#
|
15
|
+
# @param name [String] the tasklist name
|
16
|
+
# @param tasks [Array<WorkingClass::Task>] an array with Tasks
|
17
|
+
# @return [WorkingClass::Tasklist] the actual Tasklist object
|
18
|
+
#
|
19
|
+
def initialize(name, tasks = [])
|
20
|
+
@name = name
|
21
|
+
@tasks = tasks
|
22
|
+
end
|
23
|
+
|
24
|
+
# Returns all the upcoming tasks
|
25
|
+
#
|
26
|
+
# @return [Array<WorkingClass::Task>] an Array with the upcoming tasks
|
27
|
+
#
|
28
|
+
def upcoming_tasks
|
29
|
+
@tasks.select { |task| task.is_upcoming }
|
30
|
+
end
|
31
|
+
|
32
|
+
# Returns all the tasks that are due tomorrow
|
33
|
+
#
|
34
|
+
# @return [Array<WorkingClass::Task>] an Array with the tasks due tomorrow
|
35
|
+
#
|
36
|
+
def tasks_due_tomorrow
|
37
|
+
@tasks.select { |task| task.is_tomorrow }
|
38
|
+
end
|
39
|
+
|
40
|
+
# Returns all the finished tasks
|
41
|
+
#
|
42
|
+
# @return [Array<WorkingClass::Task>] an Array the finished tasks
|
43
|
+
#
|
44
|
+
def finished_tasks
|
45
|
+
@tasks.select { |task| task.is_finished }
|
46
|
+
end
|
47
|
+
|
48
|
+
# Returns all the unfinished tasks
|
49
|
+
#
|
50
|
+
# @return [Array<WorkingClass::Task>] an Array with the unfinished tasks
|
51
|
+
#
|
52
|
+
def unfinished_tasks
|
53
|
+
@tasks.select { |task| !task.is_finished }
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
data/test/parser_test.rb
ADDED
@@ -0,0 +1,185 @@
|
|
1
|
+
require File.expand_path('../test_helper.rb', __FILE__)
|
2
|
+
|
3
|
+
class ParserTest < Minitest::Test
|
4
|
+
|
5
|
+
include WorkingClass
|
6
|
+
|
7
|
+
def load_example(example_name)
|
8
|
+
path = File.expand_path("../examples/#{example_name}.txt", __FILE__)
|
9
|
+
File.open(path, 'r').read()
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_initialize
|
13
|
+
text = load_example('example_1')
|
14
|
+
parser = Parser.new(text)
|
15
|
+
assert_instance_of(Parser, parser)
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_to_a_simple_task
|
19
|
+
text = load_example('example_1')
|
20
|
+
parser = Parser.new(text)
|
21
|
+
output = parser.to_h
|
22
|
+
|
23
|
+
assert_instance_of(Hash, output)
|
24
|
+
assert_instance_of(Array, output[:tasks])
|
25
|
+
assert_instance_of(Hash, output[:tasks].first)
|
26
|
+
|
27
|
+
assert_equal('A cool todolist', output[:name])
|
28
|
+
assert_equal(1, output[:tasks_count])
|
29
|
+
assert_equal('My Task Number 1', output[:tasks].first[:name])
|
30
|
+
|
31
|
+
assert(!output[:tasks].first[:is_finished])
|
32
|
+
assert_nil(output[:tasks].first[:date])
|
33
|
+
assert_nil(output[:tasks].first[:reminder])
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_to_a_simple_finished_task
|
37
|
+
text = load_example('example_2')
|
38
|
+
parser = Parser.new(text)
|
39
|
+
output = parser.to_h
|
40
|
+
|
41
|
+
assert_instance_of(Hash, output)
|
42
|
+
assert_instance_of(Array, output[:tasks])
|
43
|
+
assert_instance_of(Hash, output[:tasks].first)
|
44
|
+
|
45
|
+
assert_equal('Groceries List', output[:name])
|
46
|
+
assert_equal(1, output[:tasks_count])
|
47
|
+
|
48
|
+
assert_equal('My finished Task', output[:tasks].first[:name])
|
49
|
+
assert(output[:tasks].first[:is_finished])
|
50
|
+
assert_nil(output[:tasks].first[:date])
|
51
|
+
assert_nil(output[:tasks].first[:reminder])
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_to_a_task_with_date
|
55
|
+
text = load_example('example_3')
|
56
|
+
parser = Parser.new(text)
|
57
|
+
output = parser.to_h
|
58
|
+
task_1 = output[:tasks].first
|
59
|
+
task_2 = output[:tasks].last
|
60
|
+
|
61
|
+
assert_instance_of(Hash, output)
|
62
|
+
assert_instance_of(Array, output[:tasks])
|
63
|
+
assert_instance_of(Hash, task_1)
|
64
|
+
assert_instance_of(Hash, task_2)
|
65
|
+
|
66
|
+
assert_equal('Development Todolist', output[:name])
|
67
|
+
assert_equal(2, output[:tasks_count])
|
68
|
+
|
69
|
+
assert_equal('Release WorkingClass', task_1[:name])
|
70
|
+
assert(!task_1[:is_finished])
|
71
|
+
assert_equal(Date.new(2015, 12, 12), task_1[:date])
|
72
|
+
assert_nil(task_1[:reminder])
|
73
|
+
|
74
|
+
assert_equal('Yolo', task_2[:name])
|
75
|
+
assert(task_2[:is_finished])
|
76
|
+
assert_equal(Date.new(2015, 2, 12), task_2[:date])
|
77
|
+
assert_nil(task_2[:reminder])
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_to_a_task_with_full_date
|
81
|
+
text = load_example('example_4')
|
82
|
+
parser = Parser.new(text)
|
83
|
+
output = parser.to_h
|
84
|
+
task_1 = output[:tasks].first
|
85
|
+
task_2 = output[:tasks].last
|
86
|
+
|
87
|
+
assert_instance_of(Hash, output)
|
88
|
+
assert_instance_of(Array, output[:tasks])
|
89
|
+
assert_instance_of(Hash, task_1)
|
90
|
+
assert_instance_of(Hash, task_2)
|
91
|
+
|
92
|
+
assert_equal('Shopping List', output[:name])
|
93
|
+
assert_equal(2, output[:tasks_count])
|
94
|
+
|
95
|
+
assert_equal('Buy some Jeans', task_1[:name])
|
96
|
+
assert(!task_1[:is_finished])
|
97
|
+
assert_equal(Date.new(2015, 1, 12), task_1[:date])
|
98
|
+
assert_nil(task_1[:reminder])
|
99
|
+
|
100
|
+
assert_equal('Buy more Jeans', task_2[:name])
|
101
|
+
assert(!task_2[:is_finished])
|
102
|
+
assert_equal(Date.new(2016, 7 ,5), task_2[:date])
|
103
|
+
assert_equal(DateTime.new(2016, 7, 5, 9, 0), task_2[:reminder])
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_to_a_task_with_absolute_reminder
|
107
|
+
text = load_example('example_5')
|
108
|
+
parser = Parser.new(text)
|
109
|
+
output = parser.to_h
|
110
|
+
task_1 = output[:tasks].first
|
111
|
+
task_2 = output[:tasks].last
|
112
|
+
|
113
|
+
assert_instance_of(Hash, output)
|
114
|
+
assert_instance_of(Array, output[:tasks])
|
115
|
+
assert_instance_of(Hash, task_1)
|
116
|
+
assert_instance_of(Hash, task_2)
|
117
|
+
|
118
|
+
assert_equal('Another List Another Day', output[:name])
|
119
|
+
assert_equal(2, output[:tasks_count])
|
120
|
+
|
121
|
+
assert_equal('Yolo', task_1[:name])
|
122
|
+
assert(task_1[:is_finished])
|
123
|
+
assert_nil(task_1[:date])
|
124
|
+
assert_equal(DateTime.new(2015, 2, 15, 9, 0) ,task_1[:reminder])
|
125
|
+
|
126
|
+
assert_equal('Yolo in the house', task_2[:name])
|
127
|
+
assert(task_2[:is_finished])
|
128
|
+
assert_equal(Date.new(2015, 2, 16), task_2[:date])
|
129
|
+
|
130
|
+
assert_equal(DateTime.new(2015, 2, 15, 13, 0), task_2[:reminder])
|
131
|
+
end
|
132
|
+
|
133
|
+
def test_to_a_task_with_relative_reminder
|
134
|
+
text = load_example('example_6')
|
135
|
+
parser = Parser.new(text)
|
136
|
+
output = parser.to_h
|
137
|
+
task_1 = output[:tasks][0]
|
138
|
+
task_2 = output[:tasks][1]
|
139
|
+
task_3 = output[:tasks][2]
|
140
|
+
|
141
|
+
assert_instance_of(Hash, output)
|
142
|
+
assert_instance_of(Array, output[:tasks])
|
143
|
+
assert_instance_of(Hash, task_1)
|
144
|
+
assert_instance_of(Hash, task_2)
|
145
|
+
|
146
|
+
assert_equal('Yeah more examples', output[:name])
|
147
|
+
assert_equal(3, output[:tasks_count])
|
148
|
+
|
149
|
+
assert_equal('Twitter Downtime', task_1[:name])
|
150
|
+
assert(!task_1[:is_finished])
|
151
|
+
assert_equal(Date.new(2012, 3, 17), task_1[:date])
|
152
|
+
assert_equal(DateTime.new(2012, 3, 16, 9, 0) ,task_1[:reminder])
|
153
|
+
|
154
|
+
assert_equal('Another Task', task_2[:name])
|
155
|
+
assert(!task_2[:is_finished])
|
156
|
+
assert_equal(Date.new(2015, 5, 12), task_2[:date])
|
157
|
+
assert_equal(DateTime.new(2015, 5, 10, 5, 0) ,task_2[:reminder])
|
158
|
+
|
159
|
+
assert_equal('Remind me!!', task_3[:name])
|
160
|
+
assert(task_3[:is_finished])
|
161
|
+
assert_equal(Date.new(2015, 3, 12), task_3[:date])
|
162
|
+
assert_equal(DateTime.new(2015, 3, 12, 5, 0), task_3[:reminder])
|
163
|
+
end
|
164
|
+
|
165
|
+
def test_to_tasklist
|
166
|
+
text = load_example('example_5')
|
167
|
+
parser = Parser.new(text)
|
168
|
+
tasklist = parser.to_tasklist
|
169
|
+
task_1 = tasklist.tasks.first
|
170
|
+
task_2 = tasklist.tasks.last
|
171
|
+
|
172
|
+
assert_instance_of(Tasklist, tasklist)
|
173
|
+
assert_equal(2, tasklist.tasks.length)
|
174
|
+
assert_equal("Another List Another Day", tasklist.name)
|
175
|
+
|
176
|
+
assert_equal('Yolo', task_1.name)
|
177
|
+
assert(task_1.is_finished)
|
178
|
+
assert_nil(task_1.date)
|
179
|
+
|
180
|
+
assert_equal('Yolo in the house', task_2.name)
|
181
|
+
assert(task_2.is_finished)
|
182
|
+
assert_equal(Date.new(2015, 2, 16), task_2.date)
|
183
|
+
|
184
|
+
end
|
185
|
+
end
|
data/test/task_test.rb
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
require File.expand_path('../test_helper.rb', __FILE__)
|
2
|
+
|
3
|
+
class TaskTest < Minitest::Test
|
4
|
+
|
5
|
+
include WorkingClass
|
6
|
+
|
7
|
+
|
8
|
+
def test_initialize
|
9
|
+
task = Task.new "Buy oranges"
|
10
|
+
|
11
|
+
assert_instance_of(Task, task)
|
12
|
+
assert_equal "Buy oranges", task.name
|
13
|
+
assert !task.is_finished?
|
14
|
+
assert_nil task.date
|
15
|
+
assert_nil task.reminder
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_initialize_with_options
|
19
|
+
task = Task.new "Buy even more oranges", :is_finished => true, :reminder => DateTime.new,
|
20
|
+
:date => Date.new
|
21
|
+
|
22
|
+
assert_equal "Buy even more oranges", task.name
|
23
|
+
assert task.is_finished?
|
24
|
+
assert_instance_of DateTime, task.reminder
|
25
|
+
assert_instance_of Date, task.date
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_is_upcoming_today
|
29
|
+
task = Task.new "Futurama Marathon", :date => Date.today
|
30
|
+
|
31
|
+
assert(task.is_upcoming)
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_is_upcoming_tomorrow
|
35
|
+
task = Task.new "Eat healthy", :date => Date.today + 1
|
36
|
+
|
37
|
+
assert(task.is_upcoming)
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_is_upcoming_yesterday
|
41
|
+
task = Task.new "task lists are great", :date => Date.today - 1
|
42
|
+
|
43
|
+
assert(!task.is_upcoming)
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_is_upcoming_already_finished
|
47
|
+
task = Task.new "Backup all the files", :is_finished => true, :date => Date.today
|
48
|
+
|
49
|
+
assert(!task.is_upcoming)
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_is_upcoming_already_finished_tomorrow
|
53
|
+
task = Task.new "Eat chips", :is_finished => true, :date => Date.today + 1
|
54
|
+
|
55
|
+
assert(!task.is_upcoming)
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_is_upcoming_without_date
|
59
|
+
task = Task.new "Backup all the files"
|
60
|
+
|
61
|
+
assert(task.is_upcoming)
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_is_tomorrow
|
65
|
+
task = Task.new "Eat chips", :date => Date.today + 1
|
66
|
+
|
67
|
+
assert(task.is_tomorrow)
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_is_tomorrow_was_actually_yesterday
|
71
|
+
task = Task.new "Eat chips", :date => Date.today - 1
|
72
|
+
|
73
|
+
assert(!task.is_tomorrow)
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_is_tomorrow_is_actually_next_week
|
77
|
+
task = Task.new "Eat chips", :date => Date.today + 9
|
78
|
+
|
79
|
+
assert(!task.is_tomorrow)
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_is_tomorrow_without_a_date
|
83
|
+
task = Task.new "Eat chips"
|
84
|
+
|
85
|
+
assert(task.is_tomorrow)
|
86
|
+
end
|
87
|
+
|
88
|
+
def test_is_tomorrow_already_finished
|
89
|
+
task = Task.new "Eat chips", :is_finished => true, :date => Date.today + 1
|
90
|
+
|
91
|
+
assert(!task.is_tomorrow)
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_alias_methods
|
95
|
+
|
96
|
+
task = Task.new "my awesome task"
|
97
|
+
|
98
|
+
assert_respond_to(task, :is_finished?)
|
99
|
+
assert_respond_to(task, :finished?)
|
100
|
+
|
101
|
+
assert_respond_to(task, :is_tomorrow?)
|
102
|
+
assert_respond_to(task, :tomorrow?)
|
103
|
+
|
104
|
+
assert_respond_to(task, :is_upcoming?)
|
105
|
+
assert_respond_to(task, :upcoming?)
|
106
|
+
end
|
107
|
+
|
108
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require File.expand_path('../test_helper.rb', __FILE__)
|
2
|
+
|
3
|
+
class TasklistTest < Minitest::Test
|
4
|
+
|
5
|
+
include WorkingClass
|
6
|
+
|
7
|
+
def test_initialize
|
8
|
+
tasklist = Tasklist.new('my list')
|
9
|
+
|
10
|
+
assert_instance_of(Array, tasklist.tasks)
|
11
|
+
assert_equal('my list', tasklist.name)
|
12
|
+
assert_equal(0, tasklist.tasks.length)
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_upcoming_tasks
|
16
|
+
task_1 = Task.new("Task 1", :is_finished => true, :date => Date.today + 2)
|
17
|
+
task_2 = Task.new("Task 2", :date => Date.today)
|
18
|
+
task_3 = Task.new("Task 3", :is_finished => true, :date => Date.today - 1)
|
19
|
+
tasks = [task_1, task_2, task_3]
|
20
|
+
|
21
|
+
tasklist = Tasklist.new("example_task_list", tasks)
|
22
|
+
expected = [task_2]
|
23
|
+
|
24
|
+
assert_equal(expected, tasklist.upcoming_tasks)
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_finished_tasks
|
29
|
+
task_1 = Task.new("Task 1", :is_finished => true)
|
30
|
+
task_2 = Task.new("Task 2")
|
31
|
+
task_3 = Task.new("Task 3", :is_finished => true)
|
32
|
+
tasks = [task_1, task_2, task_3]
|
33
|
+
|
34
|
+
tasklist = Tasklist.new("example_task_list", tasks)
|
35
|
+
expected = [task_1, task_3]
|
36
|
+
|
37
|
+
assert_equal(expected, tasklist.finished_tasks)
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_tasks_due_tomorrow
|
41
|
+
task_1 = Task.new("Task 1", :is_finished => true, :date => Date.today + 1)
|
42
|
+
task_2 = Task.new("Task 2")
|
43
|
+
task_3 = Task.new("Task 3", :date => Date.today + 2)
|
44
|
+
task_4 = Task.new("Task 4", :date => Date.today + 1 )
|
45
|
+
|
46
|
+
tasks = [task_1, task_2, task_3, task_4]
|
47
|
+
|
48
|
+
tasklist = Tasklist.new("example_task_list", tasks)
|
49
|
+
expected = [task_2, task_4]
|
50
|
+
|
51
|
+
assert_equal(expected, tasklist.tasks_due_tomorrow)
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_unfinished_tasks
|
55
|
+
task_1 = Task.new("Task 1", :is_finished => true)
|
56
|
+
task_2 = Task.new("Task 2")
|
57
|
+
task_3 = Task.new("Task 3")
|
58
|
+
task_4 = Task.new("Task 4", :is_finished => true)
|
59
|
+
|
60
|
+
tasks = [task_1, task_2, task_3, task_4]
|
61
|
+
|
62
|
+
tasklist = Tasklist.new("example_task_list", tasks)
|
63
|
+
expected = [task_2, task_3]
|
64
|
+
|
65
|
+
assert_equal(expected, tasklist.unfinished_tasks)
|
66
|
+
end
|
67
|
+
|
68
|
+
|
69
|
+
end
|