posto 0.3.1 → 0.3.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.
@@ -10,57 +10,58 @@ module Posto
10
10
  @file = Posto::File.new(@arguments.filename)
11
11
  end
12
12
 
13
- def list(items)
14
- items
13
+ def list(todos)
14
+ todos
15
15
  end
16
16
 
17
- def run(items)
18
- @io.puts send(@arguments.command, items, *@arguments.params)
17
+ def run(todos)
18
+ @io.puts send(@arguments.command, todos, *@arguments.params)
19
19
  end
20
20
 
21
- def sort(items)
22
- @file.write @list_utility.sort(items)
21
+ def sort(todos)
22
+ @file.write @list_utility.sort(todos)
23
23
  end
24
24
 
25
- def resort(items)
26
- @file.write @list_utility.resort(items)
25
+ def resort(todos)
26
+ @file.write @list_utility.resort(todos)
27
27
  end
28
28
 
29
- def unsort(items, n = 1)
30
- @file.write @list_utility.unsort(items, n.to_i)
31
- lookup_item(items, n)
29
+ def unsort(todos, n = 1)
30
+ @file.write @list_utility.unsort(todos, n.to_i)
31
+ lookup_todo(todos, n)
32
32
  end
33
33
 
34
- def done(items, n = 1)
35
- @file.write @list_utility.done(items, n.to_i)
36
- lookup_item(items, n)
34
+ def done(todos, n = 1)
35
+ @file.write @list_utility.done(todos, n.to_i)
36
+ lookup_todo(todos, n)
37
37
  end
38
38
 
39
- def top(items, n = nil)
40
- if n.nil?
41
- lookup_item(items, 1)
42
- else
43
- @file.write @list_utility.top(items, n.to_i)
44
- lookup_item(items, n)
45
- end
39
+ def top(todos, n = 1)
40
+ @file.write @list_utility.top(todos, n.to_i)
41
+ lookup_todo(todos, n)
46
42
  end
47
43
 
48
- def quick(items, n = 1)
49
- @file.write @list_utility.quick(items, n.to_i)
50
- lookup_item(items, n)
44
+ def quick(todos, n = 1)
45
+ @file.write @list_utility.quick(todos, n.to_i)
46
+ lookup_todo(todos, n)
51
47
  end
52
48
 
53
- def add(items, item)
54
- @file.write @list_utility.add(items, item)
55
- item
49
+ def add(todos, todo)
50
+ @file.write @list_utility.add(todos, todo)
51
+ todo
56
52
  end
57
53
 
58
- def commit(items)
59
- @file.commit(done(items))
54
+ def commit(todos, n = 1)
55
+ @file.commit(done(todos, n))
60
56
  end
61
57
 
62
- def lookup_item(items, n)
63
- Posto::Item.hide_markdown(items[n.to_i - 1])
58
+ def init(todos)
59
+ @file.touch
60
+ nil
61
+ end
62
+
63
+ def lookup_todo(todos, n)
64
+ Posto::Todo.hide_markdown(todos[n.to_i - 1])
64
65
  end
65
66
 
66
67
  def method_missing(symbol, *args)
data/lib/posto/file.rb CHANGED
@@ -6,17 +6,25 @@ module Posto
6
6
  @filename = filename
7
7
  end
8
8
 
9
- def write(items)
10
- IO.write(@filename, Template.todo_list(items))
9
+ def write(todos)
10
+ IO.write(@filename, Template.todo_list(todos))
11
11
  end
12
12
 
13
13
  def commit(msg)
14
- `git add #{@filename}`
14
+ `git add #@filename`
15
15
  `git commit -m "#{msg}"`
16
16
  end
17
17
 
18
+ def touch
19
+ `touch #@filename`
20
+ end
21
+
18
22
  def lines
19
- IO.read(@filename).split("\n")
23
+ if ::File.exists? @filename
24
+ IO.read(@filename).split("\n")
25
+ else
26
+ []
27
+ end
20
28
  end
21
29
  end
22
30
  end
data/lib/posto/list.rb CHANGED
@@ -1,55 +1,55 @@
1
- require 'posto/item'
1
+ require 'posto/todo'
2
2
  require 'posto/monkeypatch_array'
3
3
 
4
4
  module Posto
5
5
  class List
6
6
  class << self
7
- def number_items(items)
8
- items.each_with_index.map { |item, i| Item.number(item, i + 1) }
7
+ def number_todos(todos)
8
+ todos.each_with_index.map { |todo, i| Todo.number(todo, i + 1) }
9
9
  end
10
10
 
11
- def choose_item_lines(lines)
12
- lines.select { |line| Item.item?(line) }
11
+ def choose_todo_lines(lines)
12
+ lines.select { |line| Todo.todo?(line) }
13
13
  end
14
14
 
15
- def sort(items)
16
- number_items(items.sort { |x, y| Item.compare_sorted_items(x, y) or Item.ask_human_to_compare(x, y) })
15
+ def sort(todos)
16
+ number_todos(todos.sort { |x, y| Todo.compare_sorted_todos(x, y) or Todo.ask_human_to_compare(x, y) })
17
17
  end
18
18
 
19
- def starred_group(items)
20
- items.select { |item| Item.starred?(item) }
19
+ def starred_group(todos)
20
+ todos.select { |todo| Todo.starred?(todo) }
21
21
  end
22
22
 
23
- def numbered_group(items)
24
- sort items.select { |item| Item.numbered?(item) }
23
+ def numbered_group(todos)
24
+ sort todos.select { |todo| Todo.numbered?(todo) }
25
25
  end
26
26
 
27
- def done(items, n)
28
- unsort(items, n)[0..-2]
27
+ def done(todos, n)
28
+ unsort(todos, n)[0..-2]
29
29
  end
30
30
 
31
- def unsort(items, n)
32
- numbered_group(items.reject_at(n - 1)) + starred_group(items.reject_at(n - 1)) + [Item.star(items[n - 1])]
31
+ def unsort(todos, n)
32
+ numbered_group(todos.reject_at(n - 1)) + starred_group(todos.reject_at(n - 1)) + [Todo.star(todos[n - 1])]
33
33
  end
34
34
 
35
- def resort(items)
36
- sort items.map { |item| Item.star(item) }
35
+ def resort(todos)
36
+ sort todos.map { |todo| Todo.star(todo) }
37
37
  end
38
38
 
39
- def add(items, item)
40
- items + [Item.create(item)]
39
+ def add(todos, todo)
40
+ todos + [Todo.create(todo)]
41
41
  end
42
42
 
43
- def quick(items, n)
44
- items[n -1] = Item.mark_quick(items[n - 1])
45
- items
43
+ def quick(todos, n)
44
+ todos[n -1] = Todo.mark_quick(todos[n - 1])
45
+ todos
46
46
  end
47
47
 
48
- def top(items, n)
49
- starred_group = starred_group(items.reject_at(n - 1))
50
- numbered_group = numbered_group(items.reject_at(n - 1))
51
- array = [items[n - 1]]
52
- number_items(array + numbered_group) + starred_group
48
+ def top(todos, n)
49
+ starred_group = starred_group(todos.reject_at(n - 1))
50
+ numbered_group = numbered_group(todos.reject_at(n - 1))
51
+ array = [todos[n - 1]]
52
+ number_todos(array + numbered_group) + starred_group
53
53
  end
54
54
  end
55
55
  end
@@ -1,7 +1,7 @@
1
1
  module Posto
2
2
  module Template
3
- def self.todo_list(items)
4
- "todo\n----\n\n#{items.join("\n")}\n"
3
+ def self.todo_list(todos)
4
+ "todo\n----\n\n#{todos.join("\n")}\n"
5
5
  end
6
6
 
7
7
  def self.human_comparison(x, y)
data/lib/posto/todo.rb ADDED
@@ -0,0 +1,57 @@
1
+ require 'posto/template'
2
+
3
+ module Posto
4
+ class Todo
5
+ class << self
6
+ MD_LIST_TODO = /^(\*|\d+\.) /
7
+
8
+ def ask_human_to_compare(x, y)
9
+ while true do
10
+ response = ask(Template.human_comparison(hide_markdown(x), hide_markdown(y))).to_i
11
+ return 0 if response == 0
12
+ return -1 if response == 1
13
+ return 1 if response == 2
14
+ end
15
+ end
16
+
17
+ def compare_sorted_todos(x, y)
18
+ x = x.to_i
19
+ y = y.to_i
20
+ return nil if (x == 0 or y == 0)
21
+ x <=> y
22
+ end
23
+
24
+ def hide_markdown(todo)
25
+ todo.sub(MD_LIST_TODO, "")
26
+ end
27
+
28
+ def star(todo)
29
+ todo.sub MD_LIST_TODO, "* "
30
+ end
31
+
32
+ def number(todo, n)
33
+ todo.sub MD_LIST_TODO, "#{n}. "
34
+ end
35
+
36
+ def todo?(line)
37
+ MD_LIST_TODO =~ line
38
+ end
39
+
40
+ def create(todo)
41
+ todo.sub(/^(\* )?/, "* ")
42
+ end
43
+
44
+ def mark_quick(todo)
45
+ todo.sub(/( \(quick\))?$/, " (quick)")
46
+ end
47
+
48
+ def starred?(todo)
49
+ /^\* / =~ todo
50
+ end
51
+
52
+ def numbered?(todo)
53
+ /^\d+\. / =~ todo
54
+ end
55
+ end
56
+ end
57
+ end
data/lib/posto.rb CHANGED
@@ -8,8 +8,8 @@ module Posto
8
8
  class << self
9
9
  def main(args)
10
10
  arguments = Arguments.new(args)
11
- items = List.choose_item_lines(File.new(arguments.filename).lines)
12
- Application.new(arguments).run(items)
11
+ todos = List.choose_todo_lines(File.new(arguments.filename).lines)
12
+ Application.new(arguments).run(todos)
13
13
  end
14
14
  end
15
15
  end
data/test/list_test.rb CHANGED
@@ -4,12 +4,12 @@ require 'posto/list'
4
4
  class ListTest < MiniTest::Unit::TestCase
5
5
  def test_replace_stars
6
6
  assert_equal(["1. this is one", "2. this is another", "3. card molly"],
7
- Posto::List.number_items(["* this is one", "* this is another", "99. card molly"]))
7
+ Posto::List.number_todos(["* this is one", "* this is another", "99. card molly"]))
8
8
  end
9
9
 
10
- def test_choose_item_lines
11
- assert_equal(["99. bottles", "* unsorted item"],
12
- Posto::List.choose_item_lines(["TODO", "======", "99. bottles", "* unsorted item", "END", ""]))
10
+ def test_choose_todo_lines
11
+ assert_equal(["99. bottles", "* unsorted todo"],
12
+ Posto::List.choose_todo_lines(["TODO", "======", "99. bottles", "* unsorted todo", "END", ""]))
13
13
  end
14
14
 
15
15
  def test_starred_group
data/test/todo_test.rb ADDED
@@ -0,0 +1,29 @@
1
+ require 'test_helper'
2
+ require 'posto/todo'
3
+
4
+ class TodoTest < MiniTest::Unit::TestCase
5
+ def test_hide_markdown
6
+ assert_equal "bottles", Posto::Todo.hide_markdown("99. bottles")
7
+ assert_equal "unsorted todo", Posto::Todo.hide_markdown("* unsorted todo")
8
+ assert_equal "funky * todo with 99. junk", Posto::Todo.hide_markdown("* funky * todo with 99. junk")
9
+ end
10
+
11
+ def test_compare_sorted_todos
12
+ assert_equal(1, Posto::Todo.compare_sorted_todos("99. bottles", "50. cents"))
13
+ assert_equal(-1, Posto::Todo.compare_sorted_todos("1. lonliest number", "50. cents"))
14
+ assert_equal(0, Posto::Todo.compare_sorted_todos("1. lonliest number", "1. The Only One"))
15
+ assert_equal(nil, Posto::Todo.compare_sorted_todos("* kleene", "* twinkle twinkle"))
16
+ assert_equal(nil, Posto::Todo.compare_sorted_todos("* twinkle twinkle", "1. The Only One"))
17
+ assert_equal(nil, Posto::Todo.compare_sorted_todos("99. bottles", "* twinkle twinkle"))
18
+ end
19
+
20
+ def test_star
21
+ assert_equal "* bottles", Posto::Todo.star("99. bottles")
22
+ assert_equal "* fruit", Posto::Todo.star("* fruit")
23
+ end
24
+
25
+ def test_number
26
+ assert_equal "99. bottles", Posto::Todo.number("* bottles", 99)
27
+ assert_equal "99. cents", Posto::Todo.number("50. cents", 99)
28
+ end
29
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: posto
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-12 00:00:00.000000000 Z
12
+ date: 2012-09-13 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -58,15 +58,15 @@ files:
58
58
  - lib/posto/template.rb
59
59
  - lib/posto/application.rb
60
60
  - lib/posto/list.rb
61
+ - lib/posto/todo.rb
61
62
  - lib/posto/file.rb
62
- - lib/posto/item.rb
63
63
  - lib/posto/arguments.rb
64
64
  - lib/posto.rb
65
65
  - test/list_test.rb
66
- - test/item_test.rb
67
66
  - test/arguments_test.rb
68
67
  - test/test_helper.rb
69
68
  - test/monkeypatch_array_test.rb
69
+ - test/todo_test.rb
70
70
  homepage: http://github.com/mattraibert/posto
71
71
  licenses:
72
72
  - GPLv3
@@ -82,7 +82,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
82
82
  version: '0'
83
83
  segments:
84
84
  - 0
85
- hash: 3448850985226509015
85
+ hash: -2327369408914751837
86
86
  required_rubygems_version: !ruby/object:Gem::Requirement
87
87
  none: false
88
88
  requirements:
@@ -97,7 +97,7 @@ specification_version: 3
97
97
  summary: CLI to sort your todo list.
98
98
  test_files:
99
99
  - test/list_test.rb
100
- - test/item_test.rb
101
100
  - test/arguments_test.rb
102
101
  - test/test_helper.rb
103
102
  - test/monkeypatch_array_test.rb
103
+ - test/todo_test.rb
data/lib/posto/item.rb DELETED
@@ -1,57 +0,0 @@
1
- require 'posto/template'
2
-
3
- module Posto
4
- class Item
5
- class << self
6
- MD_LIST_ITEM = /^(\*|\d+\.) /
7
-
8
- def ask_human_to_compare(x, y)
9
- while true do
10
- response = ask(Template.human_comparison(hide_markdown(x), hide_markdown(y))).to_i
11
- return 0 if response == 0
12
- return -1 if response == 1
13
- return 1 if response == 2
14
- end
15
- end
16
-
17
- def compare_sorted_items(x, y)
18
- x = x.to_i
19
- y = y.to_i
20
- return nil if (x == 0 or y == 0)
21
- x <=> y
22
- end
23
-
24
- def hide_markdown(item)
25
- item.sub(MD_LIST_ITEM, "")
26
- end
27
-
28
- def star(item)
29
- item.sub MD_LIST_ITEM, "* "
30
- end
31
-
32
- def number(item, n)
33
- item.sub MD_LIST_ITEM, "#{n}. "
34
- end
35
-
36
- def item?(line)
37
- MD_LIST_ITEM =~ line
38
- end
39
-
40
- def create(item)
41
- item.sub(/^(\* )?/, "* ")
42
- end
43
-
44
- def mark_quick(item)
45
- item.sub(/( \(quick\))?$/, " (quick)")
46
- end
47
-
48
- def starred?(item)
49
- /^\* / =~ item
50
- end
51
-
52
- def numbered?(item)
53
- /^\d+\. / =~ item
54
- end
55
- end
56
- end
57
- end
data/test/item_test.rb DELETED
@@ -1,29 +0,0 @@
1
- require 'test_helper'
2
- require 'posto/item'
3
-
4
- class ItemTest < MiniTest::Unit::TestCase
5
- def test_hide_markdown
6
- assert_equal "bottles", Posto::Item.hide_markdown("99. bottles")
7
- assert_equal "unsorted item", Posto::Item.hide_markdown("* unsorted item")
8
- assert_equal "funky * item with 99. junk", Posto::Item.hide_markdown("* funky * item with 99. junk")
9
- end
10
-
11
- def test_compare_sorted_items
12
- assert_equal(1, Posto::Item.compare_sorted_items("99. bottles", "50. cents"))
13
- assert_equal(-1, Posto::Item.compare_sorted_items("1. lonliest number", "50. cents"))
14
- assert_equal(0, Posto::Item.compare_sorted_items("1. lonliest number", "1. The Only One"))
15
- assert_equal(nil, Posto::Item.compare_sorted_items("* kleene", "* twinkle twinkle"))
16
- assert_equal(nil, Posto::Item.compare_sorted_items("* twinkle twinkle", "1. The Only One"))
17
- assert_equal(nil, Posto::Item.compare_sorted_items("99. bottles", "* twinkle twinkle"))
18
- end
19
-
20
- def test_star
21
- assert_equal "* bottles", Posto::Item.star("99. bottles")
22
- assert_equal "* fruit", Posto::Item.star("* fruit")
23
- end
24
-
25
- def test_number
26
- assert_equal "99. bottles", Posto::Item.number("* bottles", 99)
27
- assert_equal "99. cents", Posto::Item.number("50. cents", 99)
28
- end
29
- end