module Ramaze::Bin::Runner
Module used for running a particular command based on the specified command line arguments.
Usage:
ramaze --help # Shows a help message ramaze -h # Shows a help message as well ramaze -v # Shows the version of Ramaze ramaze [COMMAND] # Runs [COMMAND]
@author Yorick Peterse @since 21-07-2011
Constants
- Banner
- Commands
Public Class Methods
commands_info()
click to toggle source
Generates an array of “rows” where each row contains the name and description of a command. The descriptions of all commands are aligned based on the length of the longest command name.
@author Yorick Peterse @since 21-07-2011 @return [Array]
# File lib/ramaze/bin/runner.rb, line 101 def self.commands_info cmds = [] longest = Commands.map { |name, klass| name.to_s }.sort[0].size Commands.each do |name, klass| name = name.to_s desc = '' # Try to extract the command description if klass.respond_to?(:const_defined?) and klass.const_defined?(:Description) desc = klass.const_get(:Description) end # Align the description based on the length of the name while name.size <= longest do name += ' ' end cmds.push(["#{name} #{desc}"]) end return cmds end
run(argv=ARGV)
click to toggle source
Runs a particular command based on the specified array.
@example
Ramaze::Bin::Runner.run(ARGV) Ramaze::Bin::Runner.run(['start', '--help'])
@author Yorick Peterse @since 21-07-2011 @param [Array] argv An array containing command line arguments, set to
ARGV by default.
# File lib/ramaze/bin/runner.rb, line 52 def self.run(argv=ARGV) op = OptionParser.new do |opt| opt.banner = Banner opt.summary_indent = ' ' opt.separator "\nCommands:\n #{commands_info.join("\n ")}" # Show all the common options opt.separator "\nOptions:\n" # Show the version of Ramaze opt.on('-v', '--version', 'Shows the version of Ramaze') do puts Ramaze::VERSION exit end opt.on('-h', '--help', 'Shows this help message') do puts op exit end end op.order!(argv) # Show a help message if no command has been specified if !argv[0] puts op.to_s exit end cmd = argv.delete_at(0).to_sym if Commands.key?(cmd) cmd = Commands[cmd].new cmd.run(argv) else abort 'The specified command is invalid' end end