cri 2.0a3 → 2.0b1
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/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
|