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



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

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

#add_subcommand_alias(alias_cmd_name, cmd_name) ⇒ Object



1842
1843
1844
1845
# File 'lib/morpheus/cli/cli_command.rb', line 1842

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



1856
1857
1858
1859
# File 'lib/morpheus/cli/cli_command.rb', line 1856

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



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

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



1719
1720
1721
# File 'lib/morpheus/cli/cli_command.rb', line 1719

def command_description
  @command_description
end

#command_nameObject



1697
1698
1699
1700
# File 'lib/morpheus/cli/cli_command.rb', line 1697

def command_name
  @command_name ||= default_command_name
  @command_name
end

#default_command_nameObject



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

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_intervalObject

alias :command_description= :set_command_description



1728
1729
1730
# File 'lib/morpheus/cli/cli_command.rb', line 1728

def default_refresh_interval
  @default_refresh_interval ||= 30
end

#default_subcommandObject



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

def default_subcommand
  @default_subcommand
end

#get_subcommand_description(cmd_name) ⇒ Object



1861
1862
1863
1864
1865
1866
1867
1868
1869
# File 'lib/morpheus/cli/cli_command.rb', line 1861

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)


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

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



1707
1708
1709
# File 'lib/morpheus/cli/cli_command.rb', line 1707

def hidden_command
  !!@hidden_command
end

#prog_nameObject



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

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.



1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
# File 'lib/morpheus/cli/cli_command.rb', line 1767

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



1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
# File 'lib/morpheus/cli/cli_command.rb', line 1739

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



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

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

#remove_subcommand_alias(alias_cmd_name) ⇒ Object



1847
1848
1849
1850
# File 'lib/morpheus/cli/cli_command.rb', line 1847

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

#set_command_description(val) ⇒ Object



1723
1724
1725
# File 'lib/morpheus/cli/cli_command.rb', line 1723

def set_command_description(val)
  @command_description = val
end

#set_command_hidden(val = true) ⇒ Object



1702
1703
1704
# File 'lib/morpheus/cli/cli_command.rb', line 1702

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

#set_command_name(cmd_name) ⇒ Object



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

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



1732
1733
1734
# File 'lib/morpheus/cli/cli_command.rb', line 1732

def set_default_refresh_interval(seconds)
  @default_refresh_interval = seconds
end

#set_default_subcommand(cmd) ⇒ Object



1795
1796
1797
# File 'lib/morpheus/cli/cli_command.rb', line 1795

def set_default_subcommand(cmd)
  @default_subcommand = cmd
end

#set_subcommand_descriptions(cmd_map) ⇒ Object



1871
1872
1873
1874
1875
# File 'lib/morpheus/cli/cli_command.rb', line 1871

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



1711
1712
1713
1714
1715
1716
1717
# File 'lib/morpheus/cli/cli_command.rb', line 1711

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

#subcommand_aliasesObject



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

def subcommand_aliases
  @subcommand_aliases ||= {}
end

#subcommand_descriptionsObject



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

def subcommand_descriptions
  @subcommand_descriptions ||= {}
end

#subcommandsObject



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

def subcommands
  @subcommands ||= {}
end

#visible_subcommandsObject



1807
1808
1809
1810
1811
1812
1813
1814
1815
# File 'lib/morpheus/cli/cli_command.rb', line 1807

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