davetron5000-gli 0.1.6 → 0.2.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/README.rdoc +23 -8
- data/bin/gli +1 -6
- data/lib/gli.rb +9 -21
- data/lib/gli/flag.rb +2 -2
- data/lib/support/scaffold.rb +4 -0
- metadata +2 -2
    
        data/README.rdoc
    CHANGED
    
    | @@ -1,6 +1,16 @@ | |
| 1 | 
            -
             | 
| 1 | 
            +
            = Git-Like Interface Command Line Parser
         | 
| 2 2 |  | 
| 3 | 
            -
             | 
| 3 | 
            +
            Author::  Dave Copeland (mailto:davetron5000 at g mail dot com)
         | 
| 4 | 
            +
            Copyright:: Copyright (c) 2009 by Dave Copeland
         | 
| 5 | 
            +
            License:: Distributes under the Apache License, see LICENSE.txt in the source distro
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            This is a DSL you can use to create a command line interface like git, gem or svn, in that the first argument is a command, and there are global and command specific flags.
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            == Use
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            Install if you need to:
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                sudo gem install gli
         | 
| 4 14 |  | 
| 5 15 | 
             
            The simplest way to get started is to create a scaffold project
         | 
| 6 16 |  | 
| @@ -10,7 +20,7 @@ This will create a (very) basic scaffold project in <tt>./my_proj</tt>, with a b | |
| 10 20 | 
             
            main file in <tt>./my_proj/bin/my_proj</tt>.  This file demonstrates most of what you need
         | 
| 11 21 | 
             
            to describe your command line interface
         | 
| 12 22 |  | 
| 13 | 
            -
             | 
| 23 | 
            +
            === More Detail
         | 
| 14 24 |  | 
| 15 25 | 
             
            This sets you up to use the DSL that GLI defines:
         | 
| 16 26 |  | 
| @@ -59,7 +69,7 @@ line arguments | |
| 59 69 |  | 
| 60 70 | 
             
                  c.action do |global_options,options,args|
         | 
| 61 71 | 
             
                    if args.length < 1
         | 
| 62 | 
            -
                      raise | 
| 72 | 
            +
                      raise 'You must specify the name of your project'
         | 
| 63 73 | 
             
                    end
         | 
| 64 74 | 
             
                    Scaffold.create_scaffold(g[:r],!o[:notest],o[:e],args[0],args[1..-1],o[:force],g[:n])
         | 
| 65 75 | 
             
                  end
         | 
| @@ -100,7 +110,7 @@ What this doesn't give you: | |
| 100 110 | 
             
            * A way to indicate a require argument or required number of arguments
         | 
| 101 111 | 
             
            * A way to do default switches to 'true' and therefore accept things like <tt>--no-force</tt>
         | 
| 102 112 |  | 
| 103 | 
            -
             | 
| 113 | 
            +
            == Interface Generated
         | 
| 104 114 |  | 
| 105 115 | 
             
            *executable* <i>global options and flags</i> *command* <i>command specific options and flags</i> `arguments`
         | 
| 106 116 |  | 
| @@ -109,7 +119,7 @@ What this doesn't give you: | |
| 109 119 | 
             
            [command]   the command to execute.  The <tt>rebase</tt> in <tt>git rebase</tt>
         | 
| 110 120 | 
             
            [arguments] Anything that's not a switch, flag, or command.  The <tt>main.c</tt> in <tt>git add main.c</tt>
         | 
| 111 121 |  | 
| 112 | 
            -
             | 
| 122 | 
            +
            === Switches
         | 
| 113 123 |  | 
| 114 124 | 
             
            Switches can be specified one at a time in either a long or short format:
         | 
| 115 125 |  | 
| @@ -121,15 +131,20 @@ Switches can also be combined in their short form: | |
| 121 131 | 
             
                ls -l -a    
         | 
| 122 132 | 
             
                ls -la
         | 
| 123 133 |  | 
| 124 | 
            -
             | 
| 134 | 
            +
            === Flags
         | 
| 125 135 |  | 
| 126 136 | 
             
            Flags can be specified in long or short form, and with or without an equals:
         | 
| 127 137 |  | 
| 128 138 | 
             
                git merge -s resolve
         | 
| 129 139 | 
             
                git merge --strategy=resolve
         | 
| 130 140 |  | 
| 131 | 
            -
             | 
| 141 | 
            +
            === Stop Switch
         | 
| 132 142 |  | 
| 133 143 | 
             
            A <tt>--</tt> at any time stops processing and sends the rest of the argument to the command as arguments, even if
         | 
| 134 144 | 
             
            they start with a "--"
         | 
| 135 145 |  | 
| 146 | 
            +
            == Links
         | 
| 147 | 
            +
             | 
| 148 | 
            +
            * [http://davetron5000.github.com/gli] - RubyDoc
         | 
| 149 | 
            +
            * [http://www.github.com/davetron5000/gli] - Source on GitHub
         | 
| 150 | 
            +
             | 
    
        data/bin/gli
    CHANGED
    
    | @@ -33,7 +33,7 @@ command [:init,:scaffold] do |c| | |
| 33 33 |  | 
| 34 34 | 
             
              c.action do |g,o,args|
         | 
| 35 35 | 
             
                if args.length < 1
         | 
| 36 | 
            -
                  raise | 
| 36 | 
            +
                  raise 'You must specify the name of your project'
         | 
| 37 37 | 
             
                end
         | 
| 38 38 | 
             
                Scaffold.create_scaffold(g[:r],!o[:notest],o[:e],args[0],args[1..-1],o[:force],g[:n])
         | 
| 39 39 | 
             
              end
         | 
| @@ -53,9 +53,4 @@ post do |global,command,options,args| | |
| 53 53 | 
             
              puts "Executed #{command.name}" if global[:v]
         | 
| 54 54 | 
             
            end
         | 
| 55 55 |  | 
| 56 | 
            -
            #on_error do |global,command,options,args|
         | 
| 57 | 
            -
            #  puts "Got an error" if global[:v]
         | 
| 58 | 
            -
            #  true
         | 
| 59 | 
            -
            #end
         | 
| 60 | 
            -
             | 
| 61 56 | 
             
            run(ARGV)
         | 
    
        data/lib/gli.rb
    CHANGED
    
    | @@ -72,8 +72,9 @@ module GLI | |
| 72 72 | 
             
              end
         | 
| 73 73 |  | 
| 74 74 | 
             
              # Define a block to run if an error occurs.
         | 
| 75 | 
            -
              # The block will receive  | 
| 76 | 
            -
              # It should return false to avoid the built-in error handling
         | 
| 75 | 
            +
              # The block will receive any Exception that was caught.
         | 
| 76 | 
            +
              # It should return false to avoid the built-in error handling (which basically just
         | 
| 77 | 
            +
              # prints out a message)
         | 
| 77 78 | 
             
              def on_error(&a_proc)
         | 
| 78 79 | 
             
                @@error_block = a_proc
         | 
| 79 80 | 
             
              end
         | 
| @@ -90,15 +91,12 @@ module GLI | |
| 90 91 | 
             
                    command.execute(global_options,options,arguments)
         | 
| 91 92 | 
             
                    @@post_block.call(global_options,command,options,arguments) if @@post_block 
         | 
| 92 93 | 
             
                  end
         | 
| 93 | 
            -
                rescue  | 
| 94 | 
            +
                rescue Exception => ex
         | 
| 94 95 | 
             
                  regular_error_handling = true
         | 
| 95 96 | 
             
                  regular_error_handling = @@error_block.call(ex) if @@error_block
         | 
| 96 97 |  | 
| 97 98 | 
             
                  if regular_error_handling
         | 
| 98 | 
            -
                    puts "error: #{ex}"
         | 
| 99 | 
            -
                    puts
         | 
| 100 | 
            -
                    help = commands[:help]
         | 
| 101 | 
            -
                    help.execute({},{},[])
         | 
| 99 | 
            +
                    puts "error: #{ex.message}"
         | 
| 102 100 | 
             
                  end
         | 
| 103 101 | 
             
                end
         | 
| 104 102 | 
             
              end
         | 
| @@ -175,7 +173,7 @@ module GLI | |
| 175 173 | 
             
                  if !command
         | 
| 176 174 | 
             
                    command_name = args.shift
         | 
| 177 175 | 
             
                    command = find_command(command_name)
         | 
| 178 | 
            -
                    raise | 
| 176 | 
            +
                    raise "Unknown command '#{command_name}'" if !command
         | 
| 179 177 | 
             
                    return parse_options_helper(args,global_options,command,command_options,arguments)
         | 
| 180 178 | 
             
                  else
         | 
| 181 179 | 
             
                    return global_options,command,command_options,arguments | args
         | 
| @@ -225,16 +223,16 @@ module GLI | |
| 225 223 | 
             
                        try_me.delete arg
         | 
| 226 224 | 
             
                        break 
         | 
| 227 225 | 
             
                      end
         | 
| 228 | 
            -
                      raise | 
| 226 | 
            +
                      raise "Unknown argument #{arg}" if arg =~ /^\-/ 
         | 
| 229 227 | 
             
                    end
         | 
| 230 228 | 
             
                    return [global_options,command,command_options,try_me | rest]
         | 
| 231 229 | 
             
                  else
         | 
| 232 230 | 
             
                    # Now we have our command name
         | 
| 233 231 | 
             
                    command_name = try_me.shift
         | 
| 234 | 
            -
                    raise | 
| 232 | 
            +
                    raise "Unknown argument #{command_name}" if command_name =~ /^\-/
         | 
| 235 233 |  | 
| 236 234 | 
             
                    command = find_command(command_name)
         | 
| 237 | 
            -
                    raise | 
| 235 | 
            +
                    raise "Unknown command '#{command_name}'" if !command
         | 
| 238 236 |  | 
| 239 237 | 
             
                    return parse_options_helper(rest,global_options,command,command_options,arguments)
         | 
| 240 238 | 
             
                  end
         | 
| @@ -252,14 +250,4 @@ module GLI | |
| 252 250 | 
             
                nil
         | 
| 253 251 | 
             
              end
         | 
| 254 252 |  | 
| 255 | 
            -
              # Raise this if you get an argument you were not expecting
         | 
| 256 | 
            -
              class UnknownArgumentException < Exception
         | 
| 257 | 
            -
              end
         | 
| 258 | 
            -
             | 
| 259 | 
            -
              class UnknownCommandException < Exception
         | 
| 260 | 
            -
              end
         | 
| 261 | 
            -
             | 
| 262 | 
            -
              # Raise this if your command doesn't get the number of arguments you were expecting
         | 
| 263 | 
            -
              class MissingArgumentException < Exception
         | 
| 264 | 
            -
              end
         | 
| 265 253 | 
             
            end
         | 
    
        data/lib/gli/flag.rb
    CHANGED
    
    | @@ -24,7 +24,7 @@ module GLI | |
| 24 24 | 
             
                          args.delete_at index
         | 
| 25 25 | 
             
                          return value
         | 
| 26 26 | 
             
                        else
         | 
| 27 | 
            -
                          raise | 
| 27 | 
            +
                          raise "#{matched} requires an argument"
         | 
| 28 28 | 
             
                        end
         | 
| 29 29 | 
             
                      else
         | 
| 30 30 | 
             
                        return value
         | 
| @@ -38,7 +38,7 @@ module GLI | |
| 38 38 | 
             
                  if @names[arg]
         | 
| 39 39 | 
             
                    return [true,arg,nil] if arg.length == 2
         | 
| 40 40 | 
             
                    # This means we matched the long-form, but there's no argument
         | 
| 41 | 
            -
                    raise | 
| 41 | 
            +
                    raise "#{arg} requires an argument via #{arg}=argument"
         | 
| 42 42 | 
             
                  end
         | 
| 43 43 | 
             
                  @names.keys.each() do |name|
         | 
| 44 44 | 
             
                    match_string = "^#{name}=(.*)$"
         | 
    
        data/lib/support/scaffold.rb
    CHANGED
    
    | @@ -53,7 +53,11 @@ command :#{command} do |c| | |
| 53 53 | 
             
              c.default_value 'default'
         | 
| 54 54 | 
             
              c.flag :s
         | 
| 55 55 | 
             
              c.action do |global_options,options,args|
         | 
| 56 | 
            +
             | 
| 56 57 | 
             
                # Your command logic here
         | 
| 58 | 
            +
                 
         | 
| 59 | 
            +
                # If you have any errors, just raise them
         | 
| 60 | 
            +
                # raise "that command made no sense"
         | 
| 57 61 | 
             
              end
         | 
| 58 62 | 
             
            end
         | 
| 59 63 | 
             
            EOS
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: davetron5000-gli
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.2.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors: 
         | 
| 7 7 | 
             
            - David Copeland
         | 
| @@ -9,7 +9,7 @@ autorequire: | |
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 11 |  | 
| 12 | 
            -
            date: 2009- | 
| 12 | 
            +
            date: 2009-05-16 00:00:00 -07:00
         | 
| 13 13 | 
             
            default_executable: 
         | 
| 14 14 | 
             
            dependencies: []
         | 
| 15 15 |  |