Class: MelissaData::CLI

Inherits:
Thor
  • Object
show all
Defined in:
lib/melissadata/cli.rb

Overview

Entrypoint for the MelissaData 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:

  • MelissaData::Command::Base - Implementing a single command such as melissadata up, e.g. one without subcommands. Also take a look at Command::NamedBase.
  • Command::GroupBase - Implementing a command with subcommands, such as melissadata box, which has the list, add, etc. subcommands.

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 MelissaData::Command::Base Don't call this method directly, instead call the MelissaData::Command::Base.register

Parameters:

  • klass (Class)

    Command class

  • name (String)

    Command name, accessed at melissadata NAME

  • usage (String)

    Command usage, such as "melissadata 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).



30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/melissadata/cli.rb', line 30

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

  # 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 }

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