Sha256: b2d3dbd73ac06eede5ed76fdb7916db05eaae279f0881b806558ca597d31e986
Contents?: true
Size: 1.64 KB
Versions: 2
Compression:
Stored size: 1.64 KB
Contents
class Rack::App::CLI::Command require 'optparse' class << self def optparse_options @options_parser_options ||= [] end def description(message = nil) @description = message unless message.nil? @description || '' end alias desc description def option(*args, &block) optparse_options << {:args => args, :block => block} end alias on option def action(&block) define_method(:action, &block) end end attr_reader :name def initialize(name) @name = name.to_s @option_parser = OptionParser.new attach_definitions! update_banner! end def help_message @option_parser.help end def description self.class.description end def start(argv) @option_parser.parse!(argv) action(*argv) rescue ArgumentError => ex $stderr.puts(ex.message) end def action(*argv) end protected def attach_definitions! self.class.optparse_options.each do |h| @option_parser.on(*h[:args]) do |*args| instance_exec(*args,&h[:block]) end end end def update_banner! banner = @option_parser.banner banner.sub!('[options]', "#{@name} [options]") # [[:req, :a], [:opt, :b], [:rest, :c], [:keyreq, :d], [:keyrest, :e]] (method(:action).parameters rescue []).each do |type, keyword| case type when :req banner.concat(" <#{keyword}>") when :opt banner.concat(" [<#{keyword}>]") when :rest, :keyrest banner.concat(" [<#{keyword}> <#{keyword}> ...]") end end banner.concat("\n\n") banner.concat(description) banner.concat("\n\n") end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
rack-app-3.1.0 | lib/rack/app/cli/command.rb |
rack-app-3.0.0 | lib/rack/app/cli/command.rb |