rubdo 0.2.6 → 0.3.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.
- data/.rspec +3 -0
- data/README.md +48 -26
- data/Rakefile +6 -4
- data/bin/rubdo +1 -1
- data/lib/rubdo.rb +3 -4
- data/lib/rubdo/cli.rb +19 -21
- data/lib/rubdo/editor.rb +29 -0
- data/lib/rubdo/item.rb +1 -1
- data/lib/rubdo/list.rb +15 -18
- data/lib/rubdo/version.rb +1 -1
- data/spec/item_spec.rb +11 -0
- data/spec/list_spec.rb +55 -0
- metadata +10 -6
- data/spec/rubdo_tests.rb +0 -55
data/.rspec
ADDED
data/README.md
CHANGED
@@ -2,47 +2,69 @@
|
|
2
2
|
|
3
3
|
Why does todo applications need to be so complicated?
|
4
4
|
|
5
|
-
##
|
5
|
+
## Usage
|
6
6
|
|
7
|
-
|
7
|
+
Since version `0.3.0`, `rubdo` can handle several TODO files with
|
8
|
+
environment variables. So you can change TODO file by setting:
|
8
9
|
|
9
|
-
|
10
|
+
```bash
|
11
|
+
$ export TODO_FILE="PATH/TO/TODO_FILE" # i.e ~/.tasks/Work.yml
|
12
|
+
```
|
10
13
|
|
11
|
-
|
14
|
+
When you are done with your other TODO file, just simply kill the
|
15
|
+
environment variable or reload the shell
|
12
16
|
|
13
|
-
|
17
|
+
Here are the available commands for `rubdo`
|
14
18
|
|
15
|
-
|
19
|
+
```bash
|
20
|
+
Commands for rubdo:
|
21
|
+
-------------------
|
22
|
+
add/a [task description] - Add a new task. If the description is empty, $EDITOR is opened
|
23
|
+
list/ls - Lists all tasks
|
24
|
+
done/d [task id] - Complete a task
|
25
|
+
edit/e [task id] - Opens up $EDITOR to edit the task description
|
26
|
+
remove/rm [task id] - Deletes the specific task, same as done
|
27
|
+
help - Prints out this information
|
28
|
+
```
|
29
|
+
|
30
|
+
`rubdo` createas _~/.tasks_ where it holds the YAML file with the todos inside.
|
31
|
+
If you want to keep your todos synced accross your machines, make a symlink to say
|
32
|
+
directory inside of _~/Dropbox_
|
16
33
|
|
17
|
-
|
34
|
+
```bash
|
35
|
+
$ ln -s ~/Dropbox/tasks/ ~/.tasks
|
36
|
+
```
|
18
37
|
|
19
|
-
|
38
|
+
Make sure to save your todos first!
|
20
39
|
|
21
|
-
|
40
|
+
A tip is to alias `rubdo` to `t` for easier typing
|
41
|
+
for `bash` and `zsh`
|
22
42
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
list/ls - Lists all tasks
|
27
|
-
done/d [task id] - Complete a task
|
28
|
-
edit/e [task id] - Opens up $EDITOR to edit the task description
|
29
|
-
remove/rm [task id] - Deletes the specific task, same as done
|
30
|
-
help - Prints out this information
|
43
|
+
```bash
|
44
|
+
alias t="rubdo"
|
45
|
+
```
|
31
46
|
|
32
|
-
|
33
|
-
If you want to keep your todos synced accross your machines, make a symlink to say
|
34
|
-
a directory inside of _~/Dropbox_
|
47
|
+
and add that to your _{bash, zsh}rc_
|
35
48
|
|
36
|
-
|
49
|
+
## Installation
|
37
50
|
|
38
|
-
|
51
|
+
Add this line to your application's Gemfile:
|
39
52
|
|
40
|
-
|
41
|
-
|
53
|
+
```bash
|
54
|
+
gem 'rubdo'
|
55
|
+
```
|
56
|
+
|
57
|
+
And then execute:
|
42
58
|
|
43
|
-
|
59
|
+
```bash
|
60
|
+
$ bundle
|
61
|
+
```
|
62
|
+
|
63
|
+
Or install it yourself as:
|
44
64
|
|
45
|
-
|
65
|
+
```bash
|
66
|
+
$ gem install rubdo
|
67
|
+
```
|
46
68
|
|
47
69
|
## Contributing
|
48
70
|
|
data/Rakefile
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
#!/usr/bin/env rake
|
2
2
|
require "bundler/gem_tasks"
|
3
|
+
require 'rspec/core/rake_task'
|
3
4
|
|
5
|
+
RSpec::Core::RakeTask.new(:spec)
|
4
6
|
task :default => :spec
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
end
|
7
|
+
|
8
|
+
task :console do
|
9
|
+
sh "pry -I lib -r rubdo"
|
9
10
|
end
|
11
|
+
task c: :console
|
data/bin/rubdo
CHANGED
@@ -6,7 +6,7 @@ require 'abbrev'
|
|
6
6
|
cli = Rubdo::CLI.new
|
7
7
|
methods = Rubdo::CLI.public_instance_methods(false).map(&:to_s).abbrev
|
8
8
|
cli.list if ARGV[0].nil?
|
9
|
-
begin
|
9
|
+
begin
|
10
10
|
cli.send methods[ARGV[0]] unless ARGV[0].nil?
|
11
11
|
rescue
|
12
12
|
puts "cowardly refuses" unless methods[ARGV[0]]
|
data/lib/rubdo.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
|
2
|
-
require
|
3
|
-
|
4
|
-
require 'rubdo/list'
|
1
|
+
Dir[File.dirname(__FILE__) + '/rubdo/**/*.rb'].each do |file|
|
2
|
+
require file
|
3
|
+
end
|
data/lib/rubdo/cli.rb
CHANGED
@@ -3,7 +3,7 @@ require 'tempfile'
|
|
3
3
|
module Rubdo
|
4
4
|
class CLI
|
5
5
|
def initialize
|
6
|
-
todos = List.read(
|
6
|
+
todos = List.read(todo_file)
|
7
7
|
@list = List.new(todos)
|
8
8
|
@id = ARGV[1].to_i - 1
|
9
9
|
end
|
@@ -12,14 +12,7 @@ module Rubdo
|
|
12
12
|
if ARGV[1]
|
13
13
|
@list.add ARGV[1]
|
14
14
|
else
|
15
|
-
|
16
|
-
system("$EDITOR #{tmp_file.path}")
|
17
|
-
unless File.read(tmp_file.path).empty?
|
18
|
-
@list.add File.read(tmp_file).chomp
|
19
|
-
tmp_file.delete
|
20
|
-
else
|
21
|
-
puts "aborted due to empty file"
|
22
|
-
end
|
15
|
+
Tempfile.open('new_task') { |tf| @list.add Rubdo::Editor.add(tf.path) }
|
23
16
|
end
|
24
17
|
save
|
25
18
|
end
|
@@ -28,20 +21,16 @@ module Rubdo
|
|
28
21
|
@list.done @id
|
29
22
|
save
|
30
23
|
end
|
24
|
+
alias_method :rm, :done
|
31
25
|
|
32
26
|
def list
|
33
|
-
@list.to_a.
|
34
|
-
puts "no tasks" if @list.to_a.empty?
|
27
|
+
list_tasks unless @list.to_a.empty?
|
35
28
|
end
|
29
|
+
alias_method :ls, :list
|
36
30
|
|
37
31
|
def edit
|
38
|
-
abort("not a valid id") if @id
|
39
|
-
|
40
|
-
tmp_file = Tempfile.new('new_description')
|
41
|
-
File.open(tmp_file.path, 'w') { |f| f.write(@list.to_a[@id].description) }
|
42
|
-
system("$EDITOR #{tmp_file.path}")
|
43
|
-
@list.to_a[@id].description = File.read(tmp_file).chomp
|
44
|
-
tmp_file.delete
|
32
|
+
abort("not a valid id") if @id > @list.to_a.size
|
33
|
+
Tempfile.open('new_description') { |tf| task.description = Rubdo::Editor.edit(tf.path, task.description) }
|
45
34
|
save
|
46
35
|
end
|
47
36
|
|
@@ -57,13 +46,22 @@ help - Prints out this information
|
|
57
46
|
HELP
|
58
47
|
end
|
59
48
|
|
60
|
-
alias_method :ls, :list
|
61
|
-
alias_method :rm, :done
|
62
|
-
|
63
49
|
private
|
64
50
|
|
65
51
|
def save
|
66
52
|
@list.write
|
67
53
|
end
|
54
|
+
|
55
|
+
def list_tasks
|
56
|
+
@list.to_a.each_with_index { |item, index| puts "#{index + 1}: #{item.description}" }
|
57
|
+
end
|
58
|
+
|
59
|
+
def task
|
60
|
+
@list.to_a[@id]
|
61
|
+
end
|
62
|
+
|
63
|
+
def todo_file
|
64
|
+
@todo_file ||= '~/.tasks/Todo.yml'
|
65
|
+
end
|
68
66
|
end
|
69
67
|
end
|
data/lib/rubdo/editor.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
module Rubdo
|
2
|
+
class Editor
|
3
|
+
|
4
|
+
def self.edit(file, description)
|
5
|
+
write_description(file, description)
|
6
|
+
open_with_editor(file)
|
7
|
+
read_description(file)
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.add(file)
|
11
|
+
open_with_editor(file)
|
12
|
+
read_description(file)
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def self.open_with_editor(file)
|
18
|
+
system "$EDITOR #{file}"
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.write_description(file, description)
|
22
|
+
File.open(file, 'w') { |f| f.write(description) }
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.read_description(file)
|
26
|
+
File.read(file).chomp
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/rubdo/item.rb
CHANGED
data/lib/rubdo/list.rb
CHANGED
@@ -1,45 +1,42 @@
|
|
1
1
|
require 'time'
|
2
2
|
require 'yaml'
|
3
|
-
require 'fileutils'
|
4
3
|
|
5
4
|
module Rubdo
|
6
5
|
class List
|
7
|
-
attr_accessor :items, :storage
|
8
6
|
|
9
|
-
|
10
|
-
todos = YAML.load_file(file) if File.exists? file
|
11
|
-
todos ||=[]
|
7
|
+
attr_reader :items, :todo_file
|
12
8
|
|
13
|
-
|
9
|
+
def self.read(file = nil)
|
10
|
+
todo_file = File.expand_path(file)
|
11
|
+
items = File.exists?(todo_file) ? YAML.load_file(todo_file) : []
|
12
|
+
{ items: items, todo_file: todo_file }
|
14
13
|
end
|
15
14
|
|
16
|
-
def initialize(
|
17
|
-
@items =
|
18
|
-
@
|
19
|
-
FileUtils.mkdir_p File.dirname @storage
|
15
|
+
def initialize(options)
|
16
|
+
@items = options.fetch(:items) { [] }
|
17
|
+
@todo_file = options.fetch(:todo_file) { File.expand_path("~/.tasks/Todo.yml") }
|
20
18
|
end
|
21
19
|
|
22
20
|
def add(description)
|
23
|
-
|
21
|
+
items << Item.new(description)
|
24
22
|
end
|
23
|
+
alias_method :<<, :add
|
25
24
|
|
26
25
|
def done(id)
|
27
|
-
|
26
|
+
items.delete_at id
|
28
27
|
end
|
29
28
|
|
30
29
|
def edit(id)
|
31
|
-
|
30
|
+
items[id]
|
32
31
|
end
|
33
32
|
|
34
33
|
def write
|
35
|
-
File.open(
|
34
|
+
File.open(todo_file, 'w') { |f| f.write(items.to_yaml) }
|
36
35
|
end
|
36
|
+
alias_method :save, :write
|
37
37
|
|
38
38
|
def to_a
|
39
|
-
|
39
|
+
items
|
40
40
|
end
|
41
|
-
|
42
|
-
alias_method :<<, :add
|
43
|
-
alias_method :save, :write
|
44
41
|
end
|
45
42
|
end
|
data/lib/rubdo/version.rb
CHANGED
data/spec/item_spec.rb
ADDED
data/spec/list_spec.rb
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
require_relative '../lib/rubdo/list'
|
2
|
+
require_relative '../lib/rubdo/item'
|
3
|
+
|
4
|
+
describe Rubdo::List do
|
5
|
+
let(:list) { Rubdo::List.new items: [], todo_file: '/tmp/todo.yml' }
|
6
|
+
|
7
|
+
describe '#new' do
|
8
|
+
let(:empty_list) { Rubdo::List.new({})}
|
9
|
+
|
10
|
+
context 'with parameters' do
|
11
|
+
it 'sets `items` and `todo_file`' do
|
12
|
+
list.items.should eq []
|
13
|
+
list.todo_file.should eq '/tmp/todo.yml'
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
context 'without parameters' do
|
18
|
+
it 'fallback for `items` and `todo_file`' do
|
19
|
+
empty_list.items.should eq []
|
20
|
+
empty_list.todo_file.should eq File.expand_path('~/.tasks/Todo.yml')
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe '#add' do
|
26
|
+
it 'adds 3 items to the list' do
|
27
|
+
list.add 'Buy milk'
|
28
|
+
list.add 'Buy beer'
|
29
|
+
list.add 'But peanuts'
|
30
|
+
|
31
|
+
list.to_a.size.should eq 3
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe '#done' do
|
36
|
+
it 'deletes an item from the list' do
|
37
|
+
list.add 'Watch TV'
|
38
|
+
list.add 'Walk the dog'
|
39
|
+
list.to_a.size.should eq 2
|
40
|
+
list.done 0
|
41
|
+
|
42
|
+
list.to_a.size.should eq 1
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe '#edit' do
|
47
|
+
it 'changes the description of a certain task' do
|
48
|
+
list.add "I can't go out, I'm sik"
|
49
|
+
list.edit(0).description = "I can't go out, I'm sick"
|
50
|
+
|
51
|
+
list.to_a[0].description.should eq "I can't go out, I'm sick"
|
52
|
+
list.to_a.size.should eq 1
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubdo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.6
|
5
4
|
prerelease:
|
5
|
+
version: 0.3.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Teo Ljungberg
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-01-19 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: My take on the todo-applications
|
15
15
|
email:
|
@@ -21,6 +21,7 @@ extra_rdoc_files: []
|
|
21
21
|
files:
|
22
22
|
- .gitignore
|
23
23
|
- .rake_tasks
|
24
|
+
- .rspec
|
24
25
|
- Gemfile
|
25
26
|
- LICENSE
|
26
27
|
- README.md
|
@@ -28,11 +29,13 @@ files:
|
|
28
29
|
- bin/rubdo
|
29
30
|
- lib/rubdo.rb
|
30
31
|
- lib/rubdo/cli.rb
|
32
|
+
- lib/rubdo/editor.rb
|
31
33
|
- lib/rubdo/item.rb
|
32
34
|
- lib/rubdo/list.rb
|
33
35
|
- lib/rubdo/version.rb
|
34
36
|
- rubdo.gemspec
|
35
|
-
- spec/
|
37
|
+
- spec/item_spec.rb
|
38
|
+
- spec/list_spec.rb
|
36
39
|
homepage: http://github.com/metamorfos/rubdo
|
37
40
|
licenses: []
|
38
41
|
post_install_message:
|
@@ -40,17 +43,17 @@ rdoc_options: []
|
|
40
43
|
require_paths:
|
41
44
|
- lib
|
42
45
|
required_ruby_version: !ruby/object:Gem::Requirement
|
43
|
-
none: false
|
44
46
|
requirements:
|
45
47
|
- - ! '>='
|
46
48
|
- !ruby/object:Gem::Version
|
47
49
|
version: '0'
|
48
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
49
50
|
none: false
|
51
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
50
52
|
requirements:
|
51
53
|
- - ! '>='
|
52
54
|
- !ruby/object:Gem::Version
|
53
55
|
version: '0'
|
56
|
+
none: false
|
54
57
|
requirements: []
|
55
58
|
rubyforge_project:
|
56
59
|
rubygems_version: 1.8.23
|
@@ -58,4 +61,5 @@ signing_key:
|
|
58
61
|
specification_version: 3
|
59
62
|
summary: My take on the todo-applications
|
60
63
|
test_files:
|
61
|
-
- spec/
|
64
|
+
- spec/item_spec.rb
|
65
|
+
- spec/list_spec.rb
|
data/spec/rubdo_tests.rb
DELETED
@@ -1,55 +0,0 @@
|
|
1
|
-
require 'rspec'
|
2
|
-
require 'rubdo'
|
3
|
-
|
4
|
-
describe Rubdo::Item do
|
5
|
-
before do
|
6
|
-
@item = Rubdo::Item.new('New todo item')
|
7
|
-
end
|
8
|
-
|
9
|
-
describe '#new' do
|
10
|
-
it 'assigns a text value to rubdo' do
|
11
|
-
@item.description.should eq('New todo item')
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
describe Rubdo::List do
|
17
|
-
before do
|
18
|
-
@list = Rubdo::List.new(Rubdo::List.read(File.join(File.dirname(__FILE__), 'test.yml')))
|
19
|
-
end
|
20
|
-
|
21
|
-
describe '#add' do
|
22
|
-
it 'adds 3 todo items' do
|
23
|
-
@list.add('Buy milk')
|
24
|
-
@list.add('Buy beer')
|
25
|
-
@list.add('But peanuts')
|
26
|
-
@list.to_a.size.should eq(3)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
describe '#done' do
|
31
|
-
before do
|
32
|
-
@list = Rubdo::List.new(Rubdo::List.read(File.join(File.dirname(__FILE__), 'test.yml')))
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'deletes a todo item' do
|
36
|
-
@list.add('Watch TV')
|
37
|
-
@list.add('Walk the dog')
|
38
|
-
@list.done(0).description.should eq('Watch TV')
|
39
|
-
@list.to_a.size.should eq(1)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
describe '#edit' do
|
44
|
-
before do
|
45
|
-
@list = Rubdo::List.new(Rubdo::List.read(File.join(File.dirname(__FILE__), 'test.yml')))
|
46
|
-
end
|
47
|
-
|
48
|
-
it 'edits a task' do
|
49
|
-
@list.add("I can't go out, I'm sik")
|
50
|
-
@list.edit(0).description = "I can't go out, I'm sick"
|
51
|
-
@list.to_a[0].description.should eq("I can't go out, I'm sick")
|
52
|
-
@list.to_a.size.should eq(1)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|