todo 0.0.3 → 0.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ data.tar.gz: 59080b13500a1e05d58a5505d101d870732b1bd8
4
+ metadata.gz: aed1b7b5805537d015c1402c8d297d237ca32542
5
+ SHA512:
6
+ data.tar.gz: a93f3040b469d5cc553c5bef1983285052d5faafe568265df8085f382d160d72aaa108f916137dd4d5e23027c3269516a7c476e7487a14438a5fec3081f22efa
7
+ metadata.gz: 586f3e600d86f9da380b5981add91118957cb9dedccf3c367df97958bd1d1bba4f4205a6d291073a516630ce8be1f1a83ce863671b0b5c7ff2646b5b76fae959
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in todo.gemspec
4
+ gemspec
@@ -1,5 +1,7 @@
1
1
  Copyright (c) 2008 Lakshan Perera
2
2
 
3
+ MIT License
4
+
3
5
  Permission is hereby granted, free of charge, to any person obtaining
4
6
  a copy of this software and associated documentation files (the
5
7
  "Software"), to deal in the Software without restriction, including
@@ -1,7 +1,7 @@
1
1
  = Simple command-line todo list manager
2
2
 
3
- Really want to get things done? Don't want to juggle with web based todo lists?
4
- Get your things done with command-line. No hassle, no distraction - Try out todo ruby gem.
3
+ Really want to get things done? Don't want to juggle with web based todo lists?
4
+ Get your things done with command-line. No hassle, no distraction - Try out todo ruby gem.
5
5
 
6
6
 
7
7
  == FEATURES:
@@ -18,40 +18,37 @@ First make sure you install the dependency gems.
18
18
 
19
19
  then;
20
20
  sudo gem install todo
21
-
21
+
22
22
  You can also install from github:
23
23
  gem sources -a http://gems.github.com
24
24
  sudo gem install laktek-todo
25
-
25
+
26
26
  == Example:
27
27
 
28
28
  Here is a small sample on how to use todo gem
29
-
29
+
30
30
  #visit your project folder
31
31
  cd projects/newapp
32
-
32
+
33
33
  #create a new todo list for the project
34
34
  todo create
35
-
35
+
36
36
  #add a new task
37
37
  todo add "write the specs"
38
38
  - add tags : important, due:24/08/2008
39
-
39
+
40
40
  #listing all tasks
41
41
  todo list --all
42
-
42
+
43
43
  #listing tasks tagged 'important'
44
44
  todo list --tag important
45
-
45
+
46
46
  #removing a task by name
47
47
  todo remove "write the specs"
48
-
48
+
49
49
  #removing a task by index
50
50
  todo remove -i 1
51
-
52
- == Issues/Improvements
53
-
54
- Todo is still its infant days and have very minimum functionality. If you come across any issues or like to suggest any improvements, please feel free to contact me : lakshan [at] web2media [dot] net
55
-
56
51
 
52
+ == Issues/Improvements
57
53
 
54
+ Todo is still its infant days and have very minimum functionality. If you come across any issues or like to suggest any improvements, please feel free to contact me : lakshan [at] web2media [dot] net
data/Rakefile CHANGED
@@ -1,4 +1 @@
1
- require 'config/requirements'
2
- require 'config/hoe' # setup Hoe + all gem configuration
3
-
4
- Dir['tasks/**/*.rake'].each { |rake| load rake }
1
+ require "bundler/gem_tasks"
data/bin/todo CHANGED
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- $:.unshift File.join(File.dirname(__FILE__), '..', 'lib')
4
3
  require 'todo'
5
- require 'todo/cli'
4
+ require 'todo/cli'
@@ -1,8 +1,7 @@
1
- $:.unshift(File.dirname(__FILE__))
2
1
  require 'todo/version'
3
2
  require 'todo/list'
4
3
  require 'todo/store'
5
4
 
6
5
  module Todo
7
-
6
+
8
7
  end
@@ -1,13 +1,18 @@
1
1
  require 'rubygems'
2
2
  require 'main'
3
3
  require 'highline/import'
4
- require 'ftools'
4
+ require 'fileutils'
5
5
 
6
- def read_file(environment)
6
+ def read_list(environment)
7
7
  file = environment.nil? ? Todo::Store.read('.todo/list.yml') : Todo::Store.read(environment)
8
+ if file
9
+ yield(file)
10
+ else
11
+ say "Todo list file is invalid or do not exist."
12
+ end
8
13
  end
9
14
 
10
- def write_file(list, environment)
15
+ def write_list(list, environment)
11
16
  file = environment.nil? ? Todo::Store.write(list, '.todo/list.yml') : Todo::Store.write(list, environment)
12
17
  end
13
18
 
@@ -16,13 +21,13 @@ Main {
16
21
  puts "todo [command] --help for usage instructions."
17
22
  puts "The available commands are: \n add, remove, list, modify."
18
23
  end
19
-
24
+
20
25
  mode 'create' do
21
26
  description 'Creates a new todo list for this directory'
22
-
27
+
23
28
  def run
24
29
  unless File.exist?(".todo/list.yml")
25
- File.makedirs(".todo")
30
+ FileUtils.makedirs(".todo")
26
31
  newfile = File.new(".todo/list.yml", "w+")
27
32
  say "Created a new todo list inside this directory" if newfile
28
33
  newfile.close
@@ -31,107 +36,99 @@ Main {
31
36
  end
32
37
  end
33
38
  end
34
-
39
+
35
40
  mode 'add' do
36
41
  description 'Adds a new todo item'
37
42
  argument('item'){
38
- description 'todo item to add'
43
+ description 'todo item to add'
39
44
  }
40
-
45
+
41
46
  environment('FILE'){
42
47
  synopsis 'export FILE=path'
43
48
  }
44
-
49
+
45
50
  option('notags', 'n'){
46
51
  cast :bool
47
- default false
52
+ default false
48
53
  }
49
-
54
+
50
55
  def run
51
56
  unless params['notags'].value
52
- tags = ask("Enter tags for this item (seperate from commas) ", lambda {|str|
57
+ tags = ask("Enter tags for this item (separate with commas) ", lambda {|str|
53
58
  str.split(/,\s*/) })
54
59
  end
55
-
56
- #read the YAML file
57
- if list=read_file(params['FILE'].value)
58
- #add the task
60
+
61
+ read_list(params['FILE'].value) do |list|
59
62
  list.add(params['item'].value, tags)
60
- #write the changes
61
- say "Successfully added your task." if write_file(list, params['FILE'].value)
62
- else
63
- say "Todo list file is invalid or do not exist."
63
+ say "Successfully added your task." if write_list(list, params['FILE'].value)
64
64
  end
65
65
  end
66
66
  end
67
-
67
+
68
68
  mode 'remove' do
69
69
  description 'Removes an item from todo list'
70
-
70
+
71
71
  environment('FILE'){
72
72
  synopsis 'export FILE=path'
73
73
  }
74
-
74
+
75
75
  argument('item'){
76
- argument_optional
76
+ argument_optional
77
77
  description 'Name of the todo item to remove'
78
78
  }
79
-
79
+
80
80
  option('index', 'i'){
81
81
  cast :int
82
82
  argument :required
83
83
  description 'Index of the todo item to remove (starting from 1). Use instead of item name'
84
84
  }
85
-
85
+
86
86
  def run
87
- if list=read_file(params['FILE'].value)
87
+ read_list(params['FILE'].value) do |list|
88
88
  if list.remove(params['item'].value || params['index'].value)
89
- say "Removed item from the list." if write_file(list, params['FILE'].value)
90
- else
89
+ say "Removed item from the list." if write_list(list, params['FILE'].value)
90
+ else
91
91
  say "Could not find item to remove."
92
92
  end
93
- else
94
- say "Todo list file is invalid or do not exist."
95
- end
93
+ end
96
94
  end
97
95
  end
98
-
96
+
99
97
  mode 'list' do
100
98
  description 'Lists todo items'
101
-
99
+
102
100
  environment('FILE'){
103
101
  synopsis 'export barfoo=value'
104
102
  }
105
-
103
+
106
104
  option('tag', 't'){
107
- argument_required
105
+ argument_required
108
106
  }
109
-
107
+
110
108
  option('all=[all]', 'a'){ # note shortcut syntax for optional args
111
109
  #argument_optional # we could also use this method
112
110
  cast :bool
113
111
  default false
114
112
  }
115
-
113
+
116
114
  def run
117
- if list=read_file(params['FILE'].value)
118
-
115
+ read_list(params['FILE'].value) do |list|
116
+
119
117
  if params['tag'].given?
120
118
  title = "Listing todos tagged '#{params['tag'].value}'"
121
- tasks = list.tagged(params['tag'].value)
119
+ tasks = list.tagged(params['tag'].value)
122
120
  else
123
121
  title = "Listing all todos"
124
122
  tasks = list
125
123
  end
126
-
124
+
127
125
  say title
128
126
  tasks.each do |task, tags|
129
127
  tag_string = ("(#{tags.join(", ")})") unless tags.include?(nil)
130
128
  say " - #{task} #{tag_string} \n"
131
129
  end
132
- else
133
- say "Todo list file is invalid or do not exist."
130
+
134
131
  end
135
- end
132
+ end
136
133
  end
137
134
  }
@@ -1,9 +1,7 @@
1
1
  module Todo
2
- module VERSION #:nodoc:
3
- MAJOR = 0
4
- MINOR = 0
5
- TINY = 3
2
+ MAJOR = 0
3
+ MINOR = 1
4
+ TINY = 0
6
5
 
7
- STRING = [MAJOR, MINOR, TINY].join('.')
8
- end
6
+ VERSION = [MAJOR, MINOR, TINY].join('.')
9
7
  end
@@ -1,63 +1,63 @@
1
- require File.dirname(__FILE__) + '/../lib/todo/list.rb'
1
+ require 'todo/list'
2
2
 
3
3
  describe "Todo::List" do
4
-
4
+
5
5
  describe "filtering by tag" do
6
6
  before(:each) do
7
7
  @todolist = Todo::List["dummy task" => ["added:31-07-2008", "important"], "Buy milk" => ["important", "home"]]
8
8
  @list_with_task_tagged_home = {"Buy milk" => ["important", "home"]}
9
9
  end
10
-
10
+
11
11
  it "should return matched items by tag" do
12
12
  @todolist.tagged("important").should == @todolist
13
13
  end
14
-
15
- it "should filter items by tags" do
16
- @todolist.tagged("home").should == @list_with_task_tagged_home
14
+
15
+ it "should filter items by tags" do
16
+ @todolist.tagged("home").should == @list_with_task_tagged_home
17
17
  end
18
-
19
- it "should be able to apply chain of filters" do
18
+
19
+ it "should be able to apply chain of filters" do
20
20
  @todolist.tagged("important").tagged("home").should == @list_with_task_tagged_home
21
21
  end
22
-
22
+
23
23
  end
24
-
24
+
25
25
  describe "add" do
26
26
  before(:each) do
27
27
  @todolist =Todo::List["dummy task" => ["added:31-07-2008", "important"]]
28
28
  @after_list =Todo::List["dummy task" => ["added:31-07-2008", "important"], "Buy milk" => []]
29
29
  end
30
-
30
+
31
31
  it "should add new item to the exisitng task list" do
32
32
  @todolist.add("Buy milk").should == @after_list
33
- end
34
-
33
+ end
34
+
35
35
  it "should accept list of tags with the item" do
36
36
  list_with_tags_added = {"dummy task" => ["added:31-07-2008", "important"], "Buy milk" => ["important", "assigned:mom"]}
37
-
37
+
38
38
  @todolist.add("Buy milk", "important", "assigned:mom").should == list_with_tags_added
39
39
  end
40
-
40
+
41
41
  end
42
-
42
+
43
43
  describe "remove" do
44
44
  before(:each) do
45
45
  @todolist =Todo::List["dummy task" => ["added:31-07-2008", "important"], "Buy milk" => []]
46
- @after_list =Todo::List["dummy task" => ["added:31-07-2008", "important"]]
46
+ @after_list =Todo::List["dummy task" => ["added:31-07-2008", "important"]]
47
47
  end
48
-
48
+
49
49
  it "should remove a task by name" do
50
50
  @todolist.remove("Buy milk").should == @after_list
51
51
  end
52
-
52
+
53
53
  it "should remove a task by its index" do
54
54
  @todolist.remove(2).should == @after_list
55
55
  end
56
-
56
+
57
57
  it "should return nil if the task is not found" do
58
58
  @todolist.remove("not done").should == nil
59
59
  end
60
-
60
+
61
61
  end
62
-
63
- end
62
+
63
+ end
@@ -1,10 +1,8 @@
1
- require File.dirname(__FILE__) + '/../lib/todo/store.rb'
1
+ require 'todo/store'
2
2
 
3
- describe "Todo::Store" do
3
+ describe "Todo::CLI" do
4
4
  it "should read the YAML file and output Todo::List hash" do
5
5
  #list = {"Buy milk" => ["important", "home"]}
6
6
  #Todo::Store.read(list.to_yaml).should be_an_instance_of(Todo::List)
7
7
  end
8
-
9
- it "should output a modified YAML file"
10
- end
8
+ end
@@ -0,0 +1,27 @@
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 = "todo"
8
+ spec.version = Todo::VERSION
9
+ spec.authors = ["Lakshan Perera", "Aniket Pant"]
10
+ spec.email = ["lakshan@web2media.net", "me@aniketpant.com"]
11
+ spec.description = %q{simple command line todo list manager}
12
+ spec.summary = %q{simple command line todo list manager}
13
+ spec.homepage = %q{http://todo.rubyforge.org}
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
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.3"
22
+ spec.add_development_dependency "rake"
23
+ spec.add_development_dependency "rspec", "~> 2.6"
24
+
25
+ spec.add_runtime_dependency "main", ">= 2.8.2"
26
+ spec.add_runtime_dependency "highline", ">= 1.4.0"
27
+ end