#!/usr/bin/env ruby # # Generates code for a command line application # # Usage: generate # class MainClass attr_accessor :name, :outfile, :opts def initialize @opts = [] end def add_opt(name,takes_argument,description) @opts << Opt.new(name,takes_argument,description) end end class Opt attr_accessor :name,:takes_argument,:description def initialize(name,takes_argument,description) @name = name @takes_argument = takes_argument @description = description end end class Generate attr_writer :verbose def initialize @verbose = false end def start(args) begin validate_args args rescue Exception => e STDERR.puts e print_help return end v = MainClass.new puts "Please enter the following infomation or type \'q\' to quit...\n\n" # class name v.name = make_classname(args.empty? ? prompt('classname') : args.shift) # output file v.outfile = make_filename(prompt('outfile or \'stdout\'',make_filename(v.name))) # options while true pre = 'option #' + (v.opts.length+1).to_s + ' ' name = prompt pre + 'name (blank for none)' break if !name || name == '' takes_arg = make_boolean(prompt(pre + 'takes argument [y/N]')) description = prompt pre + 'description' v.add_opt name,takes_arg,description end # output file output_make_class v end def print_help STDERR.puts 'Usage: ' + File.basename(__FILE__) + "