class BaseApp
Attributes
status[RW]
Public Class Methods
main()
click to toggle source
# File lib/base_app.rb, line 114 def self.main app = self.new app.parse_command_line_options if app.help $stderr.print app.help_text exit app.status end max_width = app.command_line_arguments.map {|x| x[1].length}.max if app.verbose $stderr.puts "#$0 Parameters:" app.command_line_arguments.each do |opt_spec| short, arg, descr = opt_spec option = arg.gsub(/=.?$/,'').gsub('-','_') $stderr.printf( " %*s : %s\n", max_width, arg.gsub(/=.?$/,''), app.send(option.to_sym)) end $stderr.puts "" end app.run exit app.status end
new()
click to toggle source
# File lib/base_app.rb, line 7 def initialize @status = 0 @options = {} @required_opts = [] end
Public Instance Methods
command_line_arguments()
click to toggle source
# File lib/base_app.rb, line 13 def command_line_arguments [['v','verbose','Be more verbose.'], ['h', 'help', 'Request help.']] end
construct_opts()
click to toggle source
# File lib/base_app.rb, line 18 def construct_opts opts = OptionParser.new do |opts| command_line_arguments.each do |argspec| short, long, description, required, default_value = argspec param_name, param_type = long.split '=' @required_opts << param_name if required @options[param_name] = default_value if default_value create_getter_setter(long) param_required = long.index("=") ? " VAL" : "" opts.on("-#{short}", "--#{long}#{param_name}", description) do |val| @options[param_name] = val setter = param_name.gsub("-", "_") + "=" self.send(setter,val) end end end end
create_getter_setter(name)
click to toggle source
# File lib/base_app.rb, line 36 def create_getter_setter(name) name = name.gsub("-", "_").gsub(/=.?/, "") self.class.send(:attr_accessor, name) unless self.respond_to?(name) end
exists?(file)
click to toggle source
file util helpers
# File lib/base_app.rb, line 52 def exists? file File.exists? file end
get_template(template_name)
click to toggle source
# File lib/base_app.rb, line 78 def get_template(template_name) unless @templates @templates = {} template_data = DATA.read template_data.scan(/(__.+?__.+?__.+?__)/m).each do |template| template = template[0] template =~ /^(__.+?__)$/m name = $1 template.gsub! /^__.+?__$/m, '' @templates[name] = template end end @templates["__#{template_name.to_s.upcase}__"] or raise "Error: no template named: #{template_name} (#{@templates.keys.join(", ")})" end
help_text()
click to toggle source
# File lib/base_app.rb, line 64 def help_text text = help_text_firstline command_line_arguments.each do |argspec| short, long, description, required, default_value = argspec short_text = (long =~ /=/) ? "#{short}=s" : short text << sprintf(" -%-3s | --%-20s %s%s\n", short_text, long, description, (required ? "(required)" : "")) end text end
help_text_firstline()
click to toggle source
# File lib/base_app.rb, line 60 def help_text_firstline "#$0: \n" end
mkdir(dir)
click to toggle source
# File lib/base_app.rb, line 56 def mkdir dir FileUtils.mkdir(dir) unless exists?(dir) end
parse_command_line_options()
click to toggle source
# File lib/base_app.rb, line 41 def parse_command_line_options opts = construct_opts opts.parse! @required_opts.each do |name| unless @options[name] raise "Error, required argument '#{name}' must be supplied." end end end
process_template(template_name, additional_properties={} )
click to toggle source
# File lib/base_app.rb, line 94 def process_template (template_name, additional_properties={} ) template = get_template template_name @properties.merge(additional_properties).each do |prop,val| term = "{{#{prop}}}" printf "substituting: %-40s => %s\n", term, val template.gsub! term, val end template end
process_template_to_file(name,target,props={})
click to toggle source
# File lib/base_app.rb, line 74 def process_template_to_file(name,target,props={}) write_file(target, process_template(name,target,props)) end
write_file(target,*content)
click to toggle source
# File lib/base_app.rb, line 106 def write_file(target,*content) File.open(target,'w') do |f| content.each do |c| f.puts c.to_s end end end