Skip to content

Embed URL

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Simple option parser
class ParseOpt
attr_writer :usage
class Option
attr_reader :short, :long, :help
def initialize(short, long, help, &block)
@block = block
@short = short
@long = long
@help = help
end
def call(v)
@block.call(v)
end
end
def initialize
@list = {}
end
def on(short = nil, long = nil, help: nil, &block)
opt = Option.new(short, long, help, &block)
@list[short] = opt if short
@list[long] = opt if long
end
def parse
if ARGV.member?('-h') or ARGV.member?('--help')
usage
exit 0
end
seen_dash = false
ARGV.delete_if do |cur|
opt = val = nil
next false if cur[0] != '-' or seen_dash
case cur
when '--'
seen_dash = true
next true
when /^--no-(.+)$/
opt = @list[$1]
val = false
when /^-([^-])(.+)?$/, /^--(.+?)(?:=(.+))?$/
opt = @list[$1]
val = $2 || true
end
if opt
opt.call(val)
true
else
usage
exit 1
end
end
end
def usage
def fmt(prefix, str)
return str ? prefix + str : nil
end
puts 'usage: %s' % @usage
@list.values.uniq.each do |opt|
s = ' '
s << ''
s << [fmt('-', opt.short), fmt('--', opt.long)].compact.join(', ')
s << ''
s << '%*s%s' % [26 - s.size, '', opt.help] if opt.help
puts s
end
end
end
$str = "default"
$num = 0
$bool = false
opts = ParseOpt.new
opts.usage = "git foo"
opts.on("b", "bool", help: "Boolean") do |v|
$bool = v
end
opts.on("s", "string", help: "String") do |v|
$str = v
end
opts.on("n", "number", help: "Number") do |v|
$num = v.to_i
end
opts.parse
@skyeagle

Really nice and usefull. Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.