Class: WavefrontCommandBase

Inherits:
Object
  • Object
show all
Defined in:
lib/wavefront-cli/commands/base.rb

Overview

A base class which all command classes extend.

Instance Method Summary collapse

Instance Method Details

#_commandsArray

Inheriting classes must override this method

Returns:

  • (Array)


49
50
51
# File 'lib/wavefront-cli/commands/base.rb', line 49

def _commands
  []
end

#_optionsArray

Inheriting classes must override this method

Returns:

  • (Array)


31
32
33
# File 'lib/wavefront-cli/commands/base.rb', line 31

def _options
  []
end

#commands(term_width = TW) ⇒ String

Returns the subcommands the command offers.

Parameters:

  • term_width (Integer) (defaults to: TW)

    force a terminal width. Makes testing far simpler.

Returns:

  • (String)

    the subcommands the command offers.



78
79
80
81
82
# File 'lib/wavefront-cli/commands/base.rb', line 78

def commands(term_width = TW)
  _commands.flatten.each_with_object("Usage:\n") do |cmd, ret|
    ret.<< '  ' + "#{CMD} #{word} #{cmd}\n".cmd_fold(term_width) + "\n"
  end + "  #{CMD} #{word} --help"
end

#common_optionsArray

Many commands have these options

Returns:

  • (Array)


23
24
25
26
# File 'lib/wavefront-cli/commands/base.rb', line 23

def common_options
  ['-E, --endpoint=URI       cluster endpoint',
   '-t, --token=TOKEN        Wavefront authentication token']
end

#docoptString

Returns a full options string which docopt understands.

Returns:

  • (String)

    a full options string which docopt understands



127
128
129
# File 'lib/wavefront-cli/commands/base.rb', line 127

def docopt
  commands + "\n\n" + options + "\n" + postscript
end

#global_optionsArray

All commands have these options

Returns:

  • (Array)


11
12
13
14
15
16
17
18
# File 'lib/wavefront-cli/commands/base.rb', line 11

def global_options
  ['-c, --config=FILE    path to configuration file',
   '-P, --profile=NAME   profile in configuration file',
   '-D, --debug          enable debug mode',
   '-n, --noop           do not perform API calls',
   '-V, --verbose        be verbose',
   '-h, --help           show this message']
end

#opt_row(opt, width, term_width = TW) ⇒ Object

Formats an option string.

Parameters:

  • opt (String)

    the option string

  • width (Integer)

    the width of the short + long options columns. This is used to indent following lines

  • term_width (Integer) (defaults to: TW)

    the width of the user’s terminal



105
106
107
108
# File 'lib/wavefront-cli/commands/base.rb', line 105

def opt_row(opt, width, term_width = TW)
  format("  %s %-#{width}s %s\n", *opt.split(/\s+/, 3))
    .opt_fold(term_width, width + 5)
end

#option_column_widthInteger

Returns the width of the column containing short and long options.

Returns:

  • (Integer)

    the width of the column containing short and long options



113
114
115
116
117
# File 'lib/wavefront-cli/commands/base.rb', line 113

def option_column_width
  (global_options + _options).flatten.map do |o|
    o.split(/\s+/, 3)[0..1].join(' ').size
  end.max
end

#options(term_width = TW) ⇒ String

Returns the options the command understands.

Parameters:

  • term_width (Integer) (defaults to: TW)

    force a terminal width. Makes testing far simpler.

Returns:

  • (String)

    the options the command understands.



89
90
91
92
93
94
95
96
# File 'lib/wavefront-cli/commands/base.rb', line 89

def options(term_width = TW)
  width = option_column_width
  ret = "Global options:\n"
  global_options.each { |o| ret.<< opt_row(o, width, term_width) }
  ret.<< "\nOptions:\n"
  _options.flatten.each { |o| ret.<< opt_row(o, width, term_width) }
  ret
end

#postscriptString

Returns which will be printed underneath the options.

Returns:

  • (String)

    which will be printed underneath the options.



121
122
123
# File 'lib/wavefront-cli/commands/base.rb', line 121

def postscript
  ''
end

#sdk_classString

Returns the name of the SDK class which does the work for this command.

Returns:

  • (String)

    the name of the SDK class which does the work for this command.



62
63
64
# File 'lib/wavefront-cli/commands/base.rb', line 62

def sdk_class
  word.capitalize
end

#sdk_fileString

Returns the name of the SDK file which does the work for this command.

Returns:

  • (String)

    the name of the SDK file which does the work for this command.



69
70
71
# File 'lib/wavefront-cli/commands/base.rb', line 69

def sdk_file
  word
end

#tag_commandsArray

Anything which takes tags provides the same interface

Returns:

  • (Array)


38
39
40
41
42
43
44
# File 'lib/wavefront-cli/commands/base.rb', line 38

def tag_commands
  ["tags #{CMN} [-f format] <id>",
   "tag set #{CMN} <id> <tag>...",
   "tag clear #{CMN} <id>",
   "tag add #{CMN} <id> <tag>",
   "tag delete #{CMN} <id> <tag>"]
end

#wordString

Returns the command keyword.

Returns:

  • (String)

    the command keyword



55
56
57
# File 'lib/wavefront-cli/commands/base.rb', line 55

def word
  self.class.name.sub(/WavefrontCommand/, '').downcase
end