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:



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

def _commands
  []
end

#_optionsArray

Inheriting classes must override this method

Returns:



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

def _options
  []
end

#acl_commandsArray

Anything which takes ACLs provides the same interface

Returns:



58
59
60
61
62
63
# File 'lib/wavefront-cli/commands/base.rb', line 58

def acl_commands
  ["acls #{CMN} <id>",
   "acl #{CMN} clear <id>",
   "acl #{CMN} grant (view | modify) on <id> to <name>...",
   "acl #{CMN} revoke (view | modify) on <id> from <name>..."]
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.



104
105
106
107
108
109
110
111
112
113
114
# File 'lib/wavefront-cli/commands/base.rb', line 104

def commands(term_width = TW)
  text_arr = %w[Usage:]

  _commands.flatten.each do |cmd|
    folded = "#{CMD} #{word} #{cmd}\n".cmd_fold(term_width)
    text_arr << "  #{folded}"
  end

  text_arr << "  #{CMD} #{word} --help"
  text_arr.join("\n")
end

#common_optionsArray

Many commands have these options

Returns:



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

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

#descriptionObject



10
11
12
# File 'lib/wavefront-cli/commands/base.rb', line 10

def description
  "view and manage #{things}"
end

#docoptString

Returns a full options string which docopt understands.

Returns:

  • (String)

    a full options string which docopt understands



170
171
172
# File 'lib/wavefront-cli/commands/base.rb', line 170

def docopt
  "#{commands}\n\n#{options}\n\n#{postscript}"
end

#global_option_text(width, term_width) ⇒ Object



133
134
135
136
137
# File 'lib/wavefront-cli/commands/base.rb', line 133

def global_option_text(width, term_width)
  text_arr = ['Global options:']
  global_options.each { |o| text_arr << opt_row(o, width, term_width) }
  text_arr << ''
end

#global_optionsArray

All commands have these options

Returns:



17
18
19
20
21
22
23
24
25
26
# File 'lib/wavefront-cli/commands/base.rb', line 17

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',
   '-f, --format=STRING  output format',
   '-M, --items-only     only show items in machine-parseable formats',
   '-h, --help           show this message']
end

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

Formats an option string.

rubocop:disable Lint/FormatParameterMismatch

Parameters:

  • opt_str (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



147
148
149
150
# File 'lib/wavefront-cli/commands/base.rb', line 147

def opt_row(opt_str, width, term_width = TW)
  format("  %s %-#{width}s %s",
         *opt_str.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



156
157
158
159
160
# File 'lib/wavefront-cli/commands/base.rb', line 156

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.



120
121
122
123
124
125
126
127
128
129
130
131
# File 'lib/wavefront-cli/commands/base.rb', line 120

def options(term_width = TW)
  width = option_column_width
  text_arr = if global_options.empty?
               []
             else
               global_option_text(width, term_width)
             end

  text_arr << 'Options:'
  _options.flatten.each { |o| text_arr << opt_row(o, width, term_width) }
  text_arr.join("\n")
end

#postscriptString

Returns which will be printed underneath the options.

Returns:

  • (String)

    which will be printed underneath the options.



164
165
166
# File 'lib/wavefront-cli/commands/base.rb', line 164

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.



89
90
91
# File 'lib/wavefront-cli/commands/base.rb', line 89

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.



96
97
98
# File 'lib/wavefront-cli/commands/base.rb', line 96

def sdk_file
  word
end

#tag_commandsArray

Anything which takes tags provides the same interface

Returns:



46
47
48
49
50
51
52
53
# File 'lib/wavefront-cli/commands/base.rb', line 46

def tag_commands
  ["tags #{CMN} <id>",
   "tag set #{CMN} <id> <tag>...",
   "tag clear #{CMN} <id>",
   "tag add #{CMN} <id> <tag>",
   "tag delete #{CMN} <id> <tag>",
   "tag pathsearch #{CMN} [-al] [-o offset] [-L limit] <word>"]
end

#thingObject



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

def thing
  word
end

#thingsObject



82
83
84
# File 'lib/wavefront-cli/commands/base.rb', line 82

def things
  "#{thing}s"
end

#wordString

Returns the command keyword.

Returns:

  • (String)

    the command keyword



74
75
76
# File 'lib/wavefront-cli/commands/base.rb', line 74

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