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.
Specifies that an option is expected to have an argument
Takes a string and converts it into an array of arguments.
# File lib/rex/parser/arguments.rb, line 39 def self.from_s(str) Shellwords.shellwords(str) end
Initializes the format list with an array of formats like:
'-b' => [ false, "some text" ]
)
# File lib/rex/parser/arguments.rb, line 27 def initialize(fmt) self.fmt = fmt # I think reduce is a better name for this method, but it doesn't exist # before 1.8.7, so use the stupid inject instead. self.longest = fmt.keys.inject(0) { |max, str| max = ((max > str.length) ? max : str.length) } end
# File lib/rex/parser/arguments.rb, line 97 def arg_required?(opt) fmt[opt][0] if fmt[opt] end
# File lib/rex/parser/arguments.rb, line 93 def include?(search) return fmt.include?(search) end
Parses the supplied arguments into a set of options.
# File lib/rex/parser/arguments.rb, line 46 def parse(args, &block) skip_next = false args.each_with_index { |arg, idx| if (skip_next == true) skip_next = false next end 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 end yield fmtspec, idx, param } else yield nil, idx, arg end } end
Returns usage information for this parsing context.
# File lib/rex/parser/arguments.rb, line 79 def usage txt = "\nOPTIONS:\n\n" fmt.sort.each { |entry| fmtspec, val = entry txt << " #{fmtspec.ljust(longest)}" + ((val[0] == true) ? " <opt> " : " ") txt << val[1] + "\n" } txt << "\n" return txt end
Generated with the Darkfish Rdoc Generator 2.