module CLI::Kit

Constants

Abort
AbortSilent
Bug
BugSilent
EXIT_BUG
EXIT_FAILURE_BUT_NOT_BUG
EXIT_SUCCESS
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.
VERSION