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



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

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

#add_subcommand_alias(alias_cmd_name, cmd_name) ⇒ Object



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

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



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

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



1940
1941
1942
1943
# File 'lib/morpheus/cli/cli_command.rb', line 1940

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



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

def command_description
  @command_description ||= ""
end

#command_name ⇒ Object



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

def command_name
  @command_name ||= default_command_name
  @command_name
end

#default_command_name ⇒ Object



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

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



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

def default_refresh_interval
  @default_refresh_interval ||= 30
end

#default_subcommand ⇒ Object



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

def default_subcommand
  @default_subcommand
end

#get_subcommand_description(cmd_name) ⇒ Object



1968
1969
1970
1971
1972
1973
1974
1975
1976
# File 'lib/morpheus/cli/cli_command.rb', line 1968

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)


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

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



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

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

#hidden_subcommands ⇒ Object



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

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



1787
1788
1789
# File 'lib/morpheus/cli/cli_command.rb', line 1787

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.



1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
# File 'lib/morpheus/cli/cli_command.rb', line 1876

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



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

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



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

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

#remove_subcommand_alias(alias_cmd_name) ⇒ Object



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

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

#set_command_description(val) ⇒ Object



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

def set_command_description(val)
  @command_description = val
end

#set_command_hidden(val = true) ⇒ Object



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

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

#set_command_name(cmd_name) ⇒ Object



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

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



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

def set_default_refresh_interval(seconds)
  @default_refresh_interval = seconds
end

#set_default_subcommand(cmd) ⇒ Object



1904
1905
1906
# File 'lib/morpheus/cli/cli_command.rb', line 1904

def set_default_subcommand(cmd)
  @default_subcommand = cmd
end

#set_subcommand_descriptions(cmd_map) ⇒ Object



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

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



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

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

#subcommand_aliases ⇒ Object



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

def subcommand_aliases
  @subcommand_aliases ||= {}
end

#subcommand_descriptions ⇒ Object



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

def subcommand_descriptions
  @subcommand_descriptions ||= {}
end

#subcommands ⇒ Object



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

def subcommands
  @subcommands ||= {}
end

#visible_subcommands ⇒ Object



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

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