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