gli 2.10.0 → 2.11.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.
- checksums.yaml +4 -4
- data/features/todo.feature +78 -13
- data/lib/gli.rb +1 -0
- data/lib/gli/app_support.rb +2 -2
- data/lib/gli/argument.rb +20 -0
- data/lib/gli/command.rb +1 -0
- data/lib/gli/command_support.rb +4 -0
- data/lib/gli/commands/help_modules/arg_name_formatter.rb +28 -1
- data/lib/gli/commands/help_modules/full_synopsis_formatter.rb +2 -2
- data/lib/gli/dsl.rb +22 -0
- data/lib/gli/exceptions.rb +26 -0
- data/lib/gli/gli_option_parser.rb +7 -6
- data/lib/gli/option_parser_factory.rb +1 -1
- data/lib/gli/version.rb +1 -1
- data/test/apps/todo/bin/todo +3 -0
- data/test/apps/todo/lib/todo/commands/create.rb +29 -0
- data/test/apps/todo/lib/todo/commands/list.rb +1 -0
- data/test/tc_gli.rb +15 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 362815ed2ee02ae4318a321eca52acb7175f802f
|
4
|
+
data.tar.gz: 27dadfccc2e537d4ae9824cf1a75075020391d6c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 261bf4ac97f86f4b2b1d68aba7cb7396da8c6e2651504dfd8ce1a736215cca382b723db02820165b69c71e74721b4ac4588c45cfcf7014596c80e1225845a504
|
7
|
+
data.tar.gz: 4a12460017ee29eb4dd7f97111ee5cbb8b5112cd44db7dd933c7edc069b3f8053e0245417e4fa3ffaaeb108b4f85384ab2a86bf0483b7811ad52dbdafb9d6110
|
data/features/todo.feature
CHANGED
@@ -17,6 +17,7 @@ Feature: The todo app has a nice user interface
|
|
17
17
|
|
18
18
|
Scenario Outline: Getting Help for todo in general
|
19
19
|
When I successfully run `todo <help>`
|
20
|
+
Then the exit status should be 0
|
20
21
|
Then the output should contain:
|
21
22
|
"""
|
22
23
|
NAME
|
@@ -195,8 +196,9 @@ Feature: The todo app has a nice user interface
|
|
195
196
|
stored in your todo databases.
|
196
197
|
|
197
198
|
COMMAND OPTIONS
|
198
|
-
-l, --[no-]long
|
199
|
-
--required_flag=arg
|
199
|
+
-l, --[no-]long - Show long form
|
200
|
+
--required_flag=arg - (required, default: none)
|
201
|
+
--required_flag2=arg - (required, default: none)
|
200
202
|
|
201
203
|
COMMANDS
|
202
204
|
contexts - List contexts
|
@@ -238,8 +240,9 @@ Feature: The todo app has a nice user interface
|
|
238
240
|
List a whole lot of things that you might be keeping track of in your overall todo list. This is your go-to place or finding all of the things that you might have stored in your todo databases.
|
239
241
|
|
240
242
|
COMMAND OPTIONS
|
241
|
-
-l, --[no-]long
|
242
|
-
--required_flag=arg
|
243
|
+
-l, --[no-]long - Show long form
|
244
|
+
--required_flag=arg - (required, default: none)
|
245
|
+
--required_flag2=arg - (required, default: none)
|
243
246
|
|
244
247
|
COMMANDS
|
245
248
|
contexts - List contexts
|
@@ -270,8 +273,9 @@ Feature: The todo app has a nice user interface
|
|
270
273
|
|
271
274
|
|
272
275
|
COMMAND OPTIONS
|
273
|
-
-l, --[no-]long
|
274
|
-
--required_flag=arg
|
276
|
+
-l, --[no-]long - Show long form
|
277
|
+
--required_flag=arg - (required, default: none)
|
278
|
+
--required_flag2=arg - (required, default: none)
|
275
279
|
|
276
280
|
COMMANDS
|
277
281
|
contexts - List contexts
|
@@ -294,8 +298,9 @@ Feature: The todo app has a nice user interface
|
|
294
298
|
List a whole lot of things that you might be keeping track of in your overall todo list. This is your go-to place or finding all of the things that you might have stored in your todo databases.
|
295
299
|
|
296
300
|
COMMAND OPTIONS
|
297
|
-
-l, --[no-]long
|
298
|
-
--required_flag=arg
|
301
|
+
-l, --[no-]long - Show long form
|
302
|
+
--required_flag=arg - (required, default: none)
|
303
|
+
--required_flag2=arg - (required, default: none)
|
299
304
|
|
300
305
|
COMMANDS
|
301
306
|
contexts - List contexts
|
@@ -336,21 +341,27 @@ Feature: The todo app has a nice user interface
|
|
336
341
|
SYNOPSIS
|
337
342
|
todo [global options] create
|
338
343
|
todo [global options] create contexts [context_name]
|
344
|
+
todo [global options] create relation_1-1 first second [name]
|
345
|
+
todo [global options] create relation_1-n first second[, second]* [name]
|
346
|
+
todo [global options] create relation_n-1 first[, first]* second [name]
|
339
347
|
todo [global options] create tasks task_name[, task_name]*
|
340
348
|
|
341
349
|
COMMANDS
|
342
|
-
<default>
|
343
|
-
contexts
|
344
|
-
|
350
|
+
<default> - Makes a new task
|
351
|
+
contexts - Make a new context
|
352
|
+
relation_1-1 -
|
353
|
+
relation_1-n -
|
354
|
+
relation_n-1 -
|
355
|
+
tasks - Make a new task
|
345
356
|
"""
|
346
357
|
And the output should not contain "COMMAND OPTIONS"
|
347
358
|
|
348
359
|
Scenario: Running list w/out subcommand performs list tasks by default
|
349
|
-
When I successfully run `todo list --required_flag=blah boo yay`
|
360
|
+
When I successfully run `todo list --required_flag=blah --required_flag2=bleh boo yay`
|
350
361
|
Then the output should contain "list tasks: boo,yay"
|
351
362
|
|
352
363
|
Scenario: Running list w/out subcommand or any arguments performs list tasks by default
|
353
|
-
When I successfully run `todo list --required_flag=blah`
|
364
|
+
When I successfully run `todo list --required_flag=blah --required_flag2=bleh`
|
354
365
|
Then the output should contain "list tasks:"
|
355
366
|
|
356
367
|
Scenario: Running chained commands works
|
@@ -479,3 +490,57 @@ Feature: The todo app has a nice user interface
|
|
479
490
|
todo [global options] ls [command options] contexts [subcommand options]
|
480
491
|
todo [global options] ls [command options] tasks [subcommand options]
|
481
492
|
"""
|
493
|
+
|
494
|
+
Scenario: We get a clear error message when a required argument is missing
|
495
|
+
Given a clean home directory
|
496
|
+
When I run `todo list`
|
497
|
+
Then the exit status should not be 0
|
498
|
+
And the stderr should contain "error: required_flag is required, required_flag2 is required"
|
499
|
+
And the output should contain:
|
500
|
+
"""
|
501
|
+
NAME
|
502
|
+
list - List things, such as tasks or contexts
|
503
|
+
|
504
|
+
SYNOPSIS
|
505
|
+
todo [global options] list [command options] [tasks] [subcommand options]
|
506
|
+
todo [global options] list [command options] contexts [subcommand options]
|
507
|
+
|
508
|
+
DESCRIPTION
|
509
|
+
List a whole lot of things that you might be keeping track of in your
|
510
|
+
overall todo list.
|
511
|
+
|
512
|
+
This is your go-to place or finding all of the things that you might have
|
513
|
+
stored in your todo databases.
|
514
|
+
|
515
|
+
COMMAND OPTIONS
|
516
|
+
-l, --[no-]long - Show long form
|
517
|
+
--required_flag=arg - (required, default: none)
|
518
|
+
--required_flag2=arg - (required, default: none)
|
519
|
+
|
520
|
+
COMMANDS
|
521
|
+
contexts - List contexts
|
522
|
+
tasks - List tasks (default)
|
523
|
+
"""
|
524
|
+
|
525
|
+
Scenario: Getting help on a root command with an arg_name outputs the argument description
|
526
|
+
When I run `todo help first`
|
527
|
+
And the stdout should contain:
|
528
|
+
"""
|
529
|
+
NAME
|
530
|
+
first -
|
531
|
+
|
532
|
+
SYNOPSIS
|
533
|
+
todo [global options] first [argument]
|
534
|
+
"""
|
535
|
+
|
536
|
+
Scenario: Getting help on a root command with an arg outputs the argument description
|
537
|
+
When I run `todo help second`
|
538
|
+
And the stdout should contain:
|
539
|
+
"""
|
540
|
+
NAME
|
541
|
+
second -
|
542
|
+
|
543
|
+
SYNOPSIS
|
544
|
+
todo [global options] second [argument]
|
545
|
+
"""
|
546
|
+
|
data/lib/gli.rb
CHANGED
data/lib/gli/app_support.rb
CHANGED
@@ -210,7 +210,7 @@ module GLI
|
|
210
210
|
def handle_exception(ex,command)
|
211
211
|
if regular_error_handling?(ex)
|
212
212
|
output_error_message(ex)
|
213
|
-
if ex.kind_of?(OptionParser::ParseError) || ex.kind_of?(BadCommandLine)
|
213
|
+
if ex.kind_of?(OptionParser::ParseError) || ex.kind_of?(BadCommandLine) || ex.kind_of?(RequestHelp)
|
214
214
|
if commands[:help]
|
215
215
|
command_for_help = command.nil? ? [] : command.name_for_help
|
216
216
|
commands[:help].execute({},{},command_for_help)
|
@@ -220,7 +220,7 @@ module GLI
|
|
220
220
|
stderr.puts "Custom error handler exited false, skipping normal error handling"
|
221
221
|
end
|
222
222
|
|
223
|
-
raise ex if ENV['GLI_DEBUG'] == 'true'
|
223
|
+
raise ex if ENV['GLI_DEBUG'] == 'true' && !ex.kind_of?(RequestHelp)
|
224
224
|
|
225
225
|
ex.extend(GLI::StandardException)
|
226
226
|
ex.exit_code
|
data/lib/gli/argument.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
module GLI
|
2
|
+
class Argument #:nodoc:
|
3
|
+
|
4
|
+
attr_reader :name
|
5
|
+
attr_reader :options
|
6
|
+
|
7
|
+
def initialize(name,options = [])
|
8
|
+
@name = name
|
9
|
+
@options = options
|
10
|
+
end
|
11
|
+
|
12
|
+
def optional?
|
13
|
+
@options.include? :optional
|
14
|
+
end
|
15
|
+
|
16
|
+
def multiple?
|
17
|
+
@options.include? :multiple
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/gli/command.rb
CHANGED
@@ -49,6 +49,7 @@ module GLI
|
|
49
49
|
super(options[:names],options[:description],options[:long_desc])
|
50
50
|
@arguments_description = options[:arguments_name] || ''
|
51
51
|
@arguments_options = Array(options[:arguments_options]).flatten
|
52
|
+
@arguments = options[:arguments] || []
|
52
53
|
@skips_pre = options[:skips_pre]
|
53
54
|
@skips_post = options[:skips_post]
|
54
55
|
@skips_around = options[:skips_around]
|
data/lib/gli/command_support.rb
CHANGED
@@ -3,7 +3,34 @@ module GLI
|
|
3
3
|
module HelpModules
|
4
4
|
# Handles wrapping text
|
5
5
|
class ArgNameFormatter
|
6
|
-
def format(arguments_description,arguments_options)
|
6
|
+
def format(arguments_description,arguments_options,arguments)
|
7
|
+
# Select which format to use: argname or arguments
|
8
|
+
# Priority to old way: argname
|
9
|
+
desc = format_argname(arguments_description, arguments_options)
|
10
|
+
desc = format_arguments(arguments) if desc.strip == ''
|
11
|
+
desc
|
12
|
+
end
|
13
|
+
|
14
|
+
def format_arguments(arguments)
|
15
|
+
return '' if arguments.empty?
|
16
|
+
desc = ""
|
17
|
+
|
18
|
+
# Go through the arguments, building the description string
|
19
|
+
arguments.each do |arg|
|
20
|
+
arg_desc = "#{arg.name}"
|
21
|
+
if arg.optional?
|
22
|
+
arg_desc = "[#{arg_desc}]"
|
23
|
+
end
|
24
|
+
if arg.multiple?
|
25
|
+
arg_desc = "#{arg_desc}[, #{arg_desc}]*"
|
26
|
+
end
|
27
|
+
desc = desc + " " + arg_desc
|
28
|
+
end
|
29
|
+
|
30
|
+
desc
|
31
|
+
end
|
32
|
+
|
33
|
+
def format_argname(arguments_description,arguments_options)
|
7
34
|
return '' if String(arguments_description).strip == ''
|
8
35
|
desc = arguments_description
|
9
36
|
if arguments_options.include? :optional
|
@@ -11,7 +11,7 @@ module GLI
|
|
11
11
|
def synopses_for_command(command)
|
12
12
|
synopses = []
|
13
13
|
one_line_usage = basic_usage(command)
|
14
|
-
one_line_usage << command.arguments_description
|
14
|
+
one_line_usage << ArgNameFormatter.new.format(command.arguments_description,command.arguments_options,command.arguments).strip
|
15
15
|
if command.commands.empty?
|
16
16
|
synopses << one_line_usage
|
17
17
|
else
|
@@ -73,7 +73,7 @@ module GLI
|
|
73
73
|
usage << ' '
|
74
74
|
usage << sub_options_doc
|
75
75
|
end
|
76
|
-
arg_name_doc = ArgNameFormatter.new.format(sub.arguments_description,sub.arguments_options).strip
|
76
|
+
arg_name_doc = ArgNameFormatter.new.format(sub.arguments_description,sub.arguments_options,sub.arguments).strip
|
77
77
|
if arg_name_doc.length > 0
|
78
78
|
usage << ' '
|
79
79
|
usage << arg_name_doc
|
data/lib/gli/dsl.rb
CHANGED
@@ -36,6 +36,26 @@ module GLI
|
|
36
36
|
@next_arg_options = options
|
37
37
|
end
|
38
38
|
|
39
|
+
# Describes one of the arguments of the next command
|
40
|
+
#
|
41
|
+
# +name+:: A String that *briefly* describes the argument given to the following command.
|
42
|
+
# +options+:: Symbol or array of symbols to annotate this argument. This doesn't affect parsing, just
|
43
|
+
# the help output. Values recognized are:
|
44
|
+
# +:optional+:: indicates this argument is optional; will format it with square brackets
|
45
|
+
# +:multiple+:: indicates multiple values are accepted; will format appropriately
|
46
|
+
#
|
47
|
+
# Example:
|
48
|
+
# arg :output
|
49
|
+
# arg :input, :multiple
|
50
|
+
# command :pack do ...
|
51
|
+
#
|
52
|
+
# Produces the synopsis:
|
53
|
+
# app.rb [global options] pack output input[, input]*
|
54
|
+
def arg(name, options=[])
|
55
|
+
@next_arguments ||= []
|
56
|
+
@next_arguments << Argument.new(name, Array(options).flatten)
|
57
|
+
end
|
58
|
+
|
39
59
|
# set the default value of the next flag or switch
|
40
60
|
#
|
41
61
|
# +val+:: The default value to be used for the following flag if the user doesn't specify one
|
@@ -152,6 +172,7 @@ module GLI
|
|
152
172
|
:description => @next_desc,
|
153
173
|
:arguments_name => @next_arg_name,
|
154
174
|
:arguments_options => @next_arg_options,
|
175
|
+
:arguments => @next_arguments,
|
155
176
|
:long_desc => @next_long_desc,
|
156
177
|
:skips_pre => @skips_pre,
|
157
178
|
:skips_post => @skips_post,
|
@@ -178,6 +199,7 @@ module GLI
|
|
178
199
|
yield command
|
179
200
|
end
|
180
201
|
clear_nexts
|
202
|
+
@next_arguments = []
|
181
203
|
end
|
182
204
|
alias :c :command
|
183
205
|
|
data/lib/gli/exceptions.rb
CHANGED
@@ -5,6 +5,21 @@ module GLI
|
|
5
5
|
module StandardException
|
6
6
|
def exit_code; 1; end
|
7
7
|
end
|
8
|
+
|
9
|
+
# Hack to request help from within a command
|
10
|
+
# Will *not* be rethrown when GLI_DEBUG is ON
|
11
|
+
class RequestHelp < StandardError
|
12
|
+
include StandardException
|
13
|
+
def exit_code; 0; end
|
14
|
+
|
15
|
+
# The command for which the argument was unknown
|
16
|
+
attr_reader :command_in_context
|
17
|
+
|
18
|
+
def initialize(command_in_context)
|
19
|
+
@command_in_context = command_in_context
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
8
23
|
# Indicates that the command line invocation was bad
|
9
24
|
class BadCommandLine < StandardError
|
10
25
|
include StandardException
|
@@ -44,6 +59,17 @@ module GLI
|
|
44
59
|
end
|
45
60
|
end
|
46
61
|
|
62
|
+
class MissingRequiredArgumentsException < BadCommandLine
|
63
|
+
# The command for which the argument was unknown
|
64
|
+
attr_reader :command_in_context
|
65
|
+
# +message+:: the error message to show the user
|
66
|
+
# +command+:: the command we were using to parse command-specific options
|
67
|
+
def initialize(message,command)
|
68
|
+
super(message)
|
69
|
+
@command_in_context = command
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
47
73
|
# Indicates the bad command line was an unknown command argument
|
48
74
|
class UnknownCommandArgument < CommandException
|
49
75
|
end
|
@@ -37,23 +37,24 @@ module GLI
|
|
37
37
|
end
|
38
38
|
parsing_result.command = @command_finder.find_command(command_name)
|
39
39
|
unless command_name == 'help'
|
40
|
-
verify_required_options!(@flags,parsing_result.global_options)
|
40
|
+
verify_required_options!(@flags, parsing_result.command, parsing_result.global_options)
|
41
41
|
end
|
42
42
|
parsing_result
|
43
43
|
end
|
44
44
|
|
45
45
|
protected
|
46
46
|
|
47
|
-
def verify_required_options!(flags,options)
|
47
|
+
def verify_required_options!(flags, command, options)
|
48
48
|
missing_required_options = flags.values.
|
49
49
|
select(&:required?).
|
50
50
|
reject { |option|
|
51
51
|
options[option.name] != nil
|
52
52
|
}
|
53
53
|
unless missing_required_options.empty?
|
54
|
-
|
54
|
+
missing_required_options.sort!
|
55
|
+
raise MissingRequiredArgumentsException.new(missing_required_options.map { |option|
|
55
56
|
"#{option.name} is required"
|
56
|
-
}.join(' ')
|
57
|
+
}.join(', '), command)
|
57
58
|
end
|
58
59
|
end
|
59
60
|
end
|
@@ -86,7 +87,7 @@ module GLI
|
|
86
87
|
command_finder = CommandFinder.new(command.commands,command.get_default_command)
|
87
88
|
next_command_name = arguments.shift
|
88
89
|
|
89
|
-
verify_required_options!(command.flags,parsed_command_options[command])
|
90
|
+
verify_required_options!(command.flags, command, parsed_command_options[command])
|
90
91
|
|
91
92
|
begin
|
92
93
|
command = command_finder.find_command(next_command_name)
|
@@ -138,7 +139,7 @@ module GLI
|
|
138
139
|
subcommand,args = find_subcommand(command,parsing_result.arguments)
|
139
140
|
parsing_result.command = subcommand
|
140
141
|
parsing_result.arguments = args
|
141
|
-
verify_required_options!(command.flags,parsing_result.command_options)
|
142
|
+
verify_required_options!(command.flags, parsing_result.command, parsing_result.command_options)
|
142
143
|
end
|
143
144
|
|
144
145
|
private
|
data/lib/gli/version.rb
CHANGED
data/test/apps/todo/bin/todo
CHANGED
@@ -35,7 +35,10 @@ version Todo::VERSION
|
|
35
35
|
commands_from 'todo/commands'
|
36
36
|
commands_from File.expand_path(File.join(File.dirname(__FILE__), '..', '..', 'todo_plugins', 'commands'))
|
37
37
|
|
38
|
+
arg_name :argument, :optional
|
38
39
|
command :first do |c| c.action { |g,o,a| puts "first: #{a.join(',')}" } end
|
40
|
+
|
41
|
+
arg :argument, :optional
|
39
42
|
command :second do |c| c.action { |g,o,a| puts "second: #{a.join(',')}" } end
|
40
43
|
|
41
44
|
command :chained => [ :first, :second ]
|
@@ -2,6 +2,7 @@ desc "Create a new task or context"
|
|
2
2
|
command [:create,:new] do |c|
|
3
3
|
c.desc "Make a new task"
|
4
4
|
c.arg_name 'task_name', :multiple
|
5
|
+
c.arg :should_ignore_this
|
5
6
|
c.command :tasks do |tasks|
|
6
7
|
tasks.action do |global,options,args|
|
7
8
|
puts "#{args}"
|
@@ -9,6 +10,7 @@ command [:create,:new] do |c|
|
|
9
10
|
end
|
10
11
|
|
11
12
|
c.desc "Make a new context"
|
13
|
+
c.arg :should_ignore_this
|
12
14
|
c.arg_name 'context_name', :optional
|
13
15
|
c.command :contexts do |contexts|
|
14
16
|
contexts.action do |global,options,args|
|
@@ -20,5 +22,32 @@ command [:create,:new] do |c|
|
|
20
22
|
c.action do
|
21
23
|
puts "default action"
|
22
24
|
end
|
25
|
+
|
26
|
+
c.arg "first"
|
27
|
+
c.arg "second"
|
28
|
+
c.arg "name", :optional
|
29
|
+
c.command :"relation_1-1" do |remote|
|
30
|
+
remote.action do |global,options,args|
|
31
|
+
puts "relation: #{args}"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
c.arg "first", :multiple
|
36
|
+
c.arg "second"
|
37
|
+
c.arg "name", :optional
|
38
|
+
c.command :"relation_n-1" do |remote|
|
39
|
+
remote.action do |global,options,args|
|
40
|
+
puts "relation: #{args}"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
c.arg "first"
|
45
|
+
c.arg "second", :multiple
|
46
|
+
c.arg "name", :optional
|
47
|
+
c.command :"relation_1-n" do |remote|
|
48
|
+
remote.action do |global,options,args|
|
49
|
+
puts "relation: #{args}"
|
50
|
+
end
|
51
|
+
end
|
23
52
|
end
|
24
53
|
|
data/test/tc_gli.rb
CHANGED
@@ -84,6 +84,7 @@ class TC_testGLI < Clean::Test::TestCase
|
|
84
84
|
assert_equal 64, @app.run(['foo']), "Expected exit status to be 64"
|
85
85
|
assert @fake_stderr.contained?(/flag is required/), @fake_stderr.strings.inspect
|
86
86
|
assert @fake_stderr.contained?(/other_flag is required/), @fake_stderr.strings.inspect
|
87
|
+
assert @fake_stderr.contained?(/flag is required, other_flag is required/), @fake_stderr.strings.inspect
|
87
88
|
assert !@called
|
88
89
|
|
89
90
|
assert_equal 0, @app.run(['foo','--flag=bar','--other_flag=blah']), "Expected exit status to be 0 #{@fake_stderr.strings.join(',')}"
|
@@ -104,6 +105,7 @@ class TC_testGLI < Clean::Test::TestCase
|
|
104
105
|
assert_equal 64, @app.run(['foo']), "Expected exit status to be 64"
|
105
106
|
assert @fake_stderr.contained?(/flag is required/), @fake_stderr.strings.inspect
|
106
107
|
assert @fake_stderr.contained?(/other_flag is required/), @fake_stderr.strings.inspect
|
108
|
+
assert @fake_stderr.contained?(/flag is required, other_flag is required/), @fake_stderr.strings.inspect
|
107
109
|
assert !@called
|
108
110
|
|
109
111
|
assert_equal 0, @app.run(['--flag=bar','--other_flag=blah','foo']), "Expected exit status to be 0 #{@fake_stderr.strings.join(',')}"
|
@@ -663,6 +665,19 @@ class TC_testGLI < Clean::Test::TestCase
|
|
663
665
|
assert_raises(GLI::CustomExit) { @app.run(['foo']) }
|
664
666
|
end
|
665
667
|
|
668
|
+
def test_gli_help_does_not_raise_on_debug
|
669
|
+
ENV['GLI_DEBUG'] = 'true'
|
670
|
+
|
671
|
+
@app.reset
|
672
|
+
@app.command(:multiply) do |c|
|
673
|
+
c.action do |g,o,a|
|
674
|
+
# Nothing
|
675
|
+
end
|
676
|
+
end
|
677
|
+
|
678
|
+
assert_nothing_raised(GLI::CustomExit) { @app.run(['multiply', '--help']) }
|
679
|
+
end
|
680
|
+
|
666
681
|
class ConvertMe
|
667
682
|
attr_reader :value
|
668
683
|
def initialize(value)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.11.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Copeland
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-06-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -174,6 +174,7 @@ files:
|
|
174
174
|
- lib/gli.rb
|
175
175
|
- lib/gli/app.rb
|
176
176
|
- lib/gli/app_support.rb
|
177
|
+
- lib/gli/argument.rb
|
177
178
|
- lib/gli/command.rb
|
178
179
|
- lib/gli/command_finder.rb
|
179
180
|
- lib/gli/command_line_option.rb
|