Module: Capsium::ThorExt::Start

Included in:
Cli, Cli::Convert, Cli::Package, Cli::Reactor
Defined in:
lib/capsium/thor_ext.rb

Overview

Configures Thor to behave more like a typical CLI, with better help and error handling.

  • Passing -h or –help to a command will show help for that command.

  • Unrecognized options will be treated as errors (instead of being silently ignored).

  • Error messages will be printed in red to stderr, without stack trace.

  • Full stack traces can be enabled by setting the VERBOSE environment variable.

  • Errors will cause Thor to exit with a non-zero status.

To take advantage of this behavior, your CLI should subclass Thor and extend this module.

class CLI < Thor
  extend ThorExt::Start
end

Start your CLI with:

CLI.start

In tests, prevent Kernel.exit from being called when an error occurs, like this:

CLI.start(args, exit_on_failure: false)

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extended(base) ⇒ Object



28
29
30
31
# File 'lib/capsium/thor_ext.rb', line 28

def self.extended(base)
  super
  base.check_unknown_options!
end

Instance Method Details

#start(given_args = ARGV, config = {}) ⇒ Object



33
34
35
36
37
38
39
40
# File 'lib/capsium/thor_ext.rb', line 33

def start(given_args = ARGV, config = {})
  config[:shell] ||= Thor::Base.shell.new
  handle_help_switches(given_args) do |args|
    dispatch(nil, args, nil, config)
  end
rescue StandardError => e
  handle_exception_on_start(e, config)
end