Class: Mongrel::Command::Registry

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/mongrel/command.rb

Overview

A Singleton class that manages all of the available commands and handles running them.

Instance Method Summary collapse

Instance Method Details

#commandsObject

Builds a list of possible commands from the Command derivates list


148
149
150
151
152
# File 'lib/mongrel/command.rb', line 148

def commands
  pmgr = GemPlugin::Manager.instance
  list = pmgr.plugins["/commands"].keys
  return list.sort
end

Prints a list of available commands.


155
156
157
158
159
160
161
162
163
164
165
166
167
168
# File 'lib/mongrel/command.rb', line 155

def print_command_list
  puts "#{Mongrel::Command::BANNER}\nAvailable commands are:\n\n"

  self.commands.each do |name|
    if /mongrel::/ =~ name
      name = name[9 .. -1]
    end

    puts " - #{name[1 .. -1]}\n"
  end

  puts "\nEach command takes -h as an option to get help."

end

#run(args) ⇒ Object

Runs the args against the first argument as the command name. If it has any errors it returns a false, otherwise it return true.


173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
# File 'lib/mongrel/command.rb', line 173

def run(args)
  # find the command
  cmd_name = args.shift

  if !cmd_name or cmd_name == "?" or cmd_name == "help"
    print_command_list
    return true
  elsif cmd_name == "--version"
    puts "Mongrel Web Server #{Mongrel::Const::MONGREL_VERSION}"
    return true
  end

  begin
    # quick hack so that existing commands will keep working but the Mongrel:: ones can be moved
    if ["start", "stop", "restart"].include? cmd_name
      cmd_name = "mongrel::" + cmd_name
    end

    command = GemPlugin::Manager.instance.create("/commands/#{cmd_name}", :argv => args)
  rescue OptionParser::InvalidOption
    STDERR.puts "#$! for command '#{cmd_name}'"
    STDERR.puts "Try #{cmd_name} -h to get help."
    return false
  rescue
    STDERR.puts "ERROR RUNNING '#{cmd_name}': #$!"
    STDERR.puts "Use help command to get help"
    return false
  end

  # Normally the command is NOT valid right after being created
  # but sometimes (like with -h or -v) there's no further processing
  # needed so the command is already valid so we can skip it.
  if not command.done_validating
    if not command.validate
      STDERR.puts "#{cmd_name} reported an error. Use mongrel_rails #{cmd_name} -h to get help."
      return false
    else
      command.run
    end
  end

  return true
end