my_todo 3.0.0 → 3.1.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 +16 -11
- data/lib/db/migrate/20161220143613_add_default_to_item_done.rb +5 -0
- data/lib/db/schema.rb +12 -4
- data/lib/db/todos_development.sqlite3 +0 -0
- data/lib/db/todos_test.sqlite3 +0 -0
- data/lib/my_todo/models/item.rb +13 -1
- data/lib/my_todo/models/note.rb +22 -0
- data/lib/my_todo/modules/my_todo_actions.rb +1 -1
- data/lib/my_todo/modules/templates.rb +0 -1
- data/lib/my_todo/templates/list.erb +1 -1
- data/lib/my_todo/templates/results.erb +1 -1
- data/lib/my_todo/version.rb +1 -1
- data/lib/my_todo.rb +2 -6
- data/spec/actions/create_spec.rb +5 -12
- data/spec/actions/list_spec.rb +4 -4
- data/spec/actions/note_spec.rb +27 -0
- data/spec/actions/notes_spec.rb +3 -3
- data/spec/actions/search_spec.rb +4 -4
- data/spec/actions/update_spec.rb +2 -2
- data/spec/models/item_spec.rb +12 -0
- data/spec/spec_helper.rb +1 -1
- metadata +5 -4
- data/spec/actions/add_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: 70b1f135ecffdf6707b18aa7a916493221bce327
|
4
|
+
data.tar.gz: e8fcb736c11ac62879afdc96b33f2f98a23f3875
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 01ec4a1b26546905b02194a39d4ccd84f9b74defdb49046183ea9ef06cc129f9a7100148ab105d72744f05bc79b9256ae1a8a8fe1c320a9f030ce3cb7504ec68
|
7
|
+
data.tar.gz: a6887b4de5c89b24e7e56ce2910941f9824658f7f27939081f3f03412a72271510f2f712cd636087daee721c8fdd4332c073e1495607a27d719f14fdc2fd0055
|
data/README.md
CHANGED
@@ -24,7 +24,7 @@ gem install my_todo
|
|
24
24
|
```
|
25
25
|
|
26
26
|
## setup
|
27
|
-
Create and migrate the DB
|
27
|
+
Create and migrate the DB - This always needs to be run after every deployment to set the proper paths at the very least.
|
28
28
|
|
29
29
|
`my_todo rake db:migrate`
|
30
30
|
|
@@ -43,10 +43,10 @@ will display
|
|
43
43
|
ToDo CREATED!
|
44
44
|
|
45
45
|
|
46
|
-
ID:
|
47
|
-
|
48
|
-
|
49
|
-
|
46
|
+
ID: 1 | Created On: 2016-10-04 | Tags: default | Status: In Progress | Complete: false | Notes: 0
|
47
|
+
|
48
|
+
hello world
|
49
|
+
****************************************************************************************************
|
50
50
|
```
|
51
51
|
|
52
52
|
Example of listing pending todos
|
@@ -58,13 +58,17 @@ my_todo list
|
|
58
58
|
will display
|
59
59
|
|
60
60
|
```
|
61
|
-
ToDos FOUND:
|
61
|
+
ToDos FOUND: 2
|
62
|
+
|
63
|
+
ID: 1 | Created On: 2016-10-04 | Tags: default | Status: In Progress | Complete: false | Notes: 0
|
64
|
+
|
65
|
+
hello world
|
66
|
+
****************************************************************************************************
|
62
67
|
|
68
|
+
ID: 2 | Created On: 2016-10-05 | Tags: default | Status: In Progress | Complete: false | Notes: 0
|
63
69
|
|
64
|
-
|
65
|
-
|
66
|
-
Tags: default
|
67
|
-
Complete: false
|
70
|
+
hello world 2
|
71
|
+
****************************************************************************************************
|
68
72
|
```
|
69
73
|
|
70
74
|
Use aliasing to shorten the syntax:
|
@@ -77,9 +81,10 @@ alias mupdate='my_todo update'
|
|
77
81
|
alias mdelete='my_todo delete'
|
78
82
|
alias mtag='my_todo tag'
|
79
83
|
alias mrmtag='my_todo rm_tag'
|
80
|
-
alias
|
84
|
+
alias mnotes='my_todo notes'
|
81
85
|
alias mrmnote='my_todo rm_note'
|
82
86
|
alias msearch='my_todo search'
|
87
|
+
alias mnote='my_todo note'
|
83
88
|
```
|
84
89
|
|
85
90
|
Functions can be created around these actions to possibly shorten the syntax that much more
|
data/lib/db/schema.rb
CHANGED
@@ -10,16 +10,24 @@
|
|
10
10
|
#
|
11
11
|
# It's strongly recommended that you check this file into your version control system.
|
12
12
|
|
13
|
-
ActiveRecord::Schema.define(version:
|
13
|
+
ActiveRecord::Schema.define(version: 20161220143613) do
|
14
14
|
|
15
15
|
create_table "items", force: :cascade do |t|
|
16
16
|
t.string "body"
|
17
|
-
t.boolean "done"
|
18
|
-
t.datetime "created_at",
|
19
|
-
t.datetime "updated_at",
|
17
|
+
t.boolean "done", default: false
|
18
|
+
t.datetime "created_at", null: false
|
19
|
+
t.datetime "updated_at", null: false
|
20
|
+
t.string "status"
|
20
21
|
t.string "detailed_status"
|
21
22
|
end
|
22
23
|
|
24
|
+
create_table "lists", force: :cascade do |t|
|
25
|
+
t.string "name"
|
26
|
+
t.string "value"
|
27
|
+
t.datetime "created_at", null: false
|
28
|
+
t.datetime "updated_at", null: false
|
29
|
+
end
|
30
|
+
|
23
31
|
create_table "notes", force: :cascade do |t|
|
24
32
|
t.integer "item_id"
|
25
33
|
t.text "body"
|
Binary file
|
data/lib/db/todos_test.sqlite3
CHANGED
Binary file
|
data/lib/my_todo/models/item.rb
CHANGED
@@ -1,18 +1,30 @@
|
|
1
1
|
# @author Lovell McIlwain#
|
2
2
|
# Handles business logic for todo item
|
3
3
|
class Item < ActiveRecord::Base
|
4
|
-
|
4
|
+
INCOMPLETE_STATUSES = ['None', 'In Progress', 'Waiting Feedback']
|
5
|
+
COMPLETE_STATUSES = ['Complete', 'Punted']
|
6
|
+
DETAILED_STATUSES = INCOMPLETE_STATUSES + COMPLETE_STATUSES
|
5
7
|
# ActiveRecord association to stubs
|
6
8
|
# @note Item.first.stubs
|
7
9
|
has_many :stubs
|
10
|
+
|
8
11
|
# ActiveRecord association to tags
|
9
12
|
# @note Item.first.tags
|
10
13
|
# @note destroys associated stubs/tags when deleted
|
11
14
|
has_many :tags, through: :stubs, dependent: :destroy
|
15
|
+
|
12
16
|
# ActiveRecord association to notes
|
13
17
|
# @note Item.first.notes
|
14
18
|
# @note destroys associated notes when deleted
|
15
19
|
has_many :notes, dependent: :destroy
|
20
|
+
|
16
21
|
# ActiveModel validation to ensure body is present
|
17
22
|
validates :body, presence: true
|
23
|
+
|
24
|
+
before_save :update_done
|
25
|
+
|
26
|
+
#set done attribute based on detailed_status set
|
27
|
+
def update_done
|
28
|
+
self.done = true if COMPLETE_STATUSES.include? self.detailed_status
|
29
|
+
end
|
18
30
|
end
|
data/lib/my_todo/models/note.rb
CHANGED
@@ -1,6 +1,28 @@
|
|
1
1
|
# @author Lovell McIlwain#
|
2
2
|
# Handles business logic for todo item
|
3
3
|
class Note < ActiveRecord::Base
|
4
|
+
# ActiveModel validation to ensure body has content
|
4
5
|
validates :body, presence: true
|
6
|
+
|
7
|
+
# ActiveRecord association to parent item
|
8
|
+
# @note Note.first.item
|
5
9
|
belongs_to :item
|
10
|
+
|
11
|
+
# Add date to created at when record is created
|
12
|
+
# (see #tag_created_at)
|
13
|
+
before_save :tag_created_at, on: :create
|
14
|
+
|
15
|
+
# Add date to updated at when record is updated
|
16
|
+
# (see #tag_updated_at)
|
17
|
+
before_save :tag_updated_at, on: :update
|
18
|
+
|
19
|
+
# set created at to the current date
|
20
|
+
def tag_created_at
|
21
|
+
self.created_at = Date.today
|
22
|
+
end
|
23
|
+
|
24
|
+
# set updated at to the current date
|
25
|
+
def tag_updated_at
|
26
|
+
self.updated_at = Date.today if changes.size > 0
|
27
|
+
end
|
6
28
|
end
|
@@ -7,7 +7,7 @@ module MyTodoActions
|
|
7
7
|
def create_item(options)
|
8
8
|
ask_status
|
9
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) }
|
10
|
+
options[:tags].split(' ').each{|tag| item.tags.create(name: tag) } if options[:tags]
|
11
11
|
end
|
12
12
|
|
13
13
|
def update_item(options)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
|
2
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 %>
|
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 %> | Notes: <%= item.notes.size %>
|
4
4
|
|
5
5
|
<%= item.body %>
|
6
6
|
<%= '*' * 100 %>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
|
2
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 %>
|
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 %> | Notes: <%= item.notes.count %>
|
4
4
|
<%= item.body %>
|
5
5
|
|
6
6
|
<% if item.notes.any? -%>
|
data/lib/my_todo/version.rb
CHANGED
data/lib/my_todo.rb
CHANGED
@@ -38,9 +38,7 @@ module MyTodo
|
|
38
38
|
|
39
39
|
desc "create --body='some text' [--done=true] [--tags='tag1 tag2']", 'Create a todo'
|
40
40
|
option :body
|
41
|
-
option :done, default: false
|
42
41
|
option :tags, default: 'default'
|
43
|
-
option :created_at, default: DateTime.now
|
44
42
|
def create
|
45
43
|
begin
|
46
44
|
say 'ToDo CREATED!'
|
@@ -54,8 +52,6 @@ module MyTodo
|
|
54
52
|
desc "update --id=TODO_ID --body='some text' [--done=true]", 'Change an existing todo'
|
55
53
|
option :id
|
56
54
|
option :body
|
57
|
-
option :done
|
58
|
-
option :updated_at, default: DateTime.now
|
59
55
|
def update
|
60
56
|
begin
|
61
57
|
update_item(options)
|
@@ -110,10 +106,10 @@ module MyTodo
|
|
110
106
|
end
|
111
107
|
end
|
112
108
|
|
113
|
-
desc "
|
109
|
+
desc "note --id=TODO_ID --body='text'", 'Adds note to existing item'
|
114
110
|
option :id
|
115
111
|
option :body
|
116
|
-
def
|
112
|
+
def note
|
117
113
|
begin
|
118
114
|
item.notes.create(body: options[:body])
|
119
115
|
print_notes
|
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:
|
36
|
+
expect{MyTodo::Todo.start(%w(create --body=wierdness_of_text))}.to output("ToDo CREATED!\n0: None\n1: In Progress\n2: Waiting Feedback\n3: Complete\n4: Punted\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,27 +43,20 @@ 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:
|
46
|
+
expect{MyTodo::Todo.start(%w(create --body=wierdness_of_text --tags=tag1))}.to output("ToDo CREATED!\n0: None\n1: In Progress\n2: Waiting Feedback\n3: Complete\n4: Punted\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
|
|
50
|
-
describe 'create with tags
|
51
|
-
|
52
|
-
it 'creates todo item with flag set to done' do
|
53
|
-
MyTodo::Todo.start(%w[create --body=wierdness_of_text --done=true])
|
54
|
-
todo = Item.last
|
55
|
-
expect(todo.done).to eq true
|
56
|
-
end
|
57
|
-
|
50
|
+
describe 'create with tags' do
|
58
51
|
it 'displays the created to item with complete set to true' do
|
59
|
-
expect{MyTodo::Todo.start(%w[create --body=wierdness_of_text
|
52
|
+
expect{MyTodo::Todo.start(%w[create --body=wierdness_of_text])}.to output("ToDo CREATED!\n0: None\n1: In Progress\n2: Waiting Feedback\n3: Complete\n4: Punted\nID: 1 | Created On: #{Date.today} | Tags: default | Status: In Progress | Complete: false\nwierdness_of_text\n").to_stdout
|
60
53
|
end
|
61
54
|
end
|
62
55
|
end
|
63
56
|
|
64
57
|
context 'unsuccessful creation' do
|
65
58
|
it 'returns error message when body is missing' do
|
66
|
-
expect{MyTodo::Todo.start(%w(create))}.to output("ToDo CREATED!\n0: None\n1: In Progress\n2:
|
59
|
+
expect{MyTodo::Todo.start(%w(create))}.to output("ToDo CREATED!\n0: None\n1: In Progress\n2: Waiting Feedback\n3: Complete\n4: Punted\nValidation failed: Body can't be blank\n").to_stdout
|
67
60
|
end
|
68
61
|
end
|
69
62
|
end
|
data/spec/actions/list_spec.rb
CHANGED
@@ -4,19 +4,19 @@ describe MyTodo do
|
|
4
4
|
describe 'list' do
|
5
5
|
before do
|
6
6
|
@todo1 = FactoryGirl.create :item, done: true
|
7
|
-
@todo2 = FactoryGirl.create :item
|
7
|
+
@todo2 = FactoryGirl.create :item
|
8
8
|
end
|
9
9
|
|
10
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
|
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 | Notes: 0\n\nSome Body\n****************************************************************************************************\n").to_stdout
|
12
12
|
end
|
13
13
|
|
14
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
|
15
|
+
expect{MyTodo::Todo.start(%w[list])}.to output("ToDos FOUND: 1\n\nID: 2 | Created On: #{Date.today} | Tags: | Status: | Complete: false | Notes: 0\n\nSome Body\n****************************************************************************************************\n").to_stdout
|
16
16
|
end
|
17
17
|
|
18
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
|
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 | Notes: 0\n\nSome Body\n****************************************************************************************************\nID: 2 | Created On: #{Date.today} | Tags: | Status: | Complete: false | Notes: 0\n\nSome Body\n****************************************************************************************************\n").to_stdout
|
20
20
|
end
|
21
21
|
end
|
22
22
|
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[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("Notes for 1: Some Body\nID: 1 | Created On: #{Date.today}\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[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/notes_spec.rb
CHANGED
@@ -8,7 +8,7 @@ describe MyTodo do
|
|
8
8
|
before {@todo.notes.create(body: 'What a world!')}
|
9
9
|
|
10
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:
|
11
|
+
expect{MyTodo::Todo.start(%W[notes --id=#{@todo.id}])}.to output("Notes for 1: Some Body\nID: 1 | Created On: #{Date.today}\nWhat a world!\n\n\n").to_stdout
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
@@ -19,8 +19,8 @@ describe MyTodo do
|
|
19
19
|
end
|
20
20
|
|
21
21
|
context 'unsuccessful creation' do
|
22
|
-
it 'returns exception if
|
23
|
-
expect{MyTodo::Todo.start(%W[
|
22
|
+
it 'returns exception if parent item 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
24
|
end
|
25
25
|
end
|
26
26
|
end
|
data/spec/actions/search_spec.rb
CHANGED
@@ -12,20 +12,20 @@ describe MyTodo do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
it 'finds todo item by body' do
|
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
|
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: false | Notes: 0\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 --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
|
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: false | Notes: 0\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 --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
|
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: false | Notes: 0\nrocks\n\n****************************************************************************************************\n").to_stdout
|
25
25
|
end
|
26
26
|
|
27
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:
|
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: #{Date.today} | Tags: | Status: | Complete: false | Notes: 1\nalways\n\n [1] note1\n ----------------------------------------------------------------------------------------------------\n****************************************************************************************************\n").to_stdout
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
data/spec/actions/update_spec.rb
CHANGED
@@ -9,13 +9,13 @@ describe MyTodo do
|
|
9
9
|
|
10
10
|
context 'successful update' do
|
11
11
|
it 'displays the update' do
|
12
|
-
expect{MyTodo::Todo.start(%W[update --id=#{@todo.id} --body=hello])}.to output("0: None\n1: In Progress\n2:
|
12
|
+
expect{MyTodo::Todo.start(%W[update --id=#{@todo.id} --body=hello])}.to output("0: None\n1: In Progress\n2: Waiting Feedback\n3: Complete\n4: Punted\nToDo UPDATED!\nID: 1 | Created On: #{Date.today} | Tags: | Status: None | Complete: false\nhello\n").to_stdout
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
16
|
context 'unsuccessful update' do
|
17
17
|
it 'returns validation error when body is missing' do
|
18
|
-
expect{MyTodo::Todo.start(%W(update --id=#{@todo.id} --body=))}.to output("0: None\n1: In Progress\n2:
|
18
|
+
expect{MyTodo::Todo.start(%W(update --id=#{@todo.id} --body=))}.to output("0: None\n1: In Progress\n2: Waiting Feedback\n3: Complete\n4: Punted\nValidation failed: Body can't be blank\n").to_stdout
|
19
19
|
end
|
20
20
|
end
|
21
21
|
end
|
data/spec/models/item_spec.rb
CHANGED
@@ -1,8 +1,20 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Item, type: :model do
|
4
|
+
let(:item) {FactoryGirl.create :item}
|
5
|
+
|
4
6
|
it {should have_many :stubs}
|
5
7
|
it {should have_many :tags}
|
6
8
|
it {should have_many :notes}
|
7
9
|
it {should validate_presence_of :body}
|
10
|
+
|
11
|
+
describe 'update_done' do
|
12
|
+
it 'sets to true when detailed status is of a complete status' do
|
13
|
+
item.update(detailed_status: 'Complete')
|
14
|
+
expect(item.reload.done).to eq true
|
15
|
+
end
|
16
|
+
it 'sets to false when detailed status is of an incomplete status' do
|
17
|
+
expect(item.done).to eq false
|
18
|
+
end
|
19
|
+
end
|
8
20
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# code climent must be loaded and started before RAILS_ENV is declared
|
2
2
|
require "codeclimate-test-reporter"
|
3
|
+
ENV['CODECLIMATE_REPO_TOKEN'] = ENV['MYTODO_CC']
|
3
4
|
CodeClimate::TestReporter.start
|
4
|
-
ENV['CODECLIMATE_REPO_TOKEN'] = ENV['MYTOD_CC']
|
5
5
|
ENV["RAILS_ENV"] = 'test'
|
6
6
|
$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
|
7
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: 3.
|
4
|
+
version: 3.1.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-12-
|
11
|
+
date: 2016-12-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -258,6 +258,7 @@ files:
|
|
258
258
|
- lib/db/migrate/20160913134610_create_stubs.rb
|
259
259
|
- lib/db/migrate/20161003121448_create_notes.rb
|
260
260
|
- lib/db/migrate/20161005133023_add_detailed_status_to_items.rb
|
261
|
+
- lib/db/migrate/20161220143613_add_default_to_item_done.rb
|
261
262
|
- lib/db/schema.rb
|
262
263
|
- lib/db/todos_development.sqlite3
|
263
264
|
- lib/db/todos_test.sqlite3
|
@@ -281,10 +282,10 @@ files:
|
|
281
282
|
- lib/my_todo/version.rb
|
282
283
|
- lib/setup.rb
|
283
284
|
- my_todo.gemspec
|
284
|
-
- spec/actions/add_note_spec.rb
|
285
285
|
- spec/actions/create_spec.rb
|
286
286
|
- spec/actions/delete_spec.rb
|
287
287
|
- spec/actions/list_spec.rb
|
288
|
+
- spec/actions/note_spec.rb
|
288
289
|
- spec/actions/notes_spec.rb
|
289
290
|
- spec/actions/rm_note_spec.rb
|
290
291
|
- spec/actions/rm_tag_spec.rb
|
@@ -323,10 +324,10 @@ signing_key:
|
|
323
324
|
specification_version: 4
|
324
325
|
summary: A basic todo application with tags.
|
325
326
|
test_files:
|
326
|
-
- spec/actions/add_note_spec.rb
|
327
327
|
- spec/actions/create_spec.rb
|
328
328
|
- spec/actions/delete_spec.rb
|
329
329
|
- spec/actions/list_spec.rb
|
330
|
+
- spec/actions/note_spec.rb
|
330
331
|
- spec/actions/notes_spec.rb
|
331
332
|
- spec/actions/rm_note_spec.rb
|
332
333
|
- spec/actions/rm_tag_spec.rb
|
@@ -1,27 +0,0 @@
|
|
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
|