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



1938
1939
1940
1941
# File 'lib/morpheus/cli/cli_command.rb', line 1938

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

#add_subcommand_alias(alias_cmd_name, cmd_name) ⇒ Object



1958
1959
1960
1961
# File 'lib/morpheus/cli/cli_command.rb', line 1958

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



1972
1973
1974
1975
# File 'lib/morpheus/cli/cli_command.rb', line 1972

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



1949
1950
1951
1952
# File 'lib/morpheus/cli/cli_command.rb', line 1949

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



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

def command_description
  @command_description ||= ""
end

#command_name ⇒ Object



1811
1812
1813
1814
# File 'lib/morpheus/cli/cli_command.rb', line 1811

def command_name
  @command_name ||= default_command_name
  @command_name
end

#default_command_name ⇒ Object



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

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



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

def default_refresh_interval
  @default_refresh_interval ||= 30
end

#default_subcommand ⇒ Object



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

def default_subcommand
  @default_subcommand
end

#get_subcommand_description(cmd_name) ⇒ Object



1977
1978
1979
1980
1981
1982
1983
1984
1985
# File 'lib/morpheus/cli/cli_command.rb', line 1977

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)


1933
1934
1935
1936
# File 'lib/morpheus/cli/cli_command.rb', line 1933

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



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

def hidden_command
  defined?(@hidden_command) && @hidden_command == true
end

#hidden_subcommands ⇒ Object



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

def hidden_subcommands
  @hidden_subcommands ||= []
end

#prog_name ⇒ Object

attr_writer :command_name, :command_description, :hidden_command, :default_refresh_interval, :subcommands, :hidden_subcommands, :default_subcommand, :subcommand_aliases, :subcommand_descriptions



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

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.



1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
# File 'lib/morpheus/cli/cli_command.rb', line 1885

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



1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
# File 'lib/morpheus/cli/cli_command.rb', line 1857

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



1943
1944
1945
1946
# File 'lib/morpheus/cli/cli_command.rb', line 1943

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

#remove_subcommand_alias(alias_cmd_name) ⇒ Object



1963
1964
1965
1966
# File 'lib/morpheus/cli/cli_command.rb', line 1963

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

#set_command_description(val) ⇒ Object



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

def set_command_description(val)
  @command_description = val
end

#set_command_hidden(val = true) ⇒ Object



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

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

#set_command_name(cmd_name) ⇒ Object



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

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



1850
1851
1852
# File 'lib/morpheus/cli/cli_command.rb', line 1850

def set_default_refresh_interval(seconds)
  @default_refresh_interval = seconds
end

#set_default_subcommand(cmd) ⇒ Object



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

def set_default_subcommand(cmd)
  @default_subcommand = cmd
end

#set_subcommand_descriptions(cmd_map) ⇒ Object



1987
1988
1989
1990
1991
# File 'lib/morpheus/cli/cli_command.rb', line 1987

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



1829
1830
1831
1832
1833
1834
1835
# File 'lib/morpheus/cli/cli_command.rb', line 1829

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

#subcommand_aliases ⇒ Object



1954
1955
1956
# File 'lib/morpheus/cli/cli_command.rb', line 1954

def subcommand_aliases
  @subcommand_aliases ||= {}
end

#subcommand_descriptions ⇒ Object



1968
1969
1970
# File 'lib/morpheus/cli/cli_command.rb', line 1968

def subcommand_descriptions
  @subcommand_descriptions ||= {}
end

#subcommands ⇒ Object



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

def subcommands
  @subcommands ||= {}
end

#visible_subcommands ⇒ Object



1925
1926
1927
1928
1929
1930
1931
# File 'lib/morpheus/cli/cli_command.rb', line 1925

def visible_subcommands
  cmds = subcommands.clone
  hidden_subcommands.each do |hidden_cmd|
    cmds.delete(hidden_cmd.to_s.gsub('_', '-'))
  end
  cmds
end