gli 2.4.1 → 2.5.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.
- 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
         
     |