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



1896
1897
1898
1899
# File 'lib/morpheus/cli/cli_command.rb', line 1896

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

#add_subcommand_alias(alias_cmd_name, cmd_name) ⇒ Object



1916
1917
1918
1919
# File 'lib/morpheus/cli/cli_command.rb', line 1916

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



1930
1931
1932
1933
# File 'lib/morpheus/cli/cli_command.rb', line 1930

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



1907
1908
1909
1910
# File 'lib/morpheus/cli/cli_command.rb', line 1907

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



1793
1794
1795
# File 'lib/morpheus/cli/cli_command.rb', line 1793

def command_description
  @command_description
end

#command_name ⇒ Object



1771
1772
1773
1774
# File 'lib/morpheus/cli/cli_command.rb', line 1771

def command_name
  @command_name ||= default_command_name
  @command_name
end

#default_command_name ⇒ Object



1765
1766
1767
1768
1769
# File 'lib/morpheus/cli/cli_command.rb', line 1765

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



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

def default_refresh_interval
  @default_refresh_interval ||= 30
end

#default_subcommand ⇒ Object



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

def default_subcommand
  @default_subcommand
end

#get_subcommand_description(cmd_name) ⇒ Object



1935
1936
1937
1938
1939
1940
1941
1942
1943
# File 'lib/morpheus/cli/cli_command.rb', line 1935

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)


1891
1892
1893
1894
# File 'lib/morpheus/cli/cli_command.rb', line 1891

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



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

def hidden_command
  !!@hidden_command
end

#prog_name ⇒ Object



1756
1757
1758
# File 'lib/morpheus/cli/cli_command.rb', line 1756

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.



1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
# File 'lib/morpheus/cli/cli_command.rb', line 1841

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



1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
# File 'lib/morpheus/cli/cli_command.rb', line 1813

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



1901
1902
1903
1904
# File 'lib/morpheus/cli/cli_command.rb', line 1901

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

#remove_subcommand_alias(alias_cmd_name) ⇒ Object



1921
1922
1923
1924
# File 'lib/morpheus/cli/cli_command.rb', line 1921

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

#set_command_description(val) ⇒ Object



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

def set_command_description(val)
  @command_description = val
end

#set_command_hidden(val = true) ⇒ Object



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

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

#set_command_name(cmd_name) ⇒ Object



1760
1761
1762
1763
# File 'lib/morpheus/cli/cli_command.rb', line 1760

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



1806
1807
1808
# File 'lib/morpheus/cli/cli_command.rb', line 1806

def set_default_refresh_interval(seconds)
  @default_refresh_interval = seconds
end

#set_default_subcommand(cmd) ⇒ Object



1869
1870
1871
# File 'lib/morpheus/cli/cli_command.rb', line 1869

def set_default_subcommand(cmd)
  @default_subcommand = cmd
end

#set_subcommand_descriptions(cmd_map) ⇒ Object



1945
1946
1947
1948
1949
# File 'lib/morpheus/cli/cli_command.rb', line 1945

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



1785
1786
1787
1788
1789
1790
1791
# File 'lib/morpheus/cli/cli_command.rb', line 1785

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

#subcommand_aliases ⇒ Object



1912
1913
1914
# File 'lib/morpheus/cli/cli_command.rb', line 1912

def subcommand_aliases
  @subcommand_aliases ||= {}
end

#subcommand_descriptions ⇒ Object



1926
1927
1928
# File 'lib/morpheus/cli/cli_command.rb', line 1926

def subcommand_descriptions
  @subcommand_descriptions ||= {}
end

#subcommands ⇒ Object



1877
1878
1879
# File 'lib/morpheus/cli/cli_command.rb', line 1877

def subcommands
  @subcommands ||= {}
end

#visible_subcommands ⇒ Object



1881
1882
1883
1884
1885
1886
1887
1888
1889
# File 'lib/morpheus/cli/cli_command.rb', line 1881

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