Module: Morpheus::Cli::CliCommand::ClassMethods

Defined in:
lib/morpheus/cli/cli_command.rb

Instance Method Summary collapse

Instance Method Details

#add_subcommand(cmd_name, method) ⇒ Object



1435
1436
1437
1438
# File 'lib/morpheus/cli/cli_command.rb', line 1435

def add_subcommand(cmd_name, method)
  @subcommands ||= {}
  @subcommands[cmd_name.to_s] = method
end

#add_subcommand_alias(alias_cmd_name, cmd_name) ⇒ Object



1455
1456
1457
1458
# File 'lib/morpheus/cli/cli_command.rb', line 1455

def add_subcommand_alias(alias_cmd_name, cmd_name)
  @subcommand_aliases ||= {}
  @subcommand_aliases[alias_cmd_name.to_s] = cmd_name
end

#add_subcommand_description(cmd_name, description) ⇒ Object



1469
1470
1471
1472
# File 'lib/morpheus/cli/cli_command.rb', line 1469

def add_subcommand_description(cmd_name, description)
  @subcommand_descriptions ||= {}
  @subcommand_descriptions[cmd_name.to_s.gsub('_', '-')] = description
end

#alias_subcommand(alias_cmd_name, cmd_name) ⇒ Object

register an alias for a command



1446
1447
1448
1449
# File 'lib/morpheus/cli/cli_command.rb', line 1446

def alias_subcommand(alias_cmd_name, cmd_name)
  add_subcommand_alias(alias_cmd_name.to_s, cmd_name.to_s.gsub('_', '-'))
  return
end

#command_description ⇒ Object



1331
1332
1333
# File 'lib/morpheus/cli/cli_command.rb', line 1331

def command_description
  @command_description
end

#command_name ⇒ Object



1309
1310
1311
1312
# File 'lib/morpheus/cli/cli_command.rb', line 1309

def command_name
  @command_name ||= default_command_name
  @command_name
end

#default_command_name ⇒ Object



1303
1304
1305
1306
1307
# File 'lib/morpheus/cli/cli_command.rb', line 1303

def default_command_name
  class_name = self.name.split('::')[-1]
  #class_name.sub!(/Command$/, '')
  Morpheus::Cli::CliRegistry.cli_ize(class_name)
end

#default_refresh_interval ⇒ Object

alias :command_description= :set_command_description



1340
1341
1342
# File 'lib/morpheus/cli/cli_command.rb', line 1340

def default_refresh_interval
  @default_refresh_interval ||= 30
end

#default_subcommand ⇒ Object



1411
1412
1413
# File 'lib/morpheus/cli/cli_command.rb', line 1411

def default_subcommand
  @default_subcommand
end

#get_subcommand_description(cmd_name) ⇒ Object



1474
1475
1476
1477
1478
1479
1480
1481
1482
# File 'lib/morpheus/cli/cli_command.rb', line 1474

def get_subcommand_description(cmd_name)
  desc = subcommand_descriptions[cmd_name.to_s.gsub('_', '-')]
  if desc
    return desc
  else
    cmd_method = subcommands.key(cmd_name)
    return cmd_method ? subcommand_descriptions[cmd_method.to_s.gsub('_', '-')] : nil
  end
end

#has_subcommand?(cmd_name) ⇒ Boolean

Returns:

  • (Boolean)


1430
1431
1432
1433
# File 'lib/morpheus/cli/cli_command.rb', line 1430

def has_subcommand?(cmd_name)
  return false if cmd_name.empty?
  @subcommands && @subcommands[cmd_name.to_s]
end

#hidden_command ⇒ Object

alias :command_name= :set_command_name



1319
1320
1321
# File 'lib/morpheus/cli/cli_command.rb', line 1319

def hidden_command
  !!@hidden_command
end

#register_subcommand(*args) ⇒ Object

this might be the new hotness register_subcommand(:show) # do not do this, always define a description! register_subcommand(:list, "List things") register_subcommand("update-all", "update_all", "Update all things") If the command name =~ method, no need to pass both command names will have "-" swapped in for "_" and vice versa for method names.



1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
# File 'lib/morpheus/cli/cli_command.rb', line 1379

def register_subcommand(*args)
  args = args.flatten
  cmd_name = args[0]
  cmd_method = nil
  cmd_desc = nil
  if args.count == 1
    cmd_method = cmd_name
  elsif args.count == 2
    if args[1].is_a?(Symbol)
      cmd_method = args[1]
    else
      cmd_method = cmd_name
      cmd_desc = args[1]
    end
  elsif args.count == 3
    cmd_method = args[1]
    cmd_desc = args[2]
  else
    raise Morpheus::Cli::CliRegistry::BadCommandDefinition.new("register_subcommand expects 1-3 arguments, got #{args.size} #{args.inspect}")
  end
  cmd_name = cmd_name.to_s.gsub("_", "-").to_sym
  cmd_method = (cmd_method || cmd_name).to_s.gsub("-", "_").to_sym
  cmd_definition = {(cmd_name) => cmd_method}
  register_subcommands(cmd_definition)
  add_subcommand_description(cmd_name, cmd_desc)
  return
end

#register_subcommands(*cmds) ⇒ Object

construct map of command name => instance method



1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
# File 'lib/morpheus/cli/cli_command.rb', line 1351

def register_subcommands(*cmds)
  @subcommands ||= {}
  cmds.flatten.each {|cmd| 
    if cmd.is_a?(Hash)
      cmd.each {|k,v| 
        # @subcommands[k] = v
        add_subcommand(k.to_s, v.to_s)
      }
    elsif cmd.is_a?(Array) 
      cmd.each {|it| register_subcommands(it) }
    elsif cmd.is_a?(String) || cmd.is_a?(Symbol)
      #k = Morpheus::Cli::CliRegistry.cli_ize(cmd)
      k = cmd.to_s.gsub('_', '-')
      v = cmd.to_s.gsub('-', '_')
      register_subcommands({(k) => v})
    else
      raise Morpheus::Cli::CliRegistry::BadCommandDefinition.new("Unable to register command of type: #{cmd.class} #{cmd}")
    end
  }
  return
end

#remove_subcommand(cmd_name) ⇒ Object



1440
1441
1442
1443
# File 'lib/morpheus/cli/cli_command.rb', line 1440

def remove_subcommand(cmd_name)
  @subcommands ||= {}
  @subcommands.delete(cmd_name.to_s)
end

#remove_subcommand_alias(alias_cmd_name) ⇒ Object



1460
1461
1462
1463
# File 'lib/morpheus/cli/cli_command.rb', line 1460

def remove_subcommand_alias(alias_cmd_name)
  @subcommand_aliases ||= {}
  @subcommand_aliases.delete(alias_cmd_name.to_s)
end

#set_command_description(val) ⇒ Object



1335
1336
1337
# File 'lib/morpheus/cli/cli_command.rb', line 1335

def set_command_description(val)
  @command_description = val
end

#set_command_hidden(val = true) ⇒ Object



1314
1315
1316
# File 'lib/morpheus/cli/cli_command.rb', line 1314

def set_command_hidden(val=true)
  @hidden_command = val
end

#set_command_name(cmd_name) ⇒ Object



1298
1299
1300
1301
# File 'lib/morpheus/cli/cli_command.rb', line 1298

def set_command_name(cmd_name)
  @command_name = cmd_name
  Morpheus::Cli::CliRegistry.add(self, self.command_name)
end

#set_default_refresh_interval(seconds) ⇒ Object



1344
1345
1346
# File 'lib/morpheus/cli/cli_command.rb', line 1344

def set_default_refresh_interval(seconds)
  @default_refresh_interval = seconds
end

#set_default_subcommand(cmd) ⇒ Object



1407
1408
1409
# File 'lib/morpheus/cli/cli_command.rb', line 1407

def set_default_subcommand(cmd)
  @default_subcommand = cmd
end

#set_subcommand_descriptions(cmd_map) ⇒ Object



1484
1485
1486
1487
1488
# File 'lib/morpheus/cli/cli_command.rb', line 1484

def set_subcommand_descriptions(cmd_map)
  cmd_map.each do |cmd_name, description|
    add_subcommand_description(cmd_name, description)
  end
end

#set_subcommands_hidden(*cmds) ⇒ Object



1323
1324
1325
1326
1327
1328
1329
# File 'lib/morpheus/cli/cli_command.rb', line 1323

def set_subcommands_hidden(*cmds)
  @hidden_subcommands ||= []
  cmds.flatten.each do |cmd|
    @hidden_subcommands << cmd.to_sym
  end
  @hidden_subcommands
end

#subcommand_aliases ⇒ Object



1451
1452
1453
# File 'lib/morpheus/cli/cli_command.rb', line 1451

def subcommand_aliases
  @subcommand_aliases ||= {}
end

#subcommand_descriptions ⇒ Object



1465
1466
1467
# File 'lib/morpheus/cli/cli_command.rb', line 1465

def subcommand_descriptions
  @subcommand_descriptions ||= {}
end

#subcommands ⇒ Object



1415
1416
1417
# File 'lib/morpheus/cli/cli_command.rb', line 1415

def subcommands
  @subcommands ||= {}
end

#visible_subcommands ⇒ Object



1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
# File 'lib/morpheus/cli/cli_command.rb', line 1419

def visible_subcommands
  cmds = subcommands.clone
  if @hidden_subcommands && !@hidden_subcommands.empty?
    @hidden_subcommands.each do |hidden_cmd|
      cmds.delete(hidden_cmd.to_s)
      cmds.delete(hidden_cmd.to_sym)
    end
  end
  cmds
end