class Subtle::Sur::Runner

  1. data/sur/runner.rb
Superclass: Object

Runner class for argument dispatching

Methods

Public Instance

  1. run

Public Instance methods

run (args)
Subtle::Sur::Runner::run {{{

Start runner

@param [Array] args Argument array

@raise [String] Command error @since 0.0

Subtle::Sur::Runner.new.run(args)
=> nil
[show source]
# File data/sur/runner.rb, line 34
def run(args)
  # Default options
  @repo      = "local"
  @version   = nil
  @port      = 4567
  @use_tags  = false
  @use_color = true
  @use_regex = false
  @reload    = false
  @assume    = false
  @config    = []

  # GetoptLong only works on ARGV so we use something own
  begin
    idx    = 0
    no_opt = []

    while(idx < args.size)
      case args[idx]
        # Enable flags
        when "-l", "--local"    then @repo      = "local"
        when "-r", "--remote"   then @repo      = "remote"
        when "-c", "--no-color" then @use_color = false
        when "-e", "--regex"    then @use_regex = true
        when "-t", "--tag"      then @use_tags  = true
        when "-R", "--reload"   then @reload    = true
        when "-y", "--yes"      then @assume    = true

        # Get command help
        when "-h", "--help"
          usage(args[0])
          exit

        # Get option arguments
        when "-v", "--version"
          idx      += 1
          @version  = args[idx]
        when "-p", "--port"
          idx   += 1
          @port  = args[idx].to_i
        when "-C", "--config"
          idx     += 1
          @config << args[idx]

        # Save other arguments
        else
          no_opt << args[idx]
      end

      idx += 1
    end

    args = no_opt
  rescue
    raise "Cannot find required arguments"
  end

  # Run
  cmd  = args.shift
  case cmd
    when "annotate"
      usage(cmd) if args.empty?

      Subtle::Sur::Client.new.annotate(args.first, @version)
    when "build"
      usage(cmd) if args.empty?

      Subtle::Sur::Client.new.build(args.first)
    when "config"
      usage(cmd) if args.empty?

      Subtle::Sur::Client.new.config(args.first, @use_color)
    when "fetch"
      usage(cmd) if args.empty?

      Subtle::Sur::Client.new.fetch(args, @version, @use_tags)
    when "grabs"
      usage(cmd) if args.empty?

      Subtle::Sur::Client.new.grabs(args.first, @use_color)
    when "help" then usage(nil)
    when "info"
      usage(cmd) if args.empty?

      Sur::Client.new.info(args, @use_color)
    when "install"
      usage(cmd) if args.empty?

      Sur::Client.new.install(args, @version, @use_tags, @reload)
    when "list"
      Subtle::Sur::Client.new.list(@repo, @use_color)
    when "notes"
      usage(cmd) if args.empty?

      Subtle::Sur::Client.new.notes(args.first)
    when "query"
      usage(cmd) if args.empty?

      Subtle::Sur::Client.new.query(args.first, @repo,
        @version, @use_regex, @use_tags, @use_color
      )
    when "reorder"
      Subtle::Sur::Client.new.reorder
    when "server"
      require "subtle/sur/server"

      Sur::Server.new(@port).run
    when "submit"
      usage(cmd) if args.empty?

      Subtle::Sur::Client.new.submit(args.first)
    when "template"
      usage(cmd) if args.empty?

      Subtle::Sur::Specification.template(args.first)
    when "test"
      usage(cmd) if args.empty?

      require "subtle/sur/test"

      Subtle::Sur::Test.run(@config, args)
    when "uninstall"
      usage(cmd) if args.empty?

      Subtle::Sur::Client.new.uninstall(args,
        @version, @use_tags, @reload)
    when "unpack"
      Subtle::Sur::Client.new.unpack(args,
        @version, @use_tags)
    when "update"
      Subtle::Sur::Client.new.update(@repo)
    when "upgrade"
      Subtle::Sur::Client.new.upgrade(@use_color, @assume, @reload)
    when "version" then version
    when "yank"
      usage(cmd) if args.empty?

      Subtle::Sur::Client.new.update(args.first, @version)
    else usage(nil)
  end
end