def parse(args)
      options = {}
      parser = OptionParser.new do |opts|
        opts.banner = "Usage: vines [options] #{COMMANDS.join('|')}"

        opts.separator ""
        opts.separator "Daemon options:"

        opts.on('-d', '--daemonize', 'Run daemonized in the background') do |daemonize|
          options[:daemonize] = daemonize
        end

        options[:log] = 'log/vines.log'
        opts.on('-l', '--log FILE', 'File to redirect output (default: log/vines.log)') do |log|
          options[:log] = log
        end

        options[:pid] = 'pid/vines.pid'
        opts.on('-P', '--pid FILE', 'File to store PID (default: pid/vines.pid)') do |pid|
          options[:pid] = pid
        end

        opts.separator ""
        opts.separator "Common options:"

        opts.on('-h', '--help', 'Show this message') do |help|
          options[:help] = help
        end

        opts.on('-v', '--version', 'Show version') do |version|
          options[:version] = version
        end
      end

      begin
        parser.parse!(args)
      rescue
        puts parser
        exit(1)
      end

      if options[:version]
        puts Vines::VERSION
        exit
      end

      if options[:help]
        puts parser
        exit
      end

      command = args.shift
      unless COMMANDS.include?(command)
        puts parser
        exit(1)
      end

      options.tap do |opts|
        opts[:args]    = args
        opts[:command] = command
        opts[:config]  = File.expand_path('conf/config.rb')
        opts[:pid]     = File.expand_path(opts[:pid])
        opts[:log]     = File.expand_path(opts[:log])
      end
    end
def parse(args)
      options = {}
      parser = OptionParser.new do |opts|
        opts.banner = "Usage: vines [options] #{COMMANDS.join('|')}"

        opts.separator ""
        opts.separator "Daemon options:"

        opts.on('-d', '--daemonize', 'Run daemonized in the background') do |daemonize|
          options[:daemonize] = daemonize
        end

        options[:log] = 'log/vines.log'
        opts.on('-l', '--log FILE', 'File to redirect output (default: log/vines.log)') do |log|
          options[:log] = log
        end

        options[:pid] = 'pid/vines.pid'
        opts.on('-P', '--pid FILE', 'File to store PID (default: pid/vines.pid)') do |pid|
          options[:pid] = pid
        end

        opts.separator ""
        opts.separator "Common options:"

        opts.on('-h', '--help', 'Show this message') do |help|
          options[:help] = help
        end

        opts.on('-v', '--version', 'Show version') do |version|
          options[:version] = version
        end
      end

      begin
        parser.parse!(args)
      rescue
        puts parser
        exit(1)
      end

      if options[:version]
        puts Vines::VERSION
        exit
      end

      if options[:help]
        puts parser
        exit
      end

      command = args.shift
      unless COMMANDS.include?(command)
        puts parser
        exit(1)
      end

      options.tap do |opts|
        opts[:args]    = args
        opts[:command] = command
        opts[:config]  = File.expand_path('conf/config.rb')
        opts[:pid]     = File.expand_path(opts[:pid])
        opts[:log]     = File.expand_path(opts[:log])
      end
    end
Parse the command line arguments and run the matching sub-command
 (e.g. init, start, stop, etc).

 args - The ARGV array provided by the command line.

 Returns nothing.