posto 0.3.3 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -2,6 +2,18 @@
2
2
 
3
3
  Sort your todo list from the command line.
4
4
 
5
+ ## Tutorial
6
+
7
+ After adding `gem "posto"` to your Gemfile, `bundle install`
8
+
9
+ To initialize a posto file, `posto init`
10
+
11
+ To add a task, `posto add "an example task"`
12
+
13
+ To see current tasks, `posto`
14
+
15
+ To see a full list of commands, click [here](https://github.com/mattraibert/posto/blob/master/lib/posto/help.md).
16
+
5
17
  ## Naming
6
18
 
7
19
  Posto is named for [Del Posto](http://www.delposto.com/) in New York City -- a restaurant that has been on my todo list for quite a while.
@@ -1,5 +1,6 @@
1
1
  require 'posto/list'
2
2
  require 'posto/file'
3
+ require 'posto/help'
3
4
 
4
5
  module Posto
5
6
  class Application
@@ -14,6 +15,10 @@ module Posto
14
15
  @todos = todos
15
16
  end
16
17
 
18
+ def help
19
+ @io.puts Posto::Help.help_text
20
+ end
21
+
17
22
  def run
18
23
  @io.puts send(@arguments.command, *@arguments.params)
19
24
  end
@@ -13,19 +13,7 @@ module Posto
13
13
  end
14
14
 
15
15
  def filename
16
- read_flag("-f") || "posto.md"
17
- end
18
-
19
- def read_flag(flag)
20
- filename_index = @args.index(flag)
21
- unless filename_index.nil?
22
- @args.delete_at(filename_index)
23
- @args.delete_at(filename_index)
24
- end
25
- end
26
-
27
- def to_s
28
- @args.inspect
16
+ "posto.md"
29
17
  end
30
18
  end
31
19
  end
data/lib/posto/help.md ADDED
@@ -0,0 +1,26 @@
1
+ ### List Commands
2
+
3
+ `init`: create a 'posto.md' file in the working directory.
4
+
5
+ `list`, `todos`, `[default]`: display the todo list.
6
+
7
+ `sort`: ask the user about priorities to sort todos.
8
+
9
+ `resort`: reset sort order and sort again (can be time consuming).
10
+
11
+
12
+ ### Single Todo Commands
13
+
14
+ `add '<todo>'`: add <todo> unsorted to the bottom of the todo list.
15
+
16
+ `start '<todo>'`: add, sort and commit with a message based on <todo>.
17
+
18
+ `done [n = 1]`, `delete [n]`: remove the nth todo from the list.
19
+
20
+ `commit [n]`: remove the nth todo; commit with a message based on the todo.
21
+
22
+ `do`, `top`: displays the top todo.
23
+
24
+ `do [n]`, `top [n]`: move the nth todo to the top.
25
+
26
+ `unsort [n]`: unsort the nth todo and place it at the bottom.
data/lib/posto/help.rb ADDED
@@ -0,0 +1,54 @@
1
+ module Posto
2
+ module Help
3
+ class << self
4
+ def help_text
5
+ format(parse(read))
6
+ end
7
+
8
+ def read
9
+ lines = ::File.read("#{::File.dirname(__FILE__)}/help.md").lines
10
+ lines.map { |line| line.chomp }.reject(&:empty?).map { |line| line.gsub /(### |`)/, "" }
11
+ end
12
+
13
+ def parse(md_file)
14
+ md_file.map { |x| x.split(": ") }.inject({}) do |memo, o|
15
+ memo[:title] = o.first if o.size == 1
16
+ memo[memo[:title]] ||= {}
17
+ memo[memo[:title]][o.first]= o.last if o.size == 2
18
+ memo
19
+ end
20
+ end
21
+
22
+ def format(hash)
23
+ hash.delete(:title)
24
+ hash.map { |title, commands| format_list(commands, title) }.join("\n")
25
+ end
26
+
27
+ def format_list(commands, title)
28
+ "\n#{title}:\n#{format_commands(commands)}"
29
+ end
30
+
31
+ def format_commands(commands)
32
+ commands.map do |command, definition|
33
+ format_command_definition(command, definition)
34
+ end.join("\n")
35
+ end
36
+
37
+ def format_command_definition(command, definition)
38
+ aliases = command.split(', ')
39
+ command = aliases.first
40
+ aliases = aliases[1..-1]
41
+ (["#{format_command command}#{definition}"] +
42
+ aliases.map { |command_alias| format_alias(command_alias, command) }).join("\n")
43
+ end
44
+
45
+ def format_alias(command_alias, alias_for)
46
+ "#{format_command command_alias}alias for '#{alias_for}'"
47
+ end
48
+
49
+ def format_command(command_alias)
50
+ ' ' * 3 + command_alias.ljust(15)
51
+ end
52
+ end
53
+ end
54
+ end
@@ -2,13 +2,6 @@ require 'test_helper'
2
2
  require 'posto/arguments'
3
3
 
4
4
  class ArgumentsTest < MiniTest::Unit::TestCase
5
- def test_read_flag
6
- assert_equal("blah.md", Posto::Arguments.new(%w(-f blah.md)).read_flag("-f"))
7
- assert_equal("blah.md", Posto::Arguments.new(%w(sort -f blah.md)).read_flag("-f"))
8
- assert_equal("blah.md", Posto::Arguments.new(%w(done 5 -f blah.md)).read_flag("-f"))
9
- assert_equal("blah.md", Posto::Arguments.new(%w(-f blah.md done 5)).read_flag("-f"))
10
- end
11
-
12
5
  def test_command
13
6
  assert_equal("list", Posto::Arguments.new([]).command)
14
7
  assert_equal("sort", Posto::Arguments.new(%w(sort)).command)
@@ -20,10 +13,4 @@ class ArgumentsTest < MiniTest::Unit::TestCase
20
13
  assert_equal([], Posto::Arguments.new(%w(sort)).params)
21
14
  assert_equal(["5"], Posto::Arguments.new(%w(done 5)).params)
22
15
  end
23
-
24
- def test_flag_deletes_flag
25
- args = %w(-f blah.md done 5)
26
- Posto::Arguments.new(args).read_flag("-f")
27
- assert_equal(%w(done 5), args)
28
- end
29
16
  end
data/test/help_test.rb ADDED
@@ -0,0 +1,46 @@
1
+ require 'test_helper'
2
+ require 'posto/help'
3
+
4
+ class HelpTest < MiniTest::Unit::TestCase
5
+ def test_command_without_aliases
6
+ assert_equal " init create a 'posto.md' file in the working directory.",
7
+ Posto::Help.format_command_definition("init", "create a 'posto.md' file in the working directory.")
8
+ end
9
+
10
+ def test_command_with_aliases
11
+ expected = <<EOF.chomp
12
+ list display the todo list.
13
+ todos alias for 'list'
14
+ [default] alias for 'list'
15
+ EOF
16
+ assert_equal expected, Posto::Help.format_command_definition("list, todos, [default]", "display the todo list.")
17
+ end
18
+
19
+ def test_help
20
+ help_text = <<EOF.chomp
21
+
22
+ List Commands:
23
+ init create a 'posto.md' file in the working directory.
24
+ list display the todo list.
25
+ todos alias for 'list'
26
+ [default] alias for 'list'
27
+ sort ask the user about priorities to sort todos.
28
+ resort reset sort order and sort again (can be time consuming).
29
+
30
+ Single Todo Commands:
31
+ add '<todo>' add <todo> unsorted to the bottom of the todo list.
32
+ start '<todo>' add, sort and commit with a message based on <todo>.
33
+ done [n = 1] remove the nth todo from the list.
34
+ delete [n] alias for 'done [n = 1]'
35
+ commit [n] remove the nth todo; commit with a message based on the todo.
36
+ do displays the top todo.
37
+ top alias for 'do'
38
+ do [n] move the nth todo to the top.
39
+ top [n] alias for 'do [n]'
40
+ unsort [n] unsort the nth todo and place it at the bottom.
41
+ EOF
42
+ assert_equal(help_text, Posto::Help.help_text)
43
+ end
44
+ end
45
+
46
+
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.3
4
+ version: 0.3.4
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-19 00:00:00.000000000 Z
12
+ date: 2012-09-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -57,8 +57,10 @@ files:
57
57
  - lib/posto/monkeypatch_array.rb
58
58
  - lib/posto/application.rb
59
59
  - lib/posto/list.rb
60
+ - lib/posto/help.rb
60
61
  - lib/posto/todo.rb
61
62
  - lib/posto/file.rb
63
+ - lib/posto/help.md
62
64
  - lib/posto/arguments.rb
63
65
  - lib/posto/human_comparison.rb
64
66
  - lib/posto.rb
@@ -68,6 +70,7 @@ files:
68
70
  - test/application_test.rb
69
71
  - test/monkeypatch_array_test.rb
70
72
  - test/todo_test.rb
73
+ - test/help_test.rb
71
74
  homepage: http://github.com/mattraibert/posto
72
75
  licenses:
73
76
  - GPLv3
@@ -83,7 +86,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
83
86
  version: '0'
84
87
  segments:
85
88
  - 0
86
- hash: 3530876056305707581
89
+ hash: 3524327587989594064
87
90
  required_rubygems_version: !ruby/object:Gem::Requirement
88
91
  none: false
89
92
  requirements:
@@ -103,3 +106,4 @@ test_files:
103
106
  - test/application_test.rb
104
107
  - test/monkeypatch_array_test.rb
105
108
  - test/todo_test.rb
109
+ - test/help_test.rb