Sha256: 9eb36fbabc94f9b3be7e1238e99a2c3a8cc7541534ae3dcf4856844ffc213213

Contents?: true

Size: 1.36 KB

Versions: 1

Compression:

Stored size: 1.36 KB

Contents

require "mothership/base"
require "mothership/callbacks"
require "mothership/command"
require "mothership/parser"
require "mothership/help"
require "mothership/errors"

class Mothership
  # [Mothership::Command] global options
  @@global = Command.new(self, "(global options)")

  # [Fixnum] exit status; reassign as appropriate error code (e.g. 1)
  @@exit_status = 0

  class << self
    # define a global option
    def option(name, options = {}, &default)
      @@global.add_input(name, options, &default)
    end

    # parse argv, by taking the first arg as the command, and the rest as
    # arguments and flags
    #
    # arguments and flags can be in any order; all flags will be parsed out
    # first, and the bits left over will be treated as arguments
    def start(argv)
      global_parser = Parser.new(@@global)
      name, *argv = global_parser.parse_flags(argv, @@commands)

      app = new

      return app.default_action unless name

      cmdname = name.gsub("-", "_").to_sym

      cmd = @@commands[cmdname]
      return app.unknown_command(cmdname) unless cmd

      app.execute(cmd, argv, global_parser.given)

      code = @@exit_status

      # reset exit status
      @@exit_status = 0

      exit code
    end

    def global_option(name)
      @@global.inputs[name]
    end
  end

  # set the exit status
  def exit_status(num)
    @@exit_status = num
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mothership-0.1.0 lib/mothership.rb