def parse(args)
@opt_parser = OptionParser.new do |opts|
opts.banner = "Usage: #{APP_NAME} [options] command"
opts.separator ""
opts.separator "Common options:"
opts.on("-b", "--brief", "Generate compact diagram",
" (no attributes nor methods)") do |b|
self.brief = b
end
opts.on("-e", "--exclude file1[,fileN]", Array, "Exclude given files") do |list|
self.exclude = list
end
opts.on("-i", "--inheritance", "Include inheritance relations") do |i|
self.inheritance = i
end
opts.on("-l", "--label", "Add a label with diagram information",
" (type, date, migration, version)") do |l|
self.label = l
end
opts.on("-o", "--output FILE", "Write diagram to file FILE") do |f|
self.output = f
end
opts.on("-r", "--root PATH", "Set PATH as the application root") do |r|
self.root = r
end
opts.on("-v", "--verbose", "Enable verbose output",
" (produce messages to STDOUT)") do |v|
self.verbose = v
end
opts.on("-x", "--xmi", "Produce XMI instead of DOT",
" (for UML tools)") do |x|
self.xmi = x
end
opts.separator ""
opts.separator "Models diagram options:"
opts.on("-a", "--all", "Include all models",
" (not only ActiveRecord::Base derived)") do |a|
self.all = a
end
opts.on("--hide-magic", "Hide magic field names") do |h|
self.hide_magic = h
end
opts.on("--hide-types", "Hide attributes type") do |h|
self.hide_types = h
end
opts.on("-j", "--join", "Concentrate edges") do |j|
self.join = j
end
opts.on("-m", "--modules", "Include modules") do |m|
self.modules = m
end
opts.on("-p", "--plugins-models", "Include plugins models") do |p|
self.plugins_models = p
end
opts.on("-t", "--transitive", "Include transitive associations",
"(through inheritance)") do |t|
self.transitive = t
end
opts.separator ""
opts.separator "Controllers diagram options:"
opts.on("--hide-public", "Hide public methods") do |h|
self.hide_public = h
end
opts.on("--hide-protected", "Hide protected methods") do |h|
self.hide_protected = h
end
opts.on("--hide-private", "Hide private methods") do |h|
self.hide_private = h
end
opts.separator ""
opts.separator "Other options:"
opts.on("-h", "--help", "Show this message") do
STDOUT.print "#{opts}\n"
exit
end
opts.on("--version", "Show version and copyright") do
STDOUT.print "#{APP_HUMAN_NAME} version #{APP_VERSION.join('.')}\n\n" +
"#{COPYRIGHT}\nThis is free software; see the source " +
"for copying conditions.\n\n"
exit
end
opts.separator ""
opts.separator "Commands (you must supply one of these):"
opts.on("-M", "--models", "Generate models diagram") do |c|
if self.command != ''
STDERR.print "Error: Can only generate one diagram type\n\n"
exit 1
else
self.command = 'models'
end
end
opts.on("-C", "--controllers", "Generate controllers diagram") do |c|
if self.command != ''
STDERR.print "Error: Can only generate one diagram type\n\n"
exit 1
else
self.command = 'controllers'
end
end
opts.on("-A", "--aasm", "Generate \"acts as state machine\" diagram") do |c|
if self.command == 'controllers'
STDERR.print "Error: Can only generate one diagram type\n\n"
exit 1
else
self.command = 'aasm'
end
end
opts.separator ""
opts.separator "For bug reporting and additional information, please see:"
opts.separator "http://railroad.rubyforge.org/"
end
begin
@opt_parser.parse!(args)
rescue OptionParser::AmbiguousOption
option_error "Ambiguous option"
rescue OptionParser::InvalidOption
option_error "Invalid option"
rescue OptionParser::InvalidArgument
option_error "Invalid argument"
rescue OptionParser::MissingArgument
option_error "Missing argument"
end
end