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



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

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

#add_subcommand_alias(alias_cmd_name, cmd_name) ⇒ Object



1506
1507
1508
1509
# File 'lib/morpheus/cli/cli_command.rb', line 1506

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



1520
1521
1522
1523
# File 'lib/morpheus/cli/cli_command.rb', line 1520

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



1497
1498
1499
1500
# File 'lib/morpheus/cli/cli_command.rb', line 1497

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

#command_descriptionObject



1382
1383
1384
# File 'lib/morpheus/cli/cli_command.rb', line 1382

def command_description
  @command_description
end

#command_nameObject



1360
1361
1362
1363
# File 'lib/morpheus/cli/cli_command.rb', line 1360

def command_name
  @command_name ||= default_command_name
  @command_name
end

#default_command_nameObject



1354
1355
1356
1357
1358
# File 'lib/morpheus/cli/cli_command.rb', line 1354

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

#default_refresh_intervalObject

alias :command_description= :set_command_description



1391
1392
1393
# File 'lib/morpheus/cli/cli_command.rb', line 1391

def default_refresh_interval
  @default_refresh_interval ||= 30
end

#default_subcommandObject



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

def default_subcommand
  @default_subcommand
end

#get_subcommand_description(cmd_name) ⇒ Object



1525
1526
1527
1528
1529
1530
1531
1532
1533
# File 'lib/morpheus/cli/cli_command.rb', line 1525

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



1481
1482
1483
1484
# File 'lib/morpheus/cli/cli_command.rb', line 1481

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

#hidden_commandObject

alias :command_name= :set_command_name



1370
1371
1372
# File 'lib/morpheus/cli/cli_command.rb', line 1370

def hidden_command
  !!@hidden_command
end

#prog_nameObject



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

def prog_name
  "morpheus"
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.



1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
# File 'lib/morpheus/cli/cli_command.rb', line 1430

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



1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
# File 'lib/morpheus/cli/cli_command.rb', line 1402

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



1491
1492
1493
1494
# File 'lib/morpheus/cli/cli_command.rb', line 1491

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

#remove_subcommand_alias(alias_cmd_name) ⇒ Object



1511
1512
1513
1514
# File 'lib/morpheus/cli/cli_command.rb', line 1511

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

#set_command_description(val) ⇒ Object



1386
1387
1388
# File 'lib/morpheus/cli/cli_command.rb', line 1386

def set_command_description(val)
  @command_description = val
end

#set_command_hidden(val = true) ⇒ Object



1365
1366
1367
# File 'lib/morpheus/cli/cli_command.rb', line 1365

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

#set_command_name(cmd_name) ⇒ Object



1349
1350
1351
1352
# File 'lib/morpheus/cli/cli_command.rb', line 1349

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



1395
1396
1397
# File 'lib/morpheus/cli/cli_command.rb', line 1395

def set_default_refresh_interval(seconds)
  @default_refresh_interval = seconds
end

#set_default_subcommand(cmd) ⇒ Object



1458
1459
1460
# File 'lib/morpheus/cli/cli_command.rb', line 1458

def set_default_subcommand(cmd)
  @default_subcommand = cmd
end

#set_subcommand_descriptions(cmd_map) ⇒ Object



1535
1536
1537
1538
1539
# File 'lib/morpheus/cli/cli_command.rb', line 1535

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



1374
1375
1376
1377
1378
1379
1380
# File 'lib/morpheus/cli/cli_command.rb', line 1374

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

#subcommand_aliasesObject



1502
1503
1504
# File 'lib/morpheus/cli/cli_command.rb', line 1502

def subcommand_aliases
  @subcommand_aliases ||= {}
end

#subcommand_descriptionsObject



1516
1517
1518
# File 'lib/morpheus/cli/cli_command.rb', line 1516

def subcommand_descriptions
  @subcommand_descriptions ||= {}
end

#subcommandsObject



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

def subcommands
  @subcommands ||= {}
end

#visible_subcommandsObject



1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
# File 'lib/morpheus/cli/cli_command.rb', line 1470

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