2do 0.0.2

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5b634ce5130c195a6c86c8eeaacb3d15c9eb8e5e
4
+ data.tar.gz: 5ed204b515b078ba093b5df6e151a16dd7341d6a
5
+ SHA512:
6
+ metadata.gz: 252502fbddf7a9bb96f4dc486f1321f45991c21319647c6febf3cd63fdb7272e9323d0c5981c3cb4e0635f62180861fc60aef0bcccec9be9339b1c6c9cf97b91
7
+ data.tar.gz: 527bbeb605d171713fd95da3798905d3b27f9640678328b86506d9adeeb962031105ba23542a899f4b93fe8ef04d1fa99a0c2a4e2570be27c8f69dcf981f9220
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ .ruby-gemset
7
+ Gemfile.lock
8
+ InstalledFiles
9
+ _yardoc
10
+ coverage
11
+ doc/
12
+ lib/bundler/man
13
+ pkg
14
+ rdoc
15
+ spec/reports
16
+ test/tmp
17
+ test/version_tmp
18
+ tmp
@@ -0,0 +1 @@
1
+ ruby-2.1.0
@@ -0,0 +1,3 @@
1
+ ## v0.0.1
2
+
3
+ * Initial release
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in todo.gemspec
4
+ gemspec
5
+
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Kavinder Dhaliwal
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,67 @@
1
+ # Todo ( gem '2do')
2
+
3
+ ##The Problem
4
+
5
+ I find it hard to manage my todo list in any application (Evernote, Trello, Wunderlist). It's just a mental barrier to switch context open an application, find the list or notebook and then finally type in the todo item. This gem aims to solve my problem by providing a command line alternative that is simple to add to a list, create a new list or sublist and check items off a list.
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ gem '2do'
12
+
13
+ And then execute:
14
+
15
+ $ bundle
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install 2do
20
+
21
+ - **Setup**
22
+
23
+ In order to setup todo on your machine you'll need to do the following:
24
+
25
+ -Todo persists the lists to $HOME/todo/ so make sure that is available and writable
26
+
27
+ ## Usage
28
+
29
+ Todo can be used in the following ways:
30
+
31
+ 1. Add a task to the general list:
32
+
33
+ `todo add 'get some milk'`
34
+
35
+ 2. Add a task to the general list with priority:
36
+
37
+ `todo add 'get some milk' -p high`
38
+
39
+ This will push the item to the top of the list.
40
+
41
+ 3. Add a task to a specific list:
42
+
43
+ `todo add 'get some milk' -l groceries`
44
+
45
+ 4. Recall a list
46
+
47
+ `todo lists groceries`
48
+
49
+ This returnes
50
+
51
+ 1. `'get some milk' | due date: tomorrow | priority: high`
52
+
53
+ 6. Mark a task as done
54
+
55
+ `todo finish 'get some milk' -l groceries`
56
+
57
+ 7. Delete a task
58
+
59
+ `todo remove 'get some milk' -l groceries`
60
+
61
+ ## Contributing
62
+
63
+ 1. Fork it ( http://github.com/<my-github-username>/todo/fork )
64
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
65
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
66
+ 4. Push to the branch (`git push origin my-new-feature`)
67
+ 5. Create new Pull Request
@@ -0,0 +1,9 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new do |t|
5
+ t.libs << "test"
6
+ t.test_files = FileList['test/*_test.rb', 'test/**/*_test.rb']
7
+ end
8
+
9
+
@@ -0,0 +1,88 @@
1
+ #! /usr/bin/env ruby
2
+ #
3
+ require 'todo'
4
+ require 'main'
5
+
6
+ Main {
7
+
8
+ mode "add" do
9
+ argument("task"){
10
+ cast :string
11
+ }
12
+ option('list', 'l'){
13
+ argument :optional
14
+ description 'pass a list to add a task to'
15
+ }
16
+
17
+ def run
18
+ app = Todo::Application.new(persistent: true)
19
+ app.add(name:params['task'].value, list: params['list'].value)
20
+ app.tasks
21
+ end
22
+ end
23
+
24
+ mode "tasks" do
25
+
26
+ option("list", 'l') {
27
+ argument :optional
28
+ }
29
+
30
+ def run
31
+ app = Todo::Application.new(persistent: true)
32
+ app.tasks(verbose: true, list: params["list"].value)
33
+ end
34
+ end
35
+
36
+ mode "remove" do
37
+ argument("task"){
38
+ cast :string
39
+ }
40
+ option("list", "l"){
41
+ argument :optional
42
+ }
43
+ def run
44
+ app = Todo::Application.new(persistent: true)
45
+ allowed = ["Y", "N", "yes", "no"]
46
+ allowed_positives = ["Y", "yes", "y", "Yes"]
47
+ allowed_negatives = ["N", "no", "n", "No"]
48
+ command =""
49
+ until(allowed_positives.include?(command) || allowed_negatives.include?(command))
50
+ print "Are you sure you want to remove this task? (Y/N) "
51
+ command = stdin.gets.chomp
52
+ end
53
+ if allowed_positives.include?(command)
54
+ task = params["task"].value
55
+ app.remove(task)
56
+ puts "task:#{task} removed"
57
+ app.tasks(verbose: true)
58
+ end
59
+ end
60
+ end
61
+
62
+ mode "finish" do
63
+
64
+ argument("task") {
65
+ cast :string
66
+ }
67
+ option("list", "l") {
68
+ argument :optional
69
+ }
70
+ def run
71
+ app = Todo::Application.new(persistent: true)
72
+ app.finish(params["task"].value, list: params["list"].value)
73
+ end
74
+
75
+ end
76
+
77
+ mode "lists" do
78
+ argument("list"){
79
+ optional
80
+ cast :string
81
+ description "the sublist to access"
82
+ }
83
+ def run
84
+ app =Todo::Application.new(persistent: true)
85
+ params["list"].given? ? app.access_list(params["list"].value) : app.lists
86
+ end
87
+ end
88
+ }
@@ -0,0 +1,57 @@
1
+ #TODO: Read PR article about require and require relative
2
+
3
+ require_relative "todo/version"
4
+ require_relative "todo/version"
5
+ require_relative "todo/list"
6
+ require_relative 'todo/presenter'
7
+ module Todo
8
+
9
+ class Application
10
+
11
+ def initialize(persistent: false)
12
+ @list = init_list(persistent)
13
+ @presenter = Todo::Presenter.new
14
+ end
15
+
16
+ def add(name:, **options)
17
+ @list.add(name: name, priority: options[:priority], list: options[:list])
18
+ end
19
+
20
+ def finish(task_name, **options)
21
+ if options[:list]
22
+ access_list(options[:list]).finish(task_name)
23
+ else
24
+ @list.finish(task_name)
25
+ end
26
+ end
27
+
28
+ def remove(task_name)
29
+ @list.remove(task_name)
30
+ end
31
+
32
+ def tasks(options={})
33
+ item = options[:list] ? access_list(options[:list]) : @list
34
+ return "no such list" unless item
35
+ @presenter.present(item: item, info: :tasks, level: options[:level])
36
+ end
37
+
38
+ def lists
39
+ @presenter.present(item: @list, info: :lists)
40
+ end
41
+
42
+ def access_list(list_name)
43
+ @list.access_list(list_name)
44
+ end
45
+
46
+ private
47
+
48
+ def init_list(persistent)
49
+ if persistent
50
+ Todo::List.load
51
+ else
52
+ Todo::List.new
53
+ end
54
+ end
55
+
56
+ end
57
+ end
@@ -0,0 +1,110 @@
1
+ require_relative "list_item"
2
+ require 'yaml'
3
+
4
+ module Todo
5
+ class List
6
+ DIR_PATH = File.join(Dir.home, "todo")
7
+ FILE_PATH = File.join(DIR_PATH, "todo.yml")
8
+ attr_reader :tasks, :lists, :name
9
+ def initialize(list_name=nil, persistent:false)
10
+ @tasks = []
11
+ @name = list_name || 'undefined'
12
+ @lists = []
13
+ @persistent = persistent
14
+ end
15
+
16
+ def add(name:,**options)
17
+ if options[:list]
18
+ add_to_list(name, options)
19
+ else
20
+ add_task(name, options)
21
+ end
22
+ update
23
+ end
24
+
25
+ def finish(name)
26
+ @tasks.each { |t| t.finish! if t.name == name }
27
+ update
28
+ end
29
+
30
+ def remove(name)
31
+ @tasks.delete_if{|t| t.name == name}
32
+ update
33
+ all
34
+ end
35
+
36
+ def all(options={})
37
+ @tasks
38
+ end
39
+
40
+ def lists
41
+ @lists.map{ |l| l.name }
42
+ end
43
+
44
+ def access_list(list_name)
45
+ list_with_name(list_name)
46
+ end
47
+
48
+ def to_h
49
+ {
50
+ name: name,
51
+ tasks: @tasks.map{ |t| t.to_h },
52
+ lists: @lists.map{ |l| l.to_h }
53
+ }
54
+ end
55
+
56
+ def type
57
+ "list"
58
+ end
59
+
60
+ def self.load
61
+ if File.exists?(FILE_PATH)
62
+ YAML.load(File.open(FILE_PATH))
63
+ else
64
+ Dir.mkdir(DIR_PATH) unless Dir.exists?(DIR_PATH)
65
+ self.new(persistent: true)
66
+ end
67
+ end
68
+
69
+ private
70
+
71
+ def update
72
+ save if @persistent
73
+ end
74
+
75
+ def save
76
+ return unless @name == "undefined"
77
+ File.open(FILE_PATH, "w") do |f|
78
+ f.write YAML.dump(self)
79
+ end
80
+ end
81
+
82
+ def create_or_find(list_name)
83
+ list = list_with_name(list_name)
84
+ if list
85
+ list
86
+ else
87
+ list = Todo::List.new(list_name)
88
+ @lists << list
89
+ list
90
+ end
91
+ end
92
+
93
+ def list_with_name(list_name)
94
+ index = @lists.find_index{ |l| l.name == list_name }
95
+ index ? @lists[index] : index
96
+ end
97
+
98
+ def add_task(name, options)
99
+ @tasks << Todo::ListItem.new(name: name, priority: options[:priority])
100
+ end
101
+
102
+ def add_to_list(name, options)
103
+ list = create_or_find(options[:list])
104
+ options.delete(:list)
105
+ list.add(name: name, priority: options[:priority])
106
+ end
107
+
108
+
109
+ end
110
+ end
@@ -0,0 +1,34 @@
1
+ module Todo
2
+ class ListItem
3
+
4
+ attr_reader :name, :priority
5
+ def initialize(name:, priority: nil)
6
+ @name = name
7
+ @priority = priority
8
+ @finished = false
9
+ end
10
+
11
+ def details
12
+ n = "#{name}"
13
+ priority = @priority ? "priority: #{priority}" : nil
14
+ finished = @finished ? "----FINISHED----" : nil
15
+ [n, priority, finished].delete_if { |i| i.nil? }.join(" | ")
16
+ end
17
+
18
+ def to_h
19
+ {
20
+ name: name,
21
+ priority: priority,
22
+ finished: @finished
23
+ }
24
+ end
25
+
26
+ def finished?
27
+ @finished
28
+ end
29
+
30
+ def finish!
31
+ @finished = true
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,71 @@
1
+ module Todo
2
+ class Presenter
3
+
4
+ def present(item:,**options)
5
+ @presentable = item
6
+ @level = options[:level] ||= :basic
7
+ @info = options.fetch(:info)
8
+ @exclude = options[:exclude]
9
+ print send("render_#{@presentable.type}_#{@info}_#{@level}", @presentable)
10
+ end
11
+
12
+ private
13
+
14
+ #LIST PRESENTATION
15
+ def render_list_lists_basic(presentable)
16
+ lists = presentable.to_h[:lists]
17
+ output = "Lists\n"
18
+ lists.each_with_index do |t, i|
19
+ order = i + 1
20
+ output << "#{order}. #{t[:name]}\n"
21
+ end
22
+ output
23
+ end
24
+
25
+ def render_list_lists_verbose(presentable)
26
+ lists = presentable.to_h[:lists]
27
+ output = "Lists\n"
28
+ lists.each_with_index do |t, i|
29
+ order = i + 1
30
+ output << "#{order}. #{t[:name]} | tasks: #{t[:tasks].count}\n"
31
+ end
32
+ output
33
+ end
34
+
35
+ #TASK PRESENTATION
36
+ def render_list_tasks_basic(presentable)
37
+ tasks = presentable_tasks
38
+ output = "Tasks\n"
39
+ tasks.each_with_index do |t,i|
40
+ order = i + 1
41
+ output << "#{order}. #{t[:name]}\n"
42
+ end
43
+ output
44
+ end
45
+
46
+ def render_list_tasks_verbose(presentable)
47
+ tasks = presentable_tasks
48
+ output = "Tasks\n"
49
+ tasks.each_with_index do |t, i|
50
+ order = i + 1
51
+ substring = "#{order}. #{t.delete(:name)} "
52
+ substring << "| ---- FINISHED ----" if t.delete(:finished)
53
+ t.each do |key, value|
54
+ if value
55
+ substring << "| #{key}: #{value}"
56
+ end
57
+ end
58
+ substring << "\n"
59
+ output << substring
60
+ end
61
+ output
62
+ end
63
+
64
+ def presentable_tasks
65
+ @data = @presentable.to_h[:tasks]
66
+ @data = @data.select { |item| item[:finished] == false } if @exclude == :finished
67
+ @data = @data.select { |item| item[:finished] == true } if @exclude == :open
68
+ @data
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,3 @@
1
+ module Todo
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,34 @@
1
+ require_relative "../../lib/todo/list_item"
2
+ #TODO: Does minitest have a spec_helper convention
3
+ require "minitest/autorun"
4
+
5
+ class ListItemTest < MiniTest::Unit::TestCase
6
+
7
+ def test_initializing_minimal_list_item
8
+ assert_instance_of(Todo::ListItem, Todo::ListItem.new(name: "my item"))
9
+ end
10
+
11
+ def test_to_h
12
+ li = Todo::ListItem.new(name: 'my item', priority: 'high')
13
+ assert_equal({name: 'my item', priority: "high", finished: false}, li.to_h)
14
+ end
15
+
16
+ def test_marking_as_finished
17
+ li = Todo::ListItem.new(name: "my item")
18
+ assert_equal(false, li.finished?)
19
+ li.finish!
20
+ assert_equal(true, li.finished?)
21
+ end
22
+
23
+ def test_finished_to_s_output
24
+ li = Todo::ListItem.new(name: 'my item')
25
+ li.finish!
26
+ assert_equal('my item | ----FINISHED----', li.details)
27
+ end
28
+
29
+ def test_output_without_finished
30
+ li = Todo::ListItem.new(name: 'my item')
31
+ assert_equal('my item', li.details)
32
+ end
33
+
34
+ end
@@ -0,0 +1,77 @@
1
+ require_relative '../../lib/todo/list'
2
+ require 'minitest/autorun'
3
+
4
+ class ListTest < MiniTest::Unit::TestCase
5
+
6
+ def teardown
7
+ file_path = File.join(Dir.home, "todo", "todo.yml")
8
+ File.delete(file_path) if File.exists?(file_path)
9
+ end
10
+
11
+ def test_inital_list_state
12
+ list = Todo::List.new
13
+ assert_equal([], list.tasks)
14
+ end
15
+
16
+ def test_list_with_name
17
+ list = Todo::List.new("named list")
18
+ assert_equal("named list", list.name)
19
+ end
20
+
21
+ def test_list_adds_list_item_objects
22
+ list = Todo::List.new
23
+ list.add(name: "my task")
24
+ assert_instance_of(Todo::ListItem, list.all[0])
25
+ end
26
+
27
+ def test_adding_sublists
28
+ list = Todo::List.new
29
+ list.add(name: 'do this', list: 'my todo')
30
+ assert_equal(['my todo'], list.lists)
31
+ assert_equal([], list.tasks)
32
+ end
33
+
34
+ def test_to_h
35
+ list = Todo::List.new
36
+ list.add(name: 'my task')
37
+ assert_equal(true, list.to_h.keys.include?(:tasks))
38
+ end
39
+
40
+ def test_all_with_verbose
41
+ list = Todo::List.new
42
+ list.add(name: 'my task', priority: 'high')
43
+ assert_equal('high', list.all.first.priority)
44
+ end
45
+
46
+ def test_removing_from_internal_list
47
+ list = Todo::List.new
48
+ list.add(name: "my task")
49
+ list.remove("my task")
50
+ assert_equal([], list.all)
51
+ end
52
+
53
+ def test_access_sub_lists
54
+ list = Todo::List.new
55
+ list.add(name: 'do this', list: 'my todo')
56
+ list.access_list('my_todo')
57
+ end
58
+
59
+ #Marking List Items as Finished
60
+
61
+ def test_finish_list_item
62
+ list = Todo::List.new
63
+ list.add(name: 'do this')
64
+ list.finish('do this')
65
+ assert_equal(true, list.tasks.first.finished?)
66
+ end
67
+
68
+ #Persistence Test
69
+ def test_saving_to_file
70
+ list = Todo::List.new(persistent: true)
71
+ list.add(name: 'do this')
72
+ list = Todo::List.load
73
+ assert_equal('do this', list.tasks.first.name)
74
+ end
75
+
76
+
77
+ end
@@ -0,0 +1,70 @@
1
+ require_relative '../../lib/todo/presenter'
2
+ require_relative '../../lib/todo/list'
3
+ require 'minitest/autorun'
4
+
5
+ class PresenterTest < MiniTest::Unit::TestCase
6
+
7
+ def test_presenting_list_tasks
8
+ p = Todo::Presenter.new
9
+ list = Todo::List.new
10
+ list.add(name: 'my task')
11
+ expected = "Tasks\n1. my task\n"
12
+ assert_output(expected) { p.present(item: list, info: :tasks)}
13
+ end
14
+
15
+ def test_presenting_list_tasks_detailed
16
+ p = Todo::Presenter.new
17
+ list = Todo::List.new
18
+ list.add(name: 'my task', priority: 'high')
19
+ expected = "Tasks\n1. my task | priority: high\n"
20
+ assert_output(expected) { p.present(item: list, info: :tasks, level: :verbose)}
21
+ end
22
+
23
+ def test_presenting_list_tasks_not_finished
24
+ p = Todo::Presenter.new
25
+ list = Todo::List.new
26
+ list.add(name: 'my task')
27
+ list.add(name: 'my other task')
28
+ list.finish('my task')
29
+ expected = "Tasks\n1. my other task\n"
30
+ assert_output(expected) {p.present(item: list, info: :tasks, exclude: :finished) }
31
+ end
32
+
33
+ def test_presenting_list_tasks_not_finished_detailed
34
+ p = Todo::Presenter.new
35
+ list = Todo::List.new
36
+ list.add(name: 'my task', priority: 'high')
37
+ list.add(name: 'my other task', priority: 'high')
38
+ list.finish('my other task')
39
+ expected = "Tasks\n1. my task | priority: high\n"
40
+ assert_output(expected) { p.present(item: list, info: :tasks, level: :verbose, exclude: :finished) }
41
+ end
42
+
43
+ def test_presenting_list_tasks_finished
44
+ p = Todo::Presenter.new
45
+ list = Todo::List.new
46
+ list.add(name: 'my task')
47
+ list.add(name: 'my other task')
48
+ list.finish('my task')
49
+ expected = "Tasks\n1. my task | ---- FINISHED ----\n"
50
+ assert_output(expected) { p.present(item: list, info: :tasks, level: :verbose, exclude: :open) }
51
+ end
52
+
53
+ def test_presenting_list_lists
54
+ p = Todo::Presenter.new
55
+ list = Todo::List.new
56
+ list.add(name: 'my task', list: 'sub list')
57
+ expected = "Lists\n1. sub list\n"
58
+ assert_output(expected) { p.present(item: list, info: :lists)}
59
+ end
60
+
61
+ def test_presenting_list_lists
62
+ p = Todo::Presenter.new
63
+ list = Todo::List.new
64
+ list.add(name: 'my task', list: 'sub list')
65
+ expected = "Lists\n1. sub list | tasks: 1\n"
66
+ assert_output(expected) { p.present(item: list, info: :lists, level: :verbose)}
67
+ end
68
+
69
+
70
+ end
@@ -0,0 +1,62 @@
1
+ require_relative '../lib/todo'
2
+ require 'minitest/autorun'
3
+ require 'pry'
4
+ require 'pry-debugger'
5
+
6
+ class TodoTest < MiniTest::Unit::TestCase
7
+
8
+ def teardown
9
+ file_path = File.join(Dir.home, "todo", "todo.yml")
10
+ File.delete(file_path) if File.exists?(file_path)
11
+ end
12
+ # Adding Tasks
13
+ def test_add_to_general_list_without_any_options
14
+ t = Todo::Application.new
15
+ t.add(name: "get this done")
16
+ assert_output("Tasks\n1. get this done\n") {t.tasks}
17
+ end
18
+
19
+ def test_add_details_to_task
20
+ t = Todo::Application.new
21
+ t.add(name: "get this done", priority: "high")
22
+ assert_output("Tasks\n1. get this done | priority: high\n") {t.tasks(level: :verbose)}
23
+ end
24
+
25
+ def test_adding_to_named_list
26
+ t = Todo::Application.new
27
+ t.add(name: "do this", list: "my todo")
28
+ assert_output("Lists\n1. my todo\n") { t.lists }
29
+ end
30
+
31
+ #Finishing Tasks
32
+ def test_finishing_task
33
+ t = Todo::Application.new
34
+ t.add(name: "do this now")
35
+ t.finish("do this now")
36
+ assert_output("Tasks\n1. do this now | ---- FINISHED ----\n") { t.tasks(level: :verbose)}
37
+ end
38
+
39
+ def test_finishing_task_on_sublist
40
+ t = Todo::Application.new
41
+ t.add(name: "do this", list: "submarine")
42
+ t.finish("do this", list: "submarine")
43
+ assert_output("Tasks\n1. do this | ---- FINISHED ----\n") { t.tasks(level: :verbose, list: "submarine") }
44
+ end
45
+
46
+
47
+ # Removing Tasks
48
+ def test_remove_from_general_list
49
+ t = Todo::Application.new
50
+ t.add(name: "get this done")
51
+ t.remove("get this done")
52
+ assert_output("Tasks\n") { t.tasks }
53
+ end
54
+
55
+ #Persistence
56
+ def test_saving_base_list_to_file
57
+ t = Todo::Application.new(persistent: true)
58
+ t.add(name: "get this done")
59
+ t = Todo::Application.new(persistent: true)
60
+ assert_output("Tasks\n1. get this done\n") { t.tasks }
61
+ end
62
+ end
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'todo/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "2do"
8
+ spec.version = Todo::VERSION
9
+ spec.authors = ["Kavinder Dhaliwal"]
10
+ spec.email = ["kavinderd@gmail.com"]
11
+ spec.summary = %q{TNT's Not a Todo}
12
+ spec.description = %q{Because if you spend all day at the terminal you might as well keep your todos there as well}
13
+ spec.homepage = "https://github.com/kavinderd/todo"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.5"
22
+ spec.add_development_dependency "rake", "~> 10.3"
23
+ spec.add_development_dependency "pry", "~> 0.10"
24
+ spec.add_development_dependency "pry-debugger", "~>0.2"
25
+ spec.add_runtime_dependency "main", "~>6.0"
26
+ end
metadata ADDED
@@ -0,0 +1,138 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: 2do
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Kavinder Dhaliwal
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-09-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.5'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.5'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.3'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.10'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.10'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry-debugger
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.2'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.2'
69
+ - !ruby/object:Gem::Dependency
70
+ name: main
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '6.0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '6.0'
83
+ description: Because if you spend all day at the terminal you might as well keep your
84
+ todos there as well
85
+ email:
86
+ - kavinderd@gmail.com
87
+ executables:
88
+ - todo
89
+ extensions: []
90
+ extra_rdoc_files: []
91
+ files:
92
+ - ".gitignore"
93
+ - ".ruby-version"
94
+ - CHANGELOG
95
+ - Gemfile
96
+ - LICENSE.txt
97
+ - README.md
98
+ - Rakefile
99
+ - bin/todo
100
+ - lib/todo.rb
101
+ - lib/todo/list.rb
102
+ - lib/todo/list_item.rb
103
+ - lib/todo/presenter.rb
104
+ - lib/todo/version.rb
105
+ - test/todo/list_item_test.rb
106
+ - test/todo/list_test.rb
107
+ - test/todo/presenter_test.rb
108
+ - test/todo_test.rb
109
+ - todo.gemspec
110
+ homepage: https://github.com/kavinderd/todo
111
+ licenses:
112
+ - MIT
113
+ metadata: {}
114
+ post_install_message:
115
+ rdoc_options: []
116
+ require_paths:
117
+ - lib
118
+ required_ruby_version: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: '0'
123
+ required_rubygems_version: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
128
+ requirements: []
129
+ rubyforge_project:
130
+ rubygems_version: 2.2.2
131
+ signing_key:
132
+ specification_version: 4
133
+ summary: TNT's Not a Todo
134
+ test_files:
135
+ - test/todo/list_item_test.rb
136
+ - test/todo/list_test.rb
137
+ - test/todo/presenter_test.rb
138
+ - test/todo_test.rb