gli 2.4.1 → 2.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/features/todo.feature +2 -2
- data/lib/gli/app.rb +3 -3
- data/lib/gli/commands/help_modules/command_help_format.rb +1 -1
- data/lib/gli/commands/help_modules/global_help_format.rb +1 -1
- data/lib/gli/commands/help_modules/options_formatter.rb +5 -5
- data/lib/gli/dsl.rb +7 -3
- data/lib/gli/gli_option_parser.rb +4 -1
- data/lib/gli/switch.rb +5 -2
- data/lib/gli/version.rb +1 -1
- data/test/tc_gli.rb +37 -0
- data/test/tc_subcommands.rb +4 -3
- metadata +4 -4
data/.gitignore
CHANGED
data/features/todo.feature
CHANGED
@@ -115,10 +115,10 @@ Feature: The todo app has a nice user interface
|
|
115
115
|
|
116
116
|
GLOBAL OPTIONS
|
117
117
|
--flag=arg - (default: none)
|
118
|
-
--help - Show this message
|
119
|
-
--[no-]otherswitch -
|
120
118
|
--[no-]switch -
|
119
|
+
--[no-]otherswitch -
|
121
120
|
--version -
|
121
|
+
--help - Show this message
|
122
122
|
|
123
123
|
COMMANDS
|
124
124
|
help - Shows a list of commands or help for one command
|
data/lib/gli/app.rb
CHANGED
@@ -224,10 +224,10 @@ module GLI
|
|
224
224
|
raise exception
|
225
225
|
end
|
226
226
|
|
227
|
-
# Control how
|
227
|
+
# Control how commands and options are sorted in help output. By default, they are sorted alphabetically.
|
228
228
|
#
|
229
|
-
# sort_type:: How you want help commands sorted:
|
230
|
-
# +:manually+:: help commands are ordered in the order declared.
|
229
|
+
# sort_type:: How you want help commands/options sorted:
|
230
|
+
# +:manually+:: help commands/options are ordered in the order declared.
|
231
231
|
# +:alpha+:: sort alphabetically (default)
|
232
232
|
def sort_help(sort_type)
|
233
233
|
@help_sort_type = sort_type
|
@@ -16,7 +16,7 @@ module GLI
|
|
16
16
|
command_wrapper = @wrapper_class.new(Terminal.instance.size[0],4 + @command.name.to_s.size + 3)
|
17
17
|
wrapper = @wrapper_class.new(Terminal.instance.size[0],4)
|
18
18
|
flags_and_switches = Hash[@command.topmost_ancestor.flags.merge(@command.topmost_ancestor.switches).select { |_,option| option.associated_command == @command }]
|
19
|
-
options_description = OptionsFormatter.new(flags_and_switches,@wrapper_class).format
|
19
|
+
options_description = OptionsFormatter.new(flags_and_switches,@sorter,@wrapper_class).format
|
20
20
|
commands_description = format_subcommands(@command)
|
21
21
|
|
22
22
|
synopses = []
|
@@ -27,7 +27,7 @@ module GLI
|
|
27
27
|
command_formatter.output(stringio)
|
28
28
|
commands = stringio.string
|
29
29
|
|
30
|
-
global_option_descriptions = OptionsFormatter.new(global_flags_and_switches,@wrapper_class).format
|
30
|
+
global_option_descriptions = OptionsFormatter.new(global_flags_and_switches,@sorter,@wrapper_class).format
|
31
31
|
|
32
32
|
GLOBAL_HELP.result(binding)
|
33
33
|
end
|
@@ -2,15 +2,15 @@ module GLI
|
|
2
2
|
module Commands
|
3
3
|
module HelpModules
|
4
4
|
class OptionsFormatter
|
5
|
-
def initialize(flags_and_switches,wrapper_class)
|
5
|
+
def initialize(flags_and_switches,sorter,wrapper_class)
|
6
6
|
@flags_and_switches = flags_and_switches
|
7
|
+
@sorter = sorter
|
7
8
|
@wrapper_class = wrapper_class
|
8
9
|
end
|
9
10
|
|
10
11
|
def format
|
11
|
-
|
12
|
-
|
13
|
-
}.map { |option|
|
12
|
+
flags_and_switches = @sorter.call(@flags_and_switches.values)
|
13
|
+
list_formatter = ListFormatter.new(flags_and_switches.map { |option|
|
14
14
|
if option.respond_to? :argument_name
|
15
15
|
[option_names_for_help_string(option,option.argument_name),description_with_default(option)]
|
16
16
|
else
|
@@ -28,7 +28,7 @@ module GLI
|
|
28
28
|
if option.kind_of? Flag
|
29
29
|
String(option.description) + " (default: #{option.safe_default_value || 'none'})"
|
30
30
|
else
|
31
|
-
String(option.description)
|
31
|
+
String(option.description) + (option.default_value ? " (default: enabled)" : "")
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
data/lib/gli/dsl.rb
CHANGED
@@ -36,10 +36,13 @@ module GLI
|
|
36
36
|
@next_arg_options = options
|
37
37
|
end
|
38
38
|
|
39
|
-
# set the default value of the next flag
|
39
|
+
# set the default value of the next flag or switch
|
40
40
|
#
|
41
|
-
# +val+::
|
42
|
-
# and, when using a config file, the config also doesn't specify one
|
41
|
+
# +val+:: The default value to be used for the following flag if the user doesn't specify one
|
42
|
+
# and, when using a config file, the config also doesn't specify one. For a switch, this is
|
43
|
+
# the value to be used if the switch isn't specified on the command-line. Note that if you
|
44
|
+
# set a switch to have a default of true, using the switch on the command-line has no effect.
|
45
|
+
# To disable a switch where the default is true, use the <tt>--no-</tt> form.
|
43
46
|
def default_value(val); @next_default_value = val; end
|
44
47
|
|
45
48
|
# Create a flag, which is a switch that takes an argument
|
@@ -84,6 +87,7 @@ module GLI
|
|
84
87
|
# and aliases for this switch. The last element can be a hash of options:
|
85
88
|
# +:desc+:: the description, instead of using #desc
|
86
89
|
# +:long_desc+:: the long_description, instead of using #long_desc
|
90
|
+
# +:default_value+:: if the switch is omitted, use this as the default value. By default, switches default to off, or +false+
|
87
91
|
# +:negatable+:: if true, this switch will get a negatable form (e.g. <tt>--[no-]switch</tt>, false it will not. Default is true
|
88
92
|
def switch(*names)
|
89
93
|
options = extract_options(names)
|
@@ -26,6 +26,9 @@ module GLI
|
|
26
26
|
@flags.each do |name,flag|
|
27
27
|
global_options[name] = flag.default_value unless global_options[name]
|
28
28
|
end
|
29
|
+
@switches.each do |name,switch|
|
30
|
+
global_options[name] = switch.default_value if global_options[name].nil?
|
31
|
+
end
|
29
32
|
|
30
33
|
command_name ||= @default_command || :help
|
31
34
|
command = find_command(command_name)
|
@@ -43,7 +46,7 @@ module GLI
|
|
43
46
|
command_options[name] = flag.default_value unless command_options[name]
|
44
47
|
end
|
45
48
|
command.switches.each do |name,switch|
|
46
|
-
command_options[name] = switch.default_value
|
49
|
+
command_options[name] = switch.default_value if command_options[name].nil?
|
47
50
|
end
|
48
51
|
|
49
52
|
[global_options,command,command_options,args]
|
data/lib/gli/switch.rb
CHANGED
@@ -14,11 +14,14 @@ module GLI
|
|
14
14
|
# :desc - the short description
|
15
15
|
# :long_desc - the long description
|
16
16
|
# :negatable - true or false if this switch is negatable; defaults to true
|
17
|
-
# :default_value -
|
17
|
+
# :default_value - default value if the switch is omitted
|
18
18
|
def initialize(names,options = {})
|
19
19
|
super(names,options)
|
20
|
-
@default_value = false
|
20
|
+
@default_value = false if options[:default_value].nil?
|
21
21
|
@negatable = options[:negatable].nil? ? true : options[:negatable]
|
22
|
+
if @default_value != false && @negatable == false
|
23
|
+
raise "A switch with default #{@default_value} that isn't negetable is useless"
|
24
|
+
end
|
22
25
|
end
|
23
26
|
|
24
27
|
def arguments_for_option_parser
|
data/lib/gli/version.rb
CHANGED
data/test/tc_gli.rb
CHANGED
@@ -425,6 +425,43 @@ class TC_testGLI < Clean::Test::TestCase
|
|
425
425
|
@app.run(['foo', '-i','5','-s','a'])
|
426
426
|
end
|
427
427
|
|
428
|
+
def test_switch_with_default_of_true
|
429
|
+
@app.reset
|
430
|
+
@app.on_error do |ex|
|
431
|
+
raise ex
|
432
|
+
end
|
433
|
+
@switch_value = nil
|
434
|
+
|
435
|
+
@app.command [:foo] do |c|
|
436
|
+
c.default_value true
|
437
|
+
c.switch :switch
|
438
|
+
c.action do |g,o,a|
|
439
|
+
@switch_value = o[:switch]
|
440
|
+
end
|
441
|
+
end
|
442
|
+
@app.run(['foo'])
|
443
|
+
|
444
|
+
assert @switch_value == true,"Got: '#{@switch_value}', but expected true"
|
445
|
+
|
446
|
+
@app.run(['foo','--no-switch'])
|
447
|
+
|
448
|
+
assert @switch_value == false,"Got: '#{@switch_value}', but expected false"
|
449
|
+
end
|
450
|
+
|
451
|
+
def test_switch_with_default_true_and_not_negetable_causes_exception
|
452
|
+
@app.reset
|
453
|
+
@app.on_error do |ex|
|
454
|
+
raise ex
|
455
|
+
end
|
456
|
+
@switch_value = nil
|
457
|
+
|
458
|
+
assert_raises(RuntimeError) do
|
459
|
+
@app.command [:foo] do |c|
|
460
|
+
c.switch :switch, :default_value => true, :negatable => false
|
461
|
+
end
|
462
|
+
end
|
463
|
+
end
|
464
|
+
|
428
465
|
def test_two_flags_using_equals_with_a_default
|
429
466
|
@app.reset
|
430
467
|
@app.on_error do |ex|
|
data/test/tc_subcommands.rb
CHANGED
@@ -121,10 +121,11 @@ class TC_testSubCommand < Clean::Test::TestCase
|
|
121
121
|
# - args => array of expected args
|
122
122
|
def assert_command_ran_with(expected_command,options)
|
123
123
|
lambda {
|
124
|
+
global_options = options[:global_options] || { :help => false }
|
124
125
|
@run_results.each do |command,results|
|
125
126
|
if command == expected_command
|
126
|
-
assert_equal(
|
127
|
-
assert_equal(
|
127
|
+
assert_equal(indifferent_hash(global_options),results[0])
|
128
|
+
assert_equal(indifferent_hash(options[:command_options]),results[1])
|
128
129
|
assert_equal(options[:args],results[2])
|
129
130
|
else
|
130
131
|
assert_nil results
|
@@ -133,7 +134,7 @@ class TC_testSubCommand < Clean::Test::TestCase
|
|
133
134
|
}
|
134
135
|
end
|
135
136
|
|
136
|
-
def
|
137
|
+
def indifferent_hash(possibly_nil_hash)
|
137
138
|
return {} if possibly_nil_hash.nil?
|
138
139
|
keys = possibly_nil_hash.keys
|
139
140
|
keys.map(&:to_s).each do |key|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.5.0
|
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-
|
12
|
+
date: 2012-11-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -369,7 +369,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
369
369
|
version: '0'
|
370
370
|
segments:
|
371
371
|
- 0
|
372
|
-
hash:
|
372
|
+
hash: 3564389066848623229
|
373
373
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
374
374
|
none: false
|
375
375
|
requirements:
|
@@ -378,7 +378,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
378
378
|
version: '0'
|
379
379
|
segments:
|
380
380
|
- 0
|
381
|
-
hash:
|
381
|
+
hash: 3564389066848623229
|
382
382
|
requirements: []
|
383
383
|
rubyforge_project: gli
|
384
384
|
rubygems_version: 1.8.24
|