todo-void 0.1.1.pre → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -6,8 +6,11 @@ class TodoInteractor
6
6
  @store = store
7
7
  end
8
8
 
9
- def add_todo(description)
10
- @store.save(Todo.new(description))
9
+ def add_todo(description, tags=[])
10
+ todo = Todo.new(description)
11
+ todo.tags = tags
12
+
13
+ @store.save(todo)
11
14
  end
12
15
 
13
16
  def list_all
data/lib/todo.rb CHANGED
@@ -2,11 +2,12 @@ require 'openssl'
2
2
 
3
3
  class Todo
4
4
  attr_reader :description
5
- attr_accessor :status, :finished_at
5
+ attr_accessor :tags, :status, :finished_at
6
6
 
7
7
  def initialize(description)
8
8
  @description = description
9
9
  @status = :pending
10
+ @tags = []
10
11
  end
11
12
 
12
13
  def id
data/lib/todo_list.rb CHANGED
@@ -1,8 +1,2 @@
1
1
  require 'set'
2
-
3
- class TodoList < Set
4
- def update(todo)
5
- delete(todo)
6
- add(todo)
7
- end
8
- end
2
+ class TodoList < Set; end
data/lib/todo_store.rb CHANGED
@@ -13,7 +13,8 @@ class TodoStore
13
13
  end
14
14
 
15
15
  def update(todo)
16
- @list.update(todo)
16
+ @list.delete(todo)
17
+ @list.add(todo)
17
18
  write
18
19
  end
19
20
 
@@ -37,6 +38,9 @@ class TodoStore
37
38
  unless raw_todo[2].nil?
38
39
  todo.finished_at = DateTime.parse(raw_todo[2]).to_time
39
40
  end
41
+ unless raw_todo[3].nil?
42
+ todo.tags = raw_todo[3].split('|')
43
+ end
40
44
  todo.status = raw_todo[1].to_sym
41
45
  todo
42
46
  end
@@ -44,7 +48,8 @@ class TodoStore
44
48
  def write
45
49
  CSV.open(todo_file, "w") do |csv|
46
50
  @list.each do |todo|
47
- csv << [todo.description, todo.status, todo.finished_at]
51
+ tags = todo.tags.join('|')
52
+ csv << [todo.description, todo.status, todo.finished_at, tags]
48
53
  end
49
54
  end
50
55
  end
data/lib/todo_view.rb CHANGED
@@ -6,12 +6,15 @@ class TodoView
6
6
  end
7
7
 
8
8
  def render
9
- if @todo.status == :finished
9
+ output = if @todo.status == :finished
10
10
  "#{@todo.id} #{@todo.description}".foreground(:black)
11
11
  elsif @todo.status == :started
12
12
  "#{@todo.id.foreground(:green)} #{@todo.description}"
13
13
  else
14
14
  "#{@todo.id.foreground(:yellow)} #{@todo.description}"
15
15
  end
16
+
17
+ output += " (#{@todo.tags.join(', ')})".foreground(:green) unless @todo.tags.empty?
18
+ output
16
19
  end
17
20
  end
data/lib/todo_void.rb CHANGED
@@ -3,7 +3,8 @@ require_relative '../interactors/status_changes_interactor.rb'
3
3
  require_relative './todo_list_view'
4
4
 
5
5
  class TodoVoid
6
- def initialize(args=[])
6
+ def initialize(args=[], interactor = TodoInteractor.new)
7
+ @todo_interactor = interactor
7
8
  @args = args
8
9
  @output = ""
9
10
  end
@@ -18,7 +19,8 @@ class TodoVoid
18
19
  elsif flag?('--help')
19
20
  @output = read_help
20
21
  elsif @args[0]
21
- TodoInteractor.new.add_todo(@args[0])
22
+ tags = extract_tags(@args[1])
23
+ @todo_interactor.add_todo(@args[0], tags)
22
24
  else
23
25
  todos = TodoInteractor.new.list_all
24
26
  @output = TodoListView.render(todos)
@@ -31,6 +33,15 @@ class TodoVoid
31
33
  @args[0] == flag
32
34
  end
33
35
 
36
+ def extract_tags(tag_arg)
37
+ return [] unless tag_arg
38
+
39
+ flag, tags = tag_arg.split("=")
40
+ tags = tags.gsub("'", "")
41
+ tags = tags.split(',')
42
+ tags.map! {|tag| tag.strip}
43
+ end
44
+
34
45
  def hash
35
46
  @args[1]
36
47
  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.1.pre
5
- prerelease: 6
4
+ version: 0.1.1
5
+ prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Robert Curth
@@ -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: 1.3.1
113
+ version: '0'
114
114
  requirements: []
115
115
  rubyforge_project:
116
116
  rubygems_version: 1.8.24