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



2188
2189
2190
2191
# File 'lib/morpheus/cli/cli_command.rb', line 2188

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

#add_subcommand_alias(alias_cmd_name, cmd_name) ⇒ Object



2208
2209
2210
2211
# File 'lib/morpheus/cli/cli_command.rb', line 2208

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



2222
2223
2224
2225
# File 'lib/morpheus/cli/cli_command.rb', line 2222

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



2199
2200
2201
2202
# File 'lib/morpheus/cli/cli_command.rb', line 2199

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



2087
2088
2089
# File 'lib/morpheus/cli/cli_command.rb', line 2087

def command_description
  @command_description ||= ""
end

#command_name ⇒ Object



2061
2062
2063
2064
# File 'lib/morpheus/cli/cli_command.rb', line 2061

def command_name
  @command_name ||= default_command_name
  @command_name
end

#default_command_name ⇒ Object



2055
2056
2057
2058
2059
# File 'lib/morpheus/cli/cli_command.rb', line 2055

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



2096
2097
2098
# File 'lib/morpheus/cli/cli_command.rb', line 2096

def default_refresh_interval
  @default_refresh_interval ||= 30
end

#default_subcommand ⇒ Object



2167
2168
2169
# File 'lib/morpheus/cli/cli_command.rb', line 2167

def default_subcommand
  @default_subcommand
end

#get_subcommand_description(cmd_name) ⇒ Object



2227
2228
2229
2230
2231
2232
2233
2234
2235
# File 'lib/morpheus/cli/cli_command.rb', line 2227

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)


2183
2184
2185
2186
# File 'lib/morpheus/cli/cli_command.rb', line 2183

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



2071
2072
2073
# File 'lib/morpheus/cli/cli_command.rb', line 2071

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

#hidden_subcommands ⇒ Object



2075
2076
2077
# File 'lib/morpheus/cli/cli_command.rb', line 2075

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



2046
2047
2048
# File 'lib/morpheus/cli/cli_command.rb', line 2046

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.



2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
# File 'lib/morpheus/cli/cli_command.rb', line 2135

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



2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
# File 'lib/morpheus/cli/cli_command.rb', line 2107

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



2193
2194
2195
2196
# File 'lib/morpheus/cli/cli_command.rb', line 2193

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

#remove_subcommand_alias(alias_cmd_name) ⇒ Object



2213
2214
2215
2216
# File 'lib/morpheus/cli/cli_command.rb', line 2213

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

#set_command_description(val) ⇒ Object



2091
2092
2093
# File 'lib/morpheus/cli/cli_command.rb', line 2091

def set_command_description(val)
  @command_description = val
end

#set_command_hidden(val = true) ⇒ Object



2066
2067
2068
# File 'lib/morpheus/cli/cli_command.rb', line 2066

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

#set_command_name(cmd_name) ⇒ Object



2050
2051
2052
2053
# File 'lib/morpheus/cli/cli_command.rb', line 2050

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



2100
2101
2102
# File 'lib/morpheus/cli/cli_command.rb', line 2100

def set_default_refresh_interval(seconds)
  @default_refresh_interval = seconds
end

#set_default_subcommand(cmd) ⇒ Object



2163
2164
2165
# File 'lib/morpheus/cli/cli_command.rb', line 2163

def set_default_subcommand(cmd)
  @default_subcommand = cmd
end

#set_subcommand_descriptions(cmd_map) ⇒ Object



2237
2238
2239
2240
2241
# File 'lib/morpheus/cli/cli_command.rb', line 2237

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



2079
2080
2081
2082
2083
2084
2085
# File 'lib/morpheus/cli/cli_command.rb', line 2079

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

#subcommand_aliases ⇒ Object



2204
2205
2206
# File 'lib/morpheus/cli/cli_command.rb', line 2204

def subcommand_aliases
  @subcommand_aliases ||= {}
end

#subcommand_descriptions ⇒ Object



2218
2219
2220
# File 'lib/morpheus/cli/cli_command.rb', line 2218

def subcommand_descriptions
  @subcommand_descriptions ||= {}
end

#subcommands ⇒ Object



2171
2172
2173
# File 'lib/morpheus/cli/cli_command.rb', line 2171

def subcommands
  @subcommands ||= {}
end

#visible_subcommands ⇒ Object



2175
2176
2177
2178
2179
2180
2181
# File 'lib/morpheus/cli/cli_command.rb', line 2175

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