Files
metasploit-gs/lib/rex/parser/arguments.rb
T

98 lines
1.5 KiB
Ruby
Raw Normal View History

require 'shellwords'
2005-07-10 07:15:20 +00:00
module Rex
module Parser
###
#
# This class parses arguments in a getopt style format, kind of.
# Unfortunately, the default ruby getopt implementation will only
# work on ARGV, so we can't use it.
#
###
class Arguments
#
# Specifies that an option is expected to have an argument
#
HasArgument = (1 << 0)
#
# Initializes the format list with an array of formats like:
#
# Arguments.new(
# '-b' => [ false, "some text" ]
# )
#
def initialize(fmt)
self.fmt = fmt
end
2005-07-10 07:27:50 +00:00
#
2005-11-15 05:22:13 +00:00
# Takes a string and converts it into an array of arguments.
2005-07-10 07:27:50 +00:00
#
def self.from_s(str)
Shellwords.shellwords(str)
2005-07-10 07:27:50 +00:00
end
2005-07-10 07:15:20 +00:00
#
2005-11-15 05:22:13 +00:00
# Parses the supplied arguments into a set of options.
2005-07-10 07:15:20 +00:00
#
def parse(args, &block)
2005-07-18 14:39:00 +00:00
skip_next = false
2005-07-10 07:15:20 +00:00
args.each_with_index { |arg, idx|
2005-07-18 14:39:00 +00:00
if (skip_next == true)
skip_next = false
next
end
2005-07-10 07:15:20 +00:00
if (arg.match(/^-/))
cfs = arg[0..2]
fmt.each_pair { |fmtspec, val|
next if (fmtspec != cfs)
param = nil
if (val[0])
param = args[idx+1]
skip_next = true
2005-07-10 07:15:20 +00:00
end
yield fmtspec, idx, param
}
else
yield nil, idx, arg
end
}
end
#
2005-11-15 05:22:13 +00:00
# Returns usage information for this parsing context.
2005-07-10 07:15:20 +00:00
#
def usage
txt = "\nOPTIONS:\n\n"
2005-07-11 05:25:50 +00:00
fmt.sort.each { |entry|
fmtspec, val = entry
txt << " #{fmtspec}" + ((val[0] == true) ? " <opt> " : " ")
txt << val[1] + "\n"
2005-07-10 07:15:20 +00:00
}
txt << "\n"
2005-07-10 07:15:20 +00:00
return txt
end
2009-02-17 04:53:06 +00:00
def include?(search)
return fmt.include?(search)
end
2005-07-10 07:15:20 +00:00
2005-11-15 05:22:13 +00:00
attr_accessor :fmt # :nodoc:
2005-07-10 07:15:20 +00:00
end
end
2009-02-17 04:53:06 +00:00
end