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



2190
2191
2192
2193
# File 'lib/morpheus/cli/cli_command.rb', line 2190

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

#add_subcommand_alias(alias_cmd_name, cmd_name) ⇒ Object



2210
2211
2212
2213
# File 'lib/morpheus/cli/cli_command.rb', line 2210

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



2224
2225
2226
2227
# File 'lib/morpheus/cli/cli_command.rb', line 2224

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



2201
2202
2203
2204
# File 'lib/morpheus/cli/cli_command.rb', line 2201

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



2089
2090
2091
# File 'lib/morpheus/cli/cli_command.rb', line 2089

def command_description
  @command_description ||= ""
end

#command_name ⇒ Object



2063
2064
2065
2066
# File 'lib/morpheus/cli/cli_command.rb', line 2063

def command_name
  @command_name ||= default_command_name
  @command_name
end

#default_command_name ⇒ Object



2057
2058
2059
2060
2061
# File 'lib/morpheus/cli/cli_command.rb', line 2057

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



2098
2099
2100
# File 'lib/morpheus/cli/cli_command.rb', line 2098

def default_refresh_interval
  @default_refresh_interval ||= 30
end

#default_subcommand ⇒ Object



2169
2170
2171
# File 'lib/morpheus/cli/cli_command.rb', line 2169

def default_subcommand
  @default_subcommand
end

#get_subcommand_description(cmd_name) ⇒ Object



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

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)


2185
2186
2187
2188
# File 'lib/morpheus/cli/cli_command.rb', line 2185

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



2073
2074
2075
# File 'lib/morpheus/cli/cli_command.rb', line 2073

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

#hidden_subcommands ⇒ Object



2077
2078
2079
# File 'lib/morpheus/cli/cli_command.rb', line 2077

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



2048
2049
2050
# File 'lib/morpheus/cli/cli_command.rb', line 2048

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.



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
2162
2163
# File 'lib/morpheus/cli/cli_command.rb', line 2137

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



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

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



2195
2196
2197
2198
# File 'lib/morpheus/cli/cli_command.rb', line 2195

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

#remove_subcommand_alias(alias_cmd_name) ⇒ Object



2215
2216
2217
2218
# File 'lib/morpheus/cli/cli_command.rb', line 2215

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

#set_command_description(val) ⇒ Object



2093
2094
2095
# File 'lib/morpheus/cli/cli_command.rb', line 2093

def set_command_description(val)
  @command_description = val
end

#set_command_hidden(val = true) ⇒ Object



2068
2069
2070
# File 'lib/morpheus/cli/cli_command.rb', line 2068

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

#set_command_name(cmd_name) ⇒ Object



2052
2053
2054
2055
# File 'lib/morpheus/cli/cli_command.rb', line 2052

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



2102
2103
2104
# File 'lib/morpheus/cli/cli_command.rb', line 2102

def set_default_refresh_interval(seconds)
  @default_refresh_interval = seconds
end

#set_default_subcommand(cmd) ⇒ Object



2165
2166
2167
# File 'lib/morpheus/cli/cli_command.rb', line 2165

def set_default_subcommand(cmd)
  @default_subcommand = cmd
end

#set_subcommand_descriptions(cmd_map) ⇒ Object



2239
2240
2241
2242
2243
# File 'lib/morpheus/cli/cli_command.rb', line 2239

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



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

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

#subcommand_aliases ⇒ Object



2206
2207
2208
# File 'lib/morpheus/cli/cli_command.rb', line 2206

def subcommand_aliases
  @subcommand_aliases ||= {}
end

#subcommand_descriptions ⇒ Object



2220
2221
2222
# File 'lib/morpheus/cli/cli_command.rb', line 2220

def subcommand_descriptions
  @subcommand_descriptions ||= {}
end

#subcommands ⇒ Object



2173
2174
2175
# File 'lib/morpheus/cli/cli_command.rb', line 2173

def subcommands
  @subcommands ||= {}
end

#visible_subcommands ⇒ Object



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

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