Module: Ramaze::Bin::Runner

Defined in:
lib/ramaze/bin/runner.rb

Overview

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:

Since:

Constant Summary

Commands =

Since:

  • 21-07-2011

{
  :create  => Ramaze::Bin::Create,
}
<<-TXT.strip
Ramaze is a simple, light and modular open-source web application
framework written in Ruby.

Usage:
  ramaze [COMMAND] [OPTIONS]

Example:
  ramaze create blog
TXT

Class Method Summary (collapse)

Class Method Details

+ (Array) commands_info

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.

Returns:

  • (Array)

Author:

  • Yorick Peterse

Since:

  • 21-07-2011



101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# 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

+ (Object) run(argv = ARGV)

Runs a particular command based on the specified array.

Examples:

Ramaze::Bin::Runner.run(ARGV)
Ramaze::Bin::Runner.run(['start', '--help'])

Parameters:

  • argv (Array) (defaults to: ARGV)

    An array containing command line arguments, set to ARGV by default.

Author:

  • Yorick Peterse

Since:

  • 21-07-2011



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# 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