Class: Rex::Parser::Arguments
- Inherits:
-
Object
- Object
- Rex::Parser::Arguments
- Defined in:
- lib/rex/parser/arguments.rb
Overview
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.
Defined Under Namespace
Classes: UnitTest
Constant Summary collapse
- HasArgument =
Specifies that an option is expected to have an argument
(1 << 0)
Instance Attribute Summary collapse
-
#fmt ⇒ Object
:nodoc:.
Class Method Summary collapse
-
.from_s(str) ⇒ Object
Takes a string and converts it into an array of arguments.
Instance Method Summary collapse
- #include?(search) ⇒ Boolean
-
#initialize(fmt) ⇒ Arguments
constructor
Initializes the format list with an array of formats like:.
-
#parse(args, &block) ⇒ Object
Parses the supplied arguments into a set of options.
-
#usage ⇒ Object
Returns usage information for this parsing context.
Constructor Details
#initialize(fmt) ⇒ Arguments
Initializes the format list with an array of formats like:
Arguments.new(
'-b' => [ false, "some text" ]
)
27 28 29 |
# File 'lib/rex/parser/arguments.rb', line 27 def initialize(fmt) self.fmt = fmt end |
Instance Attribute Details
#fmt ⇒ Object
:nodoc:
92 93 94 |
# File 'lib/rex/parser/arguments.rb', line 92 def fmt @fmt end |
Class Method Details
.from_s(str) ⇒ Object
Takes a string and converts it into an array of arguments.
34 35 36 |
# File 'lib/rex/parser/arguments.rb', line 34 def self.from_s(str) Shellwords.shellwords(str) end |
Instance Method Details
#include?(search) ⇒ Boolean
88 89 90 |
# File 'lib/rex/parser/arguments.rb', line 88 def include?(search) return fmt.include?(search) end |
#parse(args, &block) ⇒ Object
Parses the supplied arguments into a set of options.
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/rex/parser/arguments.rb', line 41 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 |
#usage ⇒ Object
Returns usage information for this parsing context.
74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/rex/parser/arguments.rb', line 74 def usage txt = "\nOPTIONS:\n\n" fmt.sort.each { |entry| fmtspec, val = entry txt << " #{fmtspec}" + ((val[0] == true) ? " <opt> " : " ") txt << val[1] + "\n" } txt << "\n" return txt end |