Sha256: b53283c0d9f6a44695a75bf2a856496ecc08b88e524f651feae98294362ddb3e

Contents?: true

Size: 1.44 KB

Versions: 1

Compression:

Stored size: 1.44 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

      unless name
        app.input = Inputs.new(@@global, app, global_parser.given)
        return app.default_action
      end

      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.1 lib/mothership.rb