Class: Magellan::Cli::Base

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

Class Method Summary collapse

Class Method Details

.command_help(shell, command_name) ⇒ Object

override Thor.command_help



250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
# File 'lib/magellan/cli/base.rb', line 250

def command_help(shell, command_name)
  meth = normalize_command_name(command_name)
  command = all_commands[meth]
  handle_no_command_error(meth) unless command

  shell.say "Usage:"
  shell.say "  #{banner(command)}"
  shell.say
  class_options_help(shell, nil => command.options.map { |_, o| o })
  if command.long_description
    shell.say "Description:"
    shell.print_wrapped(command.long_description, :indent => 2)
  else
    shell.say command.description
  end
end

.help(shell, subcommand = false) ⇒ Object

overwrite Thor.help method



236
237
238
239
240
241
242
243
244
245
246
247
# File 'lib/magellan/cli/base.rb', line 236

def help(shell, subcommand = false)
  update_common_help_message
  if defined?(@package_name) && @package_name
    shell.say "#{@package_name} commands:"
  else
    shell.say "Commands:"
  end

  shell.print_table(sorted_printable_commands(true, subcommand), :indent => 2, :truncate => true)
  shell.say
  class_options_help(shell)
end

.log_error(msg) ⇒ Object



181
182
183
# File 'lib/magellan/cli/base.rb', line 181

def log_error(msg)
  puts_with_color(31, msg)
end

.log_info(msg) ⇒ Object



172
173
174
# File 'lib/magellan/cli/base.rb', line 172

def log_info(msg)
  puts_with_color(0, msg)
end

.log_success(msg) ⇒ Object



178
179
180
# File 'lib/magellan/cli/base.rb', line 178

def log_success(msg)
  puts_with_color(32, msg)
end

.log_verbose(msg, flag = true) ⇒ Object



169
170
171
# File 'lib/magellan/cli/base.rb', line 169

def log_verbose(msg, flag = true)
  puts_with_color(34, msg) if flag
end

.log_warning(msg) ⇒ Object



175
176
177
# File 'lib/magellan/cli/base.rb', line 175

def log_warning(msg)
  puts_with_color(33, msg)
end

.puts_with_color(color_no, msg) ⇒ Object



165
166
167
# File 'lib/magellan/cli/base.rb', line 165

def puts_with_color(color_no, msg)
  $stderr.puts("\e[#{color_no}m#{msg}\e[0m")
end

.sorted_commands(all = true) ⇒ Object



185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
# File 'lib/magellan/cli/base.rb', line 185

def sorted_commands(all = true)
  cmd_hash = all_commands.dup
  Thor::Util.thor_classes_in(self).each do |klass|
    cmd_hash.update(klass.commands)
  end
  if order = self.const_get(:COMMAND_ORDER) rescue nil
    result = order.map{|i| cmd_hash[i]}
    result += (cmd_hash.keys - order).map{|i| cmd_hash[i]}
  else
    result = cmd_hash.values
  end
  if idx = result.index{|cmd| cmd.name == "help" }
    h = result.delete_at(idx)
    result << h
  end
  return result
end

.sorted_printable_commands(all = true, subcommand = false) ⇒ Object



203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
# File 'lib/magellan/cli/base.rb', line 203

def sorted_printable_commands(all = true, subcommand = false)
  list = printable_commands(all, subcommand)
  Thor::Util.thor_classes_in(self).each do |klass|
    list += klass.printable_commands(false)
  end
  order = self.const_get(:COMMAND_ORDER) rescue nil
  if order
    orig = list
    list = order.map do |ptn|
      idx = orig.index{|t| t.first =~ /\b#{ptn}\b/}
      raise "#{ptn} not found" unless idx
      orig.delete_at(idx)
    end
    list += orig # add items not in COMMAND_ORDER
  end
  # # don't sort in alphabetical order
  # list.sort! { |a, b| a[0] <=> b[0] }

  # move help to the end of list
  if idx = list.index{|t| t.first =~ /\bhelp\b/ }
    h = list.delete_at(idx)
    list << h
  end
  return list
end

.update_common_help_messageObject



229
230
231
232
233
# File 'lib/magellan/cli/base.rb', line 229

def update_common_help_message
  if cmd = all_commands["help"]
    cmd.description = I18n.t(:help, scope: [:base, :cmd])
  end
end