class Argvector

Argvector

Argvector provides a very simple means of parsing command line arguments.

Unlike other more complex libs this provides only the most basic and standard parsing functionality. In many cases that's all one really needs.

Usage is straight foward. Simply instantiate the class and query it for the particular "views" of the command line you want.

cargs = Argvector.new("-a foo -b=2")

cargs.parameters    #=> [['foo'],{'a'=>true,'b'=>'2'}]
cargs.flags         #=> ['a']
cargs.preoptions    #=> {'a'=>true}
cargs.preflags      #=> ['a']
cargs.subcommand    #=> ['foo',{'b'=>'2'}]

Attributes

argv[R]
arity[R]
line[R]

Public Class Methods

new(line=nil, arity=nil) click to toggle source

Takes the command line string (or array) and options. Options have flags and end with a hash of option arity.

# File lib/more/facets/argvector.rb, line 81
def initialize(line=nil, arity=nil)
  @line, @argv  = parse_line(line)
  @arity = parse_arity(arity||{})
  parse
end
parameters(*args) click to toggle source
# File lib/more/facets/argvector.rb, line 67
def self.parameters(*args)
  new.parameters(*args)
end

Public Instance Methods

arguments() click to toggle source

deprecate alias ?

Alias for: operands
flags() click to toggle source

Return flags, which are true options.

# File lib/more/facets/argvector.rb, line 113
def flags
  f = []
  @options.each do |k, v|
    if TrueClass===v or FalseClass===v  # not that it's ever false
      f << k
    end
  end
  return f
end
operands() click to toggle source

Returns operand array.

# File lib/more/facets/argvector.rb, line 91
def operands
  @operands
end
Also aliased as: arguments
options() click to toggle source

Returns options hash.

# File lib/more/facets/argvector.rb, line 100
def options
  @options
end
parameters() click to toggle source

Returns [operands, options], which is good for plugging directly into a method.

# File lib/more/facets/argvector.rb, line 107
def parameters
  return @operands, @options
end
parameters_without_duplicates() click to toggle source

Like parameters but without allowing for duplicate options.

# File lib/more/facets/argvector.rb, line 188
def parameters_without_duplicates
  opts = {}
  @options.each do |k,v|
    if Array===v
      opts[k] = v[0]
    else
      opts[k] =  v
    end
  end
  return @operands, opts
end
preflags() click to toggle source

Same as flags but only returns flags in the preoptions.

# File lib/more/facets/argvector.rb, line 175
def preflags
  preopts, remainder = *parse_preoptions(argv)
  f = []
  preopts.each do |k, v|
    if TrueClass===v or FalseClass===v  # not that it's ever false
      f << k
    end
  end
  return f
end
preoptions() click to toggle source

Returns a hash of options that occur before the first operand. This works well with subcommand to get the main command's options.

line = "--trace stamp --file VERSION"
cargs = Argvector.new(line)
opts = cargs.preoptions
opts #=> {"trace"=>true}
# File lib/more/facets/argvector.rb, line 167
def preoptions
  preopts, remainder = *parse_preoptions(argv)
  return preopts
end
subcommand() click to toggle source
subcommand_with_arguments() click to toggle source

Assumes the first operand is a "subcommand" and returns it and the argments following it as another Arguments object.

TODO: This probably should be called 'subcommand'.

# File lib/more/facets/argvector.rb, line 151
def subcommand_with_arguments
  opts, args = *parse_preoptions(argv)
  cmd = args.shift
  subargs = self.class.new(args, @arity)
  return cmd, subargs
end
subcommand_with_parameters() click to toggle source

Assumes the first operand is a "subcommand" and returns it and the argments following it as parameters.

# File lib/more/facets/argvector.rb, line 127
def subcommand_with_parameters
  opts, args = *parse_preoptions(argv)
  cmd = args.shift
  subargs = self.class.new(args, @arity)
  return [cmd, *subargs.parameters]
end
Also aliased as: subcommand
subcommand_with_preoptions() click to toggle source
# File lib/more/facets/argvector.rb, line 137
def subcommand_with_preoptions
  pre, args = *parse_preoptions(argv)
  cmd = args.shift
  subargs = self.class.new(args, @arity)
  args, opts = *subargs.parameters
  return [cmd, args, pre.merge(opts)]
end