Class: Veewee::CLI

Inherits:
Thor show all
Defined in:
lib/veewee/cli.rb

Overview

Entrypoint for the Veewee CLI. This class should never be initialized directly (like a typical Thor class). Instead, use Environment#cli to invoke the CLI.

# Defining Custom CLI Commands

If you're looking to define custom CLI commands, then look at one of the two following classes:

The above linked classes contain the main documentation for each type of command.

Class Method Summary collapse

Class Method Details

.register(klass, name, usage, description, opts = nil) ⇒ Object

Registers the given class with the CLI so it can be accessed. The class must be a subclass of either Veewee::Command::Base or Veewee::Command::GroupBase. Don't call this method directly, instead call the Veewee::Command::Base.register or Veewee::Command::GroupBase.register methods.

Parameters:

  • klass (Class)

    Command class

  • name (String)

    Command name, accessed at `mccloud NAME`

  • usage (String)

    Command usage, such as “mccloud NAME [–option]”

  • description (String)

    Description of the command shown during the command listing.

  • opts (Hash) (defaults to: nil)

    Other options (not gone into detail here, look at the source instead).


33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/veewee/cli.rb', line 33

def self.register(klass, name, usage, description, opts = nil)
  opts ||= {}

  if klass <= Command::GroupBase
    # A subclass of GroupBase is a subcommand, since it contains
    # many smaller commands within it.
    desc usage, description, opts
    subcommand name, klass
  elsif klass <= Command::Base
    # A subclass of Base is a single command, since it
    # is invoked as a whole (as Thor::Group)
    desc usage, description, opts
    define_method(name) { |*args| invoke klass, args }
  end

  if opts[:alias]
    # Alises are defined for this command, so properly alias the
    # newly defined method/subcommand:
    map opts[:alias] => name
  end
end