my_todo 2.8.0 → 3.0.0
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 +4 -4
- data/README.md +1 -1
- data/lib/db/todos_development.sqlite3 +0 -0
- data/lib/db/todos_test.sqlite3 +0 -0
- data/lib/my_todo/modules/finders.rb +28 -0
- data/lib/my_todo/modules/my_todo_actions.rb +18 -0
- data/lib/my_todo/modules/templates.rb +18 -0
- data/lib/my_todo/templates/item.erb +2 -0
- data/lib/my_todo/templates/list.erb +7 -0
- data/lib/my_todo/templates/notes.erb +9 -0
- data/lib/my_todo/templates/{output.erb → results.erb} +8 -5
- data/lib/my_todo/version.rb +1 -1
- data/lib/my_todo.rb +43 -71
- data/spec/actions/add_note_spec.rb +27 -0
- data/spec/actions/create_spec.rb +3 -3
- data/spec/actions/delete_spec.rb +2 -2
- data/spec/actions/list_spec.rb +22 -0
- data/spec/actions/notes_spec.rb +27 -0
- data/spec/actions/search_spec.rb +8 -4
- data/spec/actions/update_spec.rb +1 -5
- data/spec/spec_helper.rb +1 -0
- metadata +16 -6
- data/spec/actions/note_spec.rb +0 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 093228595b114cced5a32a36ad34238f403ed5dc
|
4
|
+
data.tar.gz: 6f1c939f68f4f6249235f6520a42b038420431d6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cae431c8ee769fece3442cb705bc60871a6067306ee9aa48ffd323325995fa4dbb9c8f80556cbb6cfaaf81dcbfb27088dd4a3f31a182a96d2d3b07e0ccef3337
|
7
|
+
data.tar.gz: fed9ceeb3af9c1043d389b878fa1a26b7174ecc88d2e2acc7713ee726cc6d6e23f93f48e6b7666ca3e11770f043e4e84ee45908f65eb67375f64222605e9e909
|
data/README.md
CHANGED
@@ -92,7 +92,7 @@ NOTE: In development, all commands must be run with the RAILS_ENV included. This
|
|
92
92
|
|
93
93
|
## Testing
|
94
94
|
|
95
|
-
Run `RAILS_ENV=test bin/my_todo rake db:migrate` to create the test db. Then run `rake` to run the RSpec tests.
|
95
|
+
Run `RAILS_ENV=test bin/my_todo rake db:migrate` to create the test db. Then run `RAILS_ENV=test bundle exec rake` to run the RSpec tests.
|
96
96
|
|
97
97
|
## Releasing
|
98
98
|
To release a new version,
|
Binary file
|
data/lib/db/todos_test.sqlite3
CHANGED
Binary file
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Finders
|
2
|
+
def item
|
3
|
+
@item ||= Item.where(id: options[:id]).first
|
4
|
+
end
|
5
|
+
|
6
|
+
def item_notes
|
7
|
+
@item_notes ||= item.notes
|
8
|
+
end
|
9
|
+
|
10
|
+
def all_items
|
11
|
+
@items = case options[:status]
|
12
|
+
when 'all'
|
13
|
+
Item.all
|
14
|
+
when 'done'
|
15
|
+
Item.where(done: true)
|
16
|
+
else
|
17
|
+
Item.where(done: false)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def detailed_statuses
|
22
|
+
@detailed_statuses ||= Item::DETAILED_STATUSES
|
23
|
+
end
|
24
|
+
|
25
|
+
def list_statuses
|
26
|
+
detailed_statuses.each_with_index {|status, index| say "#{index}: #{status}"}
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module MyTodoActions
|
2
|
+
def ask_status
|
3
|
+
list_statuses
|
4
|
+
@status = ask("Choose a status for item", default: 1)
|
5
|
+
end
|
6
|
+
|
7
|
+
def create_item(options)
|
8
|
+
ask_status
|
9
|
+
@item = Item.create!(options.merge({detailed_status: detailed_statuses[@status.to_i]}).except(:tags))
|
10
|
+
options[:tags].split(' ').each{|tag| item.tags.create(name: tag) }
|
11
|
+
end
|
12
|
+
|
13
|
+
def update_item(options)
|
14
|
+
ask_status
|
15
|
+
new_status = detailed_statuses[@status.to_i]
|
16
|
+
item.detailed_status != new_status ? item.update!(options.merge({detailed_status: new_status})) : item.update!(options)
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Templates
|
2
|
+
p __dir__
|
3
|
+
def print_list
|
4
|
+
say ERB.new(File.read("#{__dir__}/../templates/list.erb"), nil, '-').result(binding)
|
5
|
+
end
|
6
|
+
|
7
|
+
def print_notes
|
8
|
+
say ERB.new(File.read("#{__dir__}/../templates/notes.erb"), nil, '-').result(binding)
|
9
|
+
end
|
10
|
+
|
11
|
+
def print_search_results
|
12
|
+
say ERB.new(File.read("#{__dir__}/../templates/results.erb"), nil, '-').result(binding)
|
13
|
+
end
|
14
|
+
|
15
|
+
def print_item
|
16
|
+
say ERB.new(File.read("#{__dir__}/../templates/item.erb"), nil, '-').result(binding)
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,7 @@
|
|
1
|
+
|
2
|
+
<% @items.each do |item| -%>
|
3
|
+
ID: <%= item.id %> | Created On: <%= item.created_at.strftime("%Y-%m-%d") %> | Tags: <%= item.tags.map(&:name).join(', ') %> | Status: <%= item.detailed_status %> | Complete: <%= item.done %>
|
4
|
+
|
5
|
+
<%= item.body %>
|
6
|
+
<%= '*' * 100 %>
|
7
|
+
<% end -%>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<% if item_notes.any? -%>
|
2
|
+
Notes for <%= item.id %>: <%= item.body %>
|
3
|
+
<% item_notes.each do |note| -%>
|
4
|
+
ID: <%= note.id %> | Created On: <%= note.created_at.strftime("%Y-%m-%d")%>
|
5
|
+
<%= note.body %>
|
6
|
+
<% end %>
|
7
|
+
<% else -%>
|
8
|
+
No Notes for item <%= item.id %>
|
9
|
+
<% end %>
|
@@ -1,10 +1,13 @@
|
|
1
1
|
|
2
|
+
<% @items.each do |item| -%>
|
2
3
|
ID: <%= item.id %> | Created On: <%= item.created_at.strftime("%Y-%m-%d") %> | Tags: <%= item.tags.map(&:name).join(', ') %> | Status: <%= item.detailed_status %> | Complete: <%= item.done %>
|
3
4
|
<%= item.body %>
|
5
|
+
|
4
6
|
<% if item.notes.any? -%>
|
5
|
-
Notes:
|
6
7
|
<% item.notes.each do |note| -%>
|
7
|
-
|
8
|
-
<%=
|
9
|
-
<% end
|
10
|
-
<% end
|
8
|
+
[<%= note.id %>] <%= note.body %>
|
9
|
+
<%= '-' * 100 %>
|
10
|
+
<% end -%>
|
11
|
+
<% end -%>
|
12
|
+
<%= '*' * 100 %>
|
13
|
+
<% end -%>
|
data/lib/my_todo/version.rb
CHANGED
data/lib/my_todo.rb
CHANGED
@@ -13,7 +13,9 @@ require_relative 'my_todo/models/item'
|
|
13
13
|
require_relative 'my_todo/models/stub'
|
14
14
|
require_relative 'my_todo/models/tag'
|
15
15
|
require_relative 'my_todo/models/note'
|
16
|
-
|
16
|
+
require_relative 'my_todo/modules/templates'
|
17
|
+
require_relative 'my_todo/modules/finders'
|
18
|
+
require_relative 'my_todo/modules/my_todo_actions'
|
17
19
|
module MyTodo
|
18
20
|
# Todo tasks using thor gem
|
19
21
|
class Todo < Thor
|
@@ -22,59 +24,19 @@ module MyTodo
|
|
22
24
|
|
23
25
|
# Private methods
|
24
26
|
no_commands do
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
def item
|
30
|
-
@item ||= Item.where(id: options[:id]).first
|
31
|
-
end
|
32
|
-
|
33
|
-
def detailed_statuses
|
34
|
-
@detailed_statuses ||= Item::DETAILED_STATUSES
|
35
|
-
end
|
36
|
-
|
37
|
-
def list_statuses
|
38
|
-
detailed_statuses.each_with_index {|status, index| say "#{index}: #{status}"}
|
39
|
-
end
|
40
|
-
|
41
|
-
def ask_status
|
42
|
-
list_statuses
|
43
|
-
@status = ask("Choose a status for item", default: 1)
|
44
|
-
end
|
45
|
-
|
46
|
-
def all_items(status)
|
47
|
-
case status
|
48
|
-
when 'all'
|
49
|
-
Item.all
|
50
|
-
when 'done'
|
51
|
-
Item.where(done: true)
|
52
|
-
else
|
53
|
-
Item.where(done: false)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
def create_item(options)
|
58
|
-
ask_status
|
59
|
-
@item = Item.create!(options.merge({detailed_status: detailed_statuses[@status.to_i]}).except(:tags))
|
60
|
-
options[:tags].split(' ').each{|tag| item.tags.create(name: tag) }
|
61
|
-
end
|
62
|
-
|
63
|
-
def update_item(options)
|
64
|
-
ask_status
|
65
|
-
new_status = detailed_statuses[@status.to_i]
|
66
|
-
item.detailed_status != new_status ? item.update!(options.merge({detailed_status: new_status})) : item.update!(options)
|
67
|
-
end
|
27
|
+
include Templates
|
28
|
+
include Finders
|
29
|
+
include MyTodoActions
|
68
30
|
end
|
69
31
|
|
70
|
-
desc 'list
|
71
|
-
|
72
|
-
|
73
|
-
say "ToDos FOUND: #{
|
74
|
-
|
32
|
+
desc 'list --status=done', 'List todos. Default: undone, [all], [done], [undone]'
|
33
|
+
option :status, default: nil
|
34
|
+
def list
|
35
|
+
say "ToDos FOUND: #{all_items.count}"
|
36
|
+
print_list
|
75
37
|
end
|
76
38
|
|
77
|
-
desc "create --body='some text' [--done=true] [--tags='tag1 tag2']", '
|
39
|
+
desc "create --body='some text' [--done=true] [--tags='tag1 tag2']", 'Create a todo'
|
78
40
|
option :body
|
79
41
|
option :done, default: false
|
80
42
|
option :tags, default: 'default'
|
@@ -83,13 +45,13 @@ module MyTodo
|
|
83
45
|
begin
|
84
46
|
say 'ToDo CREATED!'
|
85
47
|
create_item(options)
|
86
|
-
|
48
|
+
print_item
|
87
49
|
rescue ActiveRecord::RecordInvalid => e
|
88
50
|
say e.message
|
89
51
|
end
|
90
52
|
end
|
91
53
|
|
92
|
-
desc "update --id=TODO_ID --body='some text' [--done=true]", '
|
54
|
+
desc "update --id=TODO_ID --body='some text' [--done=true]", 'Change an existing todo'
|
93
55
|
option :id
|
94
56
|
option :body
|
95
57
|
option :done
|
@@ -98,17 +60,16 @@ module MyTodo
|
|
98
60
|
begin
|
99
61
|
update_item(options)
|
100
62
|
say 'ToDo UPDATED!'
|
101
|
-
|
63
|
+
print_item
|
102
64
|
rescue ActiveRecord::RecordInvalid => e
|
103
65
|
say e.message
|
104
66
|
end
|
105
67
|
end
|
106
68
|
|
107
|
-
desc 'delete
|
108
|
-
|
69
|
+
desc 'delete', 'Destroy a todo'
|
70
|
+
option :id, required: true
|
71
|
+
def delete
|
109
72
|
begin
|
110
|
-
item = Item.find_by_id(id)
|
111
|
-
output item
|
112
73
|
item.destroy!
|
113
74
|
say 'ToDo DESTROYED!'
|
114
75
|
rescue StandardError => e
|
@@ -116,57 +77,68 @@ module MyTodo
|
|
116
77
|
end
|
117
78
|
end
|
118
79
|
|
119
|
-
desc 'search
|
120
|
-
|
121
|
-
|
122
|
-
|
80
|
+
desc 'search', 'Find a todo by item body, tag name or note body'
|
81
|
+
option :text, required: true
|
82
|
+
def search
|
83
|
+
@items = Item.ransack(body_or_detailed_status_or_tags_name_or_notes_body_cont: options[:text]).result
|
84
|
+
say "ToDos FOUND: #{@items.count}"
|
123
85
|
say "Search based on ransack search: body_or_detailed_status_or_tags_name_or_notes_body_cont"
|
124
|
-
|
86
|
+
print_search_results
|
125
87
|
end
|
126
88
|
|
127
|
-
desc "tag --id=TODO_ID --tag=TAG_NAME", '
|
89
|
+
desc "tag --id=TODO_ID --tag=TAG_NAME", 'Add a tag to an existing todo'
|
128
90
|
option :id
|
129
91
|
option :tag
|
130
92
|
def tag
|
131
93
|
begin
|
132
94
|
item.tags.create!(name: options[:tag])
|
133
|
-
|
95
|
+
print_list item.reload
|
134
96
|
rescue StandardError => e
|
135
97
|
say e.message
|
136
98
|
end
|
137
99
|
end
|
138
100
|
|
139
|
-
desc 'rm_tag --id=TODO_ID --tag=TAG_NAME', '
|
101
|
+
desc 'rm_tag --id=TODO_ID --tag=TAG_NAME', 'Remove tag from an existing todo'
|
140
102
|
option :id
|
141
103
|
option :tag
|
142
104
|
def rm_tag
|
143
105
|
begin
|
144
106
|
item.tags.where(name: options[:tag]).first.destroy!
|
145
|
-
|
107
|
+
print_list item.reload
|
146
108
|
rescue StandardError => e
|
147
109
|
say e.message
|
148
110
|
end
|
149
111
|
end
|
150
112
|
|
151
|
-
desc "
|
113
|
+
desc "add_note --id=TODO_ID --body='text'", 'Adds note to existing item'
|
152
114
|
option :id
|
153
115
|
option :body
|
154
|
-
def
|
116
|
+
def add_note
|
155
117
|
begin
|
156
118
|
item.notes.create(body: options[:body])
|
157
|
-
|
119
|
+
print_notes
|
158
120
|
rescue StandardError => e
|
159
121
|
say e.message
|
160
122
|
end
|
161
123
|
end
|
162
124
|
|
163
|
-
desc 'rm_note --id=TODO_ID --noteid=NOTE_ID', '
|
125
|
+
desc 'rm_note --id=TODO_ID --noteid=NOTE_ID', 'Remove note for exsiting item'
|
164
126
|
option :id
|
165
127
|
option :noteid
|
166
128
|
def rm_note
|
167
129
|
begin
|
168
130
|
item.notes.where(id: options[:noteid]).first.destroy!
|
169
|
-
|
131
|
+
print_list item.reload
|
132
|
+
rescue StandardError => e
|
133
|
+
say e.message
|
134
|
+
end
|
135
|
+
end
|
136
|
+
|
137
|
+
desc 'notes --id=TODO_ID', 'Display notes for a given todo'
|
138
|
+
option :id
|
139
|
+
def notes
|
140
|
+
begin
|
141
|
+
print_notes
|
170
142
|
rescue StandardError => e
|
171
143
|
say e.message
|
172
144
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MyTodo do
|
4
|
+
describe 'add_note' do
|
5
|
+
before {@todo = FactoryGirl.create(:item)}
|
6
|
+
context 'successful creation' do
|
7
|
+
it 'creates a note' do
|
8
|
+
expect{MyTodo::Todo.start(%W[add_note --id=#{@todo.id} --body=note_text])}.to change{Note.count}.by(1)
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'associates note to item' do
|
12
|
+
MyTodo::Todo.start(%W[add_note --id=#{@todo.id} --body=note_text])
|
13
|
+
expect(@todo.notes.size).to eq 1
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'displays item with notes' do
|
17
|
+
expect{MyTodo::Todo.start(%W[add_note --id=#{@todo.id} --body=note_text])}.to output("Notes for 1: Some Body\nID: 1 | Created On: 2016-12-12\nnote_text\n\n\n").to_stdout
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'unsuccessful creation' do
|
22
|
+
it 'returns exception if partent item is not found' do
|
23
|
+
expect{MyTodo::Todo.start(%W[add_note --id=#{@todo.id + 1}])}.to output("undefined method `notes' for nil:NilClass\n").to_stdout
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/spec/actions/create_spec.rb
CHANGED
@@ -33,7 +33,7 @@ describe MyTodo do
|
|
33
33
|
end
|
34
34
|
|
35
35
|
it 'displays the created todo item' do
|
36
|
-
expect{MyTodo::Todo.start(%w(create --body=wierdness_of_text))}.to output("ToDo CREATED!\n0: None\n1: In Progress\n2: Complete\n3: Punted\n4: Waiting Feedback\
|
36
|
+
expect{MyTodo::Todo.start(%w(create --body=wierdness_of_text))}.to output("ToDo CREATED!\n0: None\n1: In Progress\n2: Complete\n3: Punted\n4: Waiting Feedback\nID: 1 | Created On: #{Date.today} | Tags: default | Status: In Progress | Complete: false\nwierdness_of_text\n").to_stdout
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
@@ -43,7 +43,7 @@ describe MyTodo do
|
|
43
43
|
end
|
44
44
|
|
45
45
|
it 'displays the created todo item with tag' do
|
46
|
-
expect{MyTodo::Todo.start(%w(create --body=wierdness_of_text --tags=tag1))}.to output("ToDo CREATED!\n0: None\n1: In Progress\n2: Complete\n3: Punted\n4: Waiting Feedback\
|
46
|
+
expect{MyTodo::Todo.start(%w(create --body=wierdness_of_text --tags=tag1))}.to output("ToDo CREATED!\n0: None\n1: In Progress\n2: Complete\n3: Punted\n4: Waiting Feedback\nID: 1 | Created On: #{Date.today} | Tags: tag1 | Status: In Progress | Complete: false\nwierdness_of_text\n").to_stdout
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
@@ -56,7 +56,7 @@ describe MyTodo do
|
|
56
56
|
end
|
57
57
|
|
58
58
|
it 'displays the created to item with complete set to true' do
|
59
|
-
expect{MyTodo::Todo.start(%w[create --body=wierdness_of_text --done=true])}.to output("ToDo CREATED!\n0: None\n1: In Progress\n2: Complete\n3: Punted\n4: Waiting Feedback\
|
59
|
+
expect{MyTodo::Todo.start(%w[create --body=wierdness_of_text --done=true])}.to output("ToDo CREATED!\n0: None\n1: In Progress\n2: Complete\n3: Punted\n4: Waiting Feedback\nID: 1 | Created On: #{Date.today} | Tags: default | Status: In Progress | Complete: true\nwierdness_of_text\n").to_stdout
|
60
60
|
end
|
61
61
|
end
|
62
62
|
end
|
data/spec/actions/delete_spec.rb
CHANGED
@@ -5,11 +5,11 @@ describe MyTodo do
|
|
5
5
|
before {@todo = FactoryGirl.create(:item)}
|
6
6
|
|
7
7
|
it 'destroys todo item' do
|
8
|
-
expect{MyTodo::Todo.start(%W(delete
|
8
|
+
expect{MyTodo::Todo.start(%W(delete --id=#{@todo.id}))}.to change{Item.count}.by(-1)
|
9
9
|
end
|
10
10
|
|
11
11
|
it 'returns nil exception if todo item is invalid' do
|
12
|
-
expect{MyTodo::Todo.start(%W[delete
|
12
|
+
expect{MyTodo::Todo.start(%W[delete --id=#{@todo.id + 1}])}.to output("undefined method `destroy!' for nil:NilClass\n").to_stdout
|
13
13
|
end
|
14
14
|
end
|
15
15
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MyTodo do
|
4
|
+
describe 'list' do
|
5
|
+
before do
|
6
|
+
@todo1 = FactoryGirl.create :item, done: true
|
7
|
+
@todo2 = FactoryGirl.create :item, done: false
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'displays items with done set to true' do
|
11
|
+
expect{MyTodo::Todo.start(%w[list --status=done])}.to output("ToDos FOUND: 1\n\nID: 1 | Created On: #{Date.today} | Tags: | Status: | Complete: true\n\nSome Body\n****************************************************************************************************\n").to_stdout
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'displays items with done set to false by default' do
|
15
|
+
expect{MyTodo::Todo.start(%w[list])}.to output("ToDos FOUND: 1\n\nID: 2 | Created On: #{Date.today} | Tags: | Status: | Complete: false\n\nSome Body\n****************************************************************************************************\n").to_stdout
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'displays all items' do
|
19
|
+
expect{MyTodo::Todo.start(%w[list --status=all])}.to output("ToDos FOUND: 2\n\nID: 1 | Created On: #{Date.today} | Tags: | Status: | Complete: true\n\nSome Body\n****************************************************************************************************\nID: 2 | Created On: #{Date.today} | Tags: | Status: | Complete: false\n\nSome Body\n****************************************************************************************************\n").to_stdout
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe MyTodo do
|
4
|
+
describe 'notes' do
|
5
|
+
before {@todo = FactoryGirl.create(:item)}
|
6
|
+
|
7
|
+
context 'item has a note' do
|
8
|
+
before {@todo.notes.create(body: 'What a world!')}
|
9
|
+
|
10
|
+
it 'displays note' do
|
11
|
+
expect{MyTodo::Todo.start(%W[notes --id=#{@todo.id}])}.to output("Notes for 1: Some Body\nID: 1 | Created On: 2016-12-12\nWhat a world!\n\n\n").to_stdout
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
context "doesn't have a note" do
|
16
|
+
it 'displays no notes message' do
|
17
|
+
expect{MyTodo::Todo.start(%W[notes --id=#{@todo.id}])}.to output("No Notes for item #{@todo.id}\n\n").to_stdout
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
context 'unsuccessful creation' do
|
22
|
+
it 'returns exception if partent item is not found' do
|
23
|
+
expect{MyTodo::Todo.start(%W[add_note --id=#{@todo.id + 1}])}.to output("undefined method `notes' for nil:NilClass\n").to_stdout
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/spec/actions/search_spec.rb
CHANGED
@@ -12,22 +12,26 @@ describe MyTodo do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
it 'finds todo item by body' do
|
15
|
-
expect{MyTodo::Todo.start( %w[search nfl])}.to output("ToDos FOUND: 1\nSearch based on ransack search: body_or_detailed_status_or_tags_name_or_notes_body_cont\n\nID: 1 | Created On:
|
15
|
+
expect{MyTodo::Todo.start( %w[search --text=nfl])}.to output("ToDos FOUND: 1\nSearch based on ransack search: body_or_detailed_status_or_tags_name_or_notes_body_cont\n\nID: 1 | Created On: #{Date.today} | Tags: tag1 | Status: | Complete: \nnfl\n\n****************************************************************************************************\n").to_stdout
|
16
16
|
end
|
17
17
|
|
18
18
|
it 'finds todo items by associated tag' do
|
19
|
-
expect{MyTodo::Todo.start( %w[search tag1])}.to output("ToDos FOUND: 1\nSearch based on ransack search: body_or_detailed_status_or_tags_name_or_notes_body_cont\n\nID: 1 | Created On:
|
19
|
+
expect{MyTodo::Todo.start( %w[search --text=tag1])}.to output("ToDos FOUND: 1\nSearch based on ransack search: body_or_detailed_status_or_tags_name_or_notes_body_cont\n\nID: 1 | Created On: #{Date.today} | Tags: tag1 | Status: | Complete: \nnfl\n\n****************************************************************************************************\n").to_stdout
|
20
20
|
end
|
21
21
|
|
22
22
|
it 'finds todo items by detailed status' do
|
23
23
|
@todo2.update!(detailed_status: 'None')
|
24
|
-
expect{MyTodo::Todo.start( %w[search None])}.to output("ToDos FOUND: 1\nSearch based on ransack search: body_or_detailed_status_or_tags_name_or_notes_body_cont\n\nID: 2 | Created On:
|
24
|
+
expect{MyTodo::Todo.start( %w[search --text=None])}.to output("ToDos FOUND: 1\nSearch based on ransack search: body_or_detailed_status_or_tags_name_or_notes_body_cont\n\nID: 2 | Created On: #{Date.today} | Tags: | Status: None | Complete: \nrocks\n\n****************************************************************************************************\n").to_stdout
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'finds todo items by notes' do
|
28
|
+
expect{MyTodo::Todo.start( %w[search --text=note1])}.to output("ToDos FOUND: 1\nSearch based on ransack search: body_or_detailed_status_or_tags_name_or_notes_body_cont\n\nID: 3 | Created On: 2016-12-12 | Tags: | Status: | Complete: \nalways\n\n [1] note1\n ----------------------------------------------------------------------------------------------------\n****************************************************************************************************\n").to_stdout
|
25
29
|
end
|
26
30
|
end
|
27
31
|
|
28
32
|
context 'unsuccessful search' do
|
29
33
|
it 'returns no results when searching on invalid body' do
|
30
|
-
expect{MyTodo::Todo.start( %w(search no_body))}.to output("ToDos FOUND: 0\nSearch based on ransack search: body_or_detailed_status_or_tags_name_or_notes_body_cont\n").to_stdout
|
34
|
+
expect{MyTodo::Todo.start( %w(search --text=no_body))}.to output("ToDos FOUND: 0\nSearch based on ransack search: body_or_detailed_status_or_tags_name_or_notes_body_cont\n\n").to_stdout
|
31
35
|
end
|
32
36
|
end
|
33
37
|
end
|
data/spec/actions/update_spec.rb
CHANGED
@@ -1,10 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe MyTodo do
|
4
|
-
def shell
|
5
|
-
@shell ||= Thor::Shell::Basic.new
|
6
|
-
end
|
7
|
-
|
8
4
|
describe 'update' do
|
9
5
|
before do
|
10
6
|
expect(Thor::LineEditor).to receive(:readline).with("Choose a status for item (1) ", {:default=>1}).and_return("In Progress")
|
@@ -13,7 +9,7 @@ describe MyTodo do
|
|
13
9
|
|
14
10
|
context 'successful update' do
|
15
11
|
it 'displays the update' do
|
16
|
-
expect{MyTodo::Todo.start(%W[update --id=#{@todo.id} --body=hello])}.to output("0: None\n1: In Progress\n2: Complete\n3: Punted\n4: Waiting Feedback\nToDo UPDATED!\
|
12
|
+
expect{MyTodo::Todo.start(%W[update --id=#{@todo.id} --body=hello])}.to output("0: None\n1: In Progress\n2: Complete\n3: Punted\n4: Waiting Feedback\nToDo UPDATED!\nID: 1 | Created On: #{Date.today} | Tags: | Status: None | Complete: \nhello\n").to_stdout
|
17
13
|
end
|
18
14
|
end
|
19
15
|
|
data/spec/spec_helper.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# code climent must be loaded and started before RAILS_ENV is declared
|
2
2
|
require "codeclimate-test-reporter"
|
3
3
|
CodeClimate::TestReporter.start
|
4
|
+
ENV['CODECLIMATE_REPO_TOKEN'] = ENV['MYTOD_CC']
|
4
5
|
ENV["RAILS_ENV"] = 'test'
|
5
6
|
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
6
7
|
require 'database_cleaner'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: my_todo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vell
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-12-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -269,15 +269,23 @@ files:
|
|
269
269
|
- lib/my_todo/models/note.rb
|
270
270
|
- lib/my_todo/models/stub.rb
|
271
271
|
- lib/my_todo/models/tag.rb
|
272
|
+
- lib/my_todo/modules/finders.rb
|
273
|
+
- lib/my_todo/modules/my_todo_actions.rb
|
274
|
+
- lib/my_todo/modules/templates.rb
|
272
275
|
- lib/my_todo/templates/config.yml.erb
|
273
|
-
- lib/my_todo/templates/
|
276
|
+
- lib/my_todo/templates/item.erb
|
277
|
+
- lib/my_todo/templates/list.erb
|
278
|
+
- lib/my_todo/templates/notes.erb
|
279
|
+
- lib/my_todo/templates/results.erb
|
274
280
|
- lib/my_todo/templates/standalone_migrations.yml.erb
|
275
281
|
- lib/my_todo/version.rb
|
276
282
|
- lib/setup.rb
|
277
283
|
- my_todo.gemspec
|
284
|
+
- spec/actions/add_note_spec.rb
|
278
285
|
- spec/actions/create_spec.rb
|
279
286
|
- spec/actions/delete_spec.rb
|
280
|
-
- spec/actions/
|
287
|
+
- spec/actions/list_spec.rb
|
288
|
+
- spec/actions/notes_spec.rb
|
281
289
|
- spec/actions/rm_note_spec.rb
|
282
290
|
- spec/actions/rm_tag_spec.rb
|
283
291
|
- spec/actions/search_spec.rb
|
@@ -310,14 +318,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
310
318
|
version: '0'
|
311
319
|
requirements: []
|
312
320
|
rubyforge_project:
|
313
|
-
rubygems_version: 2.
|
321
|
+
rubygems_version: 2.4.8
|
314
322
|
signing_key:
|
315
323
|
specification_version: 4
|
316
324
|
summary: A basic todo application with tags.
|
317
325
|
test_files:
|
326
|
+
- spec/actions/add_note_spec.rb
|
318
327
|
- spec/actions/create_spec.rb
|
319
328
|
- spec/actions/delete_spec.rb
|
320
|
-
- spec/actions/
|
329
|
+
- spec/actions/list_spec.rb
|
330
|
+
- spec/actions/notes_spec.rb
|
321
331
|
- spec/actions/rm_note_spec.rb
|
322
332
|
- spec/actions/rm_tag_spec.rb
|
323
333
|
- spec/actions/search_spec.rb
|
data/spec/actions/note_spec.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe MyTodo do
|
4
|
-
describe 'note' do
|
5
|
-
before {@todo = FactoryGirl.create(:item)}
|
6
|
-
context 'successful creation' do
|
7
|
-
it 'creates a note' do
|
8
|
-
expect{MyTodo::Todo.start(%W[note --id=#{@todo.id} --body=note_text])}.to change{Note.count}.by(1)
|
9
|
-
end
|
10
|
-
|
11
|
-
it 'associates note to item' do
|
12
|
-
MyTodo::Todo.start(%W[note --id=#{@todo.id} --body=note_text])
|
13
|
-
expect(@todo.notes.size).to eq 1
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'displays item with notes' do
|
17
|
-
expect{MyTodo::Todo.start(%W[note --id=#{@todo.id} --body=note_text])}.to output("\nID: 1 | Created On: 2016-10-08 | Tags: | Status: | Complete: \nSome Body\nNotes:\nID: 1 | Created On: 2016-10-08\nnote_text\n\n\n").to_stdout
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
context 'unsuccessful creation' do
|
22
|
-
it 'returns exception if note is not found' do
|
23
|
-
expect{MyTodo::Todo.start(%W[note --id=#{@todo.id + 1}])}.to output("undefined method `notes' for nil:NilClass\n").to_stdout
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|