todo-void 0.1 → 0.1.1.pre

Sign up to get free protection for your applications and to get access to all the features.
@@ -21,8 +21,12 @@ class StatusChangesInteractor
21
21
 
22
22
  private
23
23
  def change_todo_status(hash, status)
24
- todos = @list.find(hash).to_array
25
- todos = TodoFilter.new(todos).with_status([:finished, :started, :pending]).recent.execute
24
+ todos = TodoFilter.new(@list)
25
+ .with_hash(hash)
26
+ .with_status([:finished, :started, :pending])
27
+ .recent
28
+ .execute
29
+ todos = todos.to_a
26
30
 
27
31
  case todos.length
28
32
  when 0
@@ -11,7 +11,7 @@ class TodoInteractor
11
11
  end
12
12
 
13
13
  def list_all
14
- todos = @store.todos.to_array
14
+ todos = @store.todos
15
15
  filter_todos(todos)
16
16
  end
17
17
 
data/lib/todo_filter.rb CHANGED
@@ -1,9 +1,16 @@
1
+ require_relative './todo_list'
2
+
1
3
  class TodoFilter
2
4
  def initialize(todos)
3
5
  @todos = todos.dup
4
6
  @todos.reject! { |todo| todo.status == :deleted }
5
7
  end
6
8
 
9
+ def with_hash(search)
10
+ @todos.reject! { |todo| not /^#{search}/.match(todo.id) }
11
+ self
12
+ end
13
+
7
14
  def with_status(statuses)
8
15
  result = []
9
16
  statuses.each do |status|
@@ -24,7 +31,7 @@ class TodoFilter
24
31
  end
25
32
 
26
33
  def execute
27
- @todos
34
+ TodoList.new(@todos)
28
35
  end
29
36
 
30
37
  private
data/lib/todo_list.rb CHANGED
@@ -1,38 +1,8 @@
1
- class TodoList
2
- attr_reader :todo
3
-
4
- def initialize
5
- @todo = {}
6
- end
7
-
8
- def add(todo)
9
- @todo.store(todo.id, todo)
10
- end
11
-
12
- def find(search)
13
- list = TodoList.new
14
- @todo.each do |id, todo|
15
- list.add todo if /^#{search}/.match id
16
- end
17
- list
18
- end
19
-
20
- def length
21
- @todo.length
22
- end
23
-
24
- def empty?
25
- @todo.length == 0
26
- end
1
+ require 'set'
27
2
 
3
+ class TodoList < Set
28
4
  def update(todo)
29
- @todo.delete(todo.id)
30
- @todo[todo.id] = todo
31
- end
32
-
33
- def to_array
34
- todos = []
35
- @todo.each do |id, todo| todos << todo end
36
- todos
5
+ delete(todo)
6
+ add(todo)
37
7
  end
38
8
  end
data/lib/todo_store.rb CHANGED
@@ -24,24 +24,27 @@ class TodoStore
24
24
 
25
25
  private
26
26
  def read
27
- @list = TodoList.new
28
-
29
27
  FileUtils.touch(todo_file)
30
28
  data = CSV.read(todo_file)
31
- data.each do |raw_todo|
32
- todo = Todo.new raw_todo[0]
33
- unless raw_todo[2].nil?
34
- todo.finished_at = DateTime.parse(raw_todo[2]).to_time
35
- end
36
- todo.status = raw_todo[1].to_sym
37
- @list.add todo
29
+ todos = data.map do |raw_todo|
30
+ convert_raw_todo(raw_todo)
31
+ end
32
+ @list = TodoList.new(todos)
33
+ end
34
+
35
+ def convert_raw_todo(raw_todo)
36
+ todo = Todo.new raw_todo[0]
37
+ unless raw_todo[2].nil?
38
+ todo.finished_at = DateTime.parse(raw_todo[2]).to_time
38
39
  end
40
+ todo.status = raw_todo[1].to_sym
41
+ todo
39
42
  end
40
-
43
+
41
44
  def write
42
45
  CSV.open(todo_file, "w") do |csv|
43
- @list.to_array.each do |task|
44
- csv << [task.description, task.status, task.finished_at]
46
+ @list.each do |todo|
47
+ csv << [todo.description, todo.status, todo.finished_at]
45
48
  end
46
49
  end
47
50
  end
metadata CHANGED
@@ -1,8 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: todo-void
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.1'
5
- prerelease:
4
+ version: 0.1.1.pre
5
+ prerelease: 6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Robert Curth
@@ -95,7 +95,7 @@ files:
95
95
  homepage: http://rubygems.org/gems/todo-void
96
96
  licenses:
97
97
  - MIT
98
- post_install_message:
98
+ post_install_message: Enter t 'Mowing the lawn' to create your first task!
99
99
  rdoc_options: []
100
100
  require_paths:
101
101
  - lib
@@ -108,9 +108,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
108
108
  required_rubygems_version: !ruby/object:Gem::Requirement
109
109
  none: false
110
110
  requirements:
111
- - - ! '>='
111
+ - - ! '>'
112
112
  - !ruby/object:Gem::Version
113
- version: '0'
113
+ version: 1.3.1
114
114
  requirements: []
115
115
  rubyforge_project:
116
116
  rubygems_version: 1.8.24