Module: CLI::Kit

Defined in:
lib/cli/kit.rb,
lib/cli/kit/ini.rb,
lib/cli/kit/util.rb,
lib/cli/kit/config.rb,
lib/cli/kit/logger.rb,
lib/cli/kit/system.rb,
lib/cli/kit/support.rb,
lib/cli/kit/version.rb,
lib/cli/kit/autocall.rb,
lib/cli/kit/executor.rb,
lib/cli/kit/resolver.rb,
lib/cli/kit/levenshtein.rb,
lib/cli/kit/base_command.rb,
lib/cli/kit/error_handler.rb,
lib/cli/kit/command_registry.rb,
lib/cli/kit/support/test_helper.rb,
lib/cli/kit/support/test_helper.rb

Defined Under Namespace

Modules: Autocall, Levenshtein, Support, System, Util Classes: BaseCommand, CommandRegistry, Config, ErrorHandler, Executor, Ini, Logger, Resolver

Constant Summary collapse

EXIT_FAILURE_BUT_NOT_BUG =
30
EXIT_BUG =
1
EXIT_SUCCESS =
0
GenericAbort =

Abort, Bug, AbortSilent, and BugSilent are four ways of immediately bailing on command-line execution when an unrecoverable error occurs.

Note that these don’t inherit from StandardError, and so are not caught by a bare ‘rescue => e`.

  • Abort prints its message in red and exits 1;

  • Bug additionally submits the exception to Bugsnag;

  • AbortSilent and BugSilent do the same as above, but do not print

    messages before exiting.
    

Treat these like panic() in Go:

* Don't rescue them. Use a different Exception class if you plan to recover;
* Provide a useful message, since it will be presented in brief to the
    user, and will be useful for debugging.
* Avoid using it if it does actually make sense to recover from an error.

Additionally:

* Do not subclass these.
* Only use AbortSilent or BugSilent if you prefer to print a more
    contextualized error than Abort or Bug would present to the user.
* In general, don't attach a message to AbortSilent or BugSilent.
* Never raise GenericAbort directly.
* Think carefully about whether Abort or Bug is more appropriate. Is this
    a bug in the tool? Or is it just user error, transient network
    failure, etc.?
* One case where it's ok to rescue (cli-kit internals or tests aside):
    1. rescue Abort or Bug
    2. Print a contextualized error message
    3. Re-raise AbortSilent or BugSilent respectively.
Class.new(Exception)
Abort =
Class.new(GenericAbort)
Bug =
Class.new(GenericAbort)
BugSilent =
Class.new(GenericAbort)
AbortSilent =
Class.new(GenericAbort)
VERSION =
"3.3.0"