cri 2.0a3 → 2.0b1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/cri.rb +13 -1
- data/lib/cri/command.rb +2 -1
- data/lib/cri/commands/basic_help.rb +9 -4
- data/lib/cri/option_parser.rb +2 -6
- data/test/helper.rb +26 -8
- data/test/test_basic_help.rb +24 -0
- metadata +3 -2
data/lib/cri.rb
CHANGED
@@ -2,8 +2,20 @@
|
|
2
2
|
|
3
3
|
module Cri
|
4
4
|
|
5
|
+
# @todo Document
|
6
|
+
class Error < ::StandardError
|
7
|
+
end
|
8
|
+
|
9
|
+
# @todo Document
|
10
|
+
class NotImplementedError < Error
|
11
|
+
end
|
12
|
+
|
13
|
+
# @todo Document
|
14
|
+
class NoHelpAvailableError < Error
|
15
|
+
end
|
16
|
+
|
5
17
|
# The current Cri version.
|
6
|
-
VERSION = '2.
|
18
|
+
VERSION = '2.0b1'
|
7
19
|
|
8
20
|
autoload 'Command', 'cri/command'
|
9
21
|
autoload 'CommandDSL', 'cri/command_dsl'
|
data/lib/cri/command.rb
CHANGED
@@ -10,13 +10,18 @@ commandline options. When a command is given, a command description as well as
|
|
10
10
|
command-specific commandline options are shown.
|
11
11
|
EOS
|
12
12
|
|
13
|
-
run do |opts, args|
|
13
|
+
run do |opts, args, cmd|
|
14
|
+
if cmd.supercommand.nil?
|
15
|
+
raise NoHelpAvailableError,
|
16
|
+
"No help available because the help command has no supercommand"
|
17
|
+
end
|
18
|
+
|
14
19
|
if args.empty?
|
15
|
-
puts
|
20
|
+
puts cmd.supercommand.help
|
16
21
|
elsif args.size == 1
|
17
|
-
puts
|
22
|
+
puts cmd.supercommand.command_named(args[0]).help
|
18
23
|
else
|
19
|
-
$stderr.puts
|
24
|
+
$stderr.puts cmd.usage
|
20
25
|
exit 1
|
21
26
|
end
|
22
27
|
end
|
data/lib/cri/option_parser.rb
CHANGED
@@ -5,17 +5,13 @@ module Cri
|
|
5
5
|
# Cri::OptionParser is used for parsing commandline options.
|
6
6
|
class OptionParser
|
7
7
|
|
8
|
-
# Superclass for generic option parser errors.
|
9
|
-
class GenericError < StandardError
|
10
|
-
end
|
11
|
-
|
12
8
|
# Error that will be raised when an unknown option is encountered.
|
13
|
-
class IllegalOptionError < Cri::
|
9
|
+
class IllegalOptionError < Cri::Error
|
14
10
|
end
|
15
11
|
|
16
12
|
# Error that will be raised when an option without argument is
|
17
13
|
# encountered.
|
18
|
-
class OptionRequiresAnArgumentError < Cri::
|
14
|
+
class OptionRequiresAnArgumentError < Cri::Error
|
19
15
|
end
|
20
16
|
|
21
17
|
# The delegate to which events will be sent. The following methods will
|
data/test/helper.rb
CHANGED
@@ -4,23 +4,41 @@ require 'stringio'
|
|
4
4
|
|
5
5
|
class Cri::TestCase < MiniTest::Unit::TestCase
|
6
6
|
|
7
|
-
def
|
8
|
-
|
9
|
-
|
7
|
+
def setup
|
8
|
+
@orig_io = capture_io
|
9
|
+
end
|
10
10
|
|
11
|
-
|
12
|
-
|
11
|
+
def teardown
|
12
|
+
uncapture_io(*@orig_io)
|
13
|
+
end
|
13
14
|
|
15
|
+
def capture_io_while(&block)
|
16
|
+
orig_io = capture_io
|
14
17
|
block.call
|
15
|
-
|
16
18
|
[ $stdout.string, $stderr.string ]
|
17
19
|
ensure
|
18
|
-
|
19
|
-
$stderr = $orig_stderr
|
20
|
+
uncapture_io(*orig_io)
|
20
21
|
end
|
21
22
|
|
22
23
|
def lines(string)
|
23
24
|
string.scan(/^.*\n/).map { |s| s.chomp }
|
24
25
|
end
|
25
26
|
|
27
|
+
private
|
28
|
+
|
29
|
+
def capture_io
|
30
|
+
orig_stdout = $stdout
|
31
|
+
orig_stderr = $stderr
|
32
|
+
|
33
|
+
$stdout = StringIO.new
|
34
|
+
$stderr = StringIO.new
|
35
|
+
|
36
|
+
[ orig_stdout, orig_stderr ]
|
37
|
+
end
|
38
|
+
|
39
|
+
def uncapture_io(orig_stdout, orig_stderr)
|
40
|
+
$stdout = orig_stdout
|
41
|
+
$stderr = orig_stderr
|
42
|
+
end
|
43
|
+
|
26
44
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
class Cri::BasicHelpTestCase < Cri::TestCase
|
4
|
+
|
5
|
+
def test_run_without_supercommand
|
6
|
+
cmd = Cri::Command.new_basic_help
|
7
|
+
|
8
|
+
assert_raises Cri::NoHelpAvailableError do
|
9
|
+
cmd.run([])
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_run_with_supercommand
|
14
|
+
cmd = Cri::Command.define do
|
15
|
+
name 'meh'
|
16
|
+
end
|
17
|
+
|
18
|
+
help_cmd = Cri::Command.new_basic_help
|
19
|
+
cmd.add_command(help_cmd)
|
20
|
+
|
21
|
+
help_cmd.run([])
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: cri
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease: 3
|
5
|
-
version: 2.
|
5
|
+
version: 2.0b1
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Denis Defreyne
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-06-
|
13
|
+
date: 2011-06-22 00:00:00 Z
|
14
14
|
dependencies: []
|
15
15
|
|
16
16
|
description: Cri allows building easy-to-use commandline interfaces with support for subcommands.
|
@@ -40,6 +40,7 @@ files:
|
|
40
40
|
- lib/cri.rb
|
41
41
|
- test/helper.rb
|
42
42
|
- test/test_base.rb
|
43
|
+
- test/test_basic_help.rb
|
43
44
|
- test/test_command.rb
|
44
45
|
- test/test_command_dsl.rb
|
45
46
|
- test/test_core_ext.rb
|