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



1803
1804
1805
1806
# File 'lib/morpheus/cli/cli_command.rb', line 1803

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

#add_subcommand_alias(alias_cmd_name, cmd_name) ⇒ Object



1823
1824
1825
1826
# File 'lib/morpheus/cli/cli_command.rb', line 1823

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



1837
1838
1839
1840
# File 'lib/morpheus/cli/cli_command.rb', line 1837

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



1814
1815
1816
1817
# File 'lib/morpheus/cli/cli_command.rb', line 1814

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



1700
1701
1702
# File 'lib/morpheus/cli/cli_command.rb', line 1700

def command_description
  @command_description
end

#command_name ⇒ Object



1678
1679
1680
1681
# File 'lib/morpheus/cli/cli_command.rb', line 1678

def command_name
  @command_name ||= default_command_name
  @command_name
end

#default_command_name ⇒ Object



1672
1673
1674
1675
1676
# File 'lib/morpheus/cli/cli_command.rb', line 1672

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

#default_refresh_interval ⇒ Object

alias :command_description= :set_command_description



1709
1710
1711
# File 'lib/morpheus/cli/cli_command.rb', line 1709

def default_refresh_interval
  @default_refresh_interval ||= 30
end

#default_subcommand ⇒ Object



1780
1781
1782
# File 'lib/morpheus/cli/cli_command.rb', line 1780

def default_subcommand
  @default_subcommand
end

#get_subcommand_description(cmd_name) ⇒ Object



1842
1843
1844
1845
1846
1847
1848
1849
1850
# File 'lib/morpheus/cli/cli_command.rb', line 1842

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)


1798
1799
1800
1801
# File 'lib/morpheus/cli/cli_command.rb', line 1798

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



1688
1689
1690
# File 'lib/morpheus/cli/cli_command.rb', line 1688

def hidden_command
  !!@hidden_command
end

#prog_name ⇒ Object



1663
1664
1665
# File 'lib/morpheus/cli/cli_command.rb', line 1663

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.



1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
# File 'lib/morpheus/cli/cli_command.rb', line 1748

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



1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
# File 'lib/morpheus/cli/cli_command.rb', line 1720

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



1808
1809
1810
1811
# File 'lib/morpheus/cli/cli_command.rb', line 1808

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

#remove_subcommand_alias(alias_cmd_name) ⇒ Object



1828
1829
1830
1831
# File 'lib/morpheus/cli/cli_command.rb', line 1828

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

#set_command_description(val) ⇒ Object



1704
1705
1706
# File 'lib/morpheus/cli/cli_command.rb', line 1704

def set_command_description(val)
  @command_description = val
end

#set_command_hidden(val = true) ⇒ Object



1683
1684
1685
# File 'lib/morpheus/cli/cli_command.rb', line 1683

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

#set_command_name(cmd_name) ⇒ Object



1667
1668
1669
1670
# File 'lib/morpheus/cli/cli_command.rb', line 1667

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

#set_default_refresh_interval(seconds) ⇒ Object



1713
1714
1715
# File 'lib/morpheus/cli/cli_command.rb', line 1713

def set_default_refresh_interval(seconds)
  @default_refresh_interval = seconds
end

#set_default_subcommand(cmd) ⇒ Object



1776
1777
1778
# File 'lib/morpheus/cli/cli_command.rb', line 1776

def set_default_subcommand(cmd)
  @default_subcommand = cmd
end

#set_subcommand_descriptions(cmd_map) ⇒ Object



1852
1853
1854
1855
1856
# File 'lib/morpheus/cli/cli_command.rb', line 1852

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



1692
1693
1694
1695
1696
1697
1698
# File 'lib/morpheus/cli/cli_command.rb', line 1692

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

#subcommand_aliases ⇒ Object



1819
1820
1821
# File 'lib/morpheus/cli/cli_command.rb', line 1819

def subcommand_aliases
  @subcommand_aliases ||= {}
end

#subcommand_descriptions ⇒ Object



1833
1834
1835
# File 'lib/morpheus/cli/cli_command.rb', line 1833

def subcommand_descriptions
  @subcommand_descriptions ||= {}
end

#subcommands ⇒ Object



1784
1785
1786
# File 'lib/morpheus/cli/cli_command.rb', line 1784

def subcommands
  @subcommands ||= {}
end

#visible_subcommands ⇒ Object



1788
1789
1790
1791
1792
1793
1794
1795
1796
# File 'lib/morpheus/cli/cli_command.rb', line 1788

def visible_subcommands
  cmds = subcommands.clone
  if @hidden_subcommands && !@hidden_subcommands.empty?
    @hidden_subcommands.each do |hidden_cmd|
      cmds.delete(hidden_cmd.to_s.gsub('_', '-'))
    end
  end
  cmds
end