Module: Trollop

Defined in:
lib/trollop.rb

Overview

lib/trollop.rb – trollop command-line processing library

Author

William Morgan (mailto: [email protected])

Copyright

Copyright 2007 William Morgan

License

GNU GPL version 2

Defined Under Namespace

Classes: CommandlineError, HelpNeeded, Parser, VersionNeeded

Constant Summary collapse

VERSION =
"1.8.2"
FLOAT_RE =

Regex for floating point numbers

/^-?((\d+(\.\d+)?)|(\.\d+))$/
PARAM_RE =

Regex for parameters

/^-(-|\.$|[^\d\.])/

Class Method Summary collapse

Class Method Details

.die(arg, msg = nil) ⇒ Object

Informs the user that their usage of ‘arg’ was wrong, as detailed by ‘msg’, and dies. Example:

options do
  opt :volume, :default => 0.0
end

die :volume, "too loud" if opts[:volume] > 10.0
die :volume, "too soft" if opts[:volume] < 0.1

In the one-argument case, simply print that message, a notice about -h, and die. Example:

options do
  opt :whatever # ...
end

Trollop::die "need at least one filename" if ARGV.empty?


478
479
480
481
482
483
484
485
486
# File 'lib/trollop.rb', line 478

def die arg, msg=nil
  if msg
    $stderr.puts "Error: argument --#{@p.specs[arg][:long]} #{msg}."
  else
    $stderr.puts "Error: #{arg}."
  end
  $stderr.puts "Try --help for help."
  exit(-1)
end

.options(*a, &b) ⇒ Object

The top-level entry method into Trollop. Creates a Parser object, passes the block to it, then parses ARGV with it, handling any errors or requests for help or version information appropriately (and then exiting). Modifies ARGV in place. Returns a hash of option values.

The block passed in should contain one or more calls to #opt (Parser#opt), one or more calls to text (Parser#text), and probably a call to version (Parser#version).

See the synopsis in README.txt for examples.



440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
# File 'lib/trollop.rb', line 440

def options *a, &b
  @p = Parser.new(*a, &b)
  begin
    vals = @p.parse ARGV
    ARGV.clear
    @p.leftovers.each { |l| ARGV << l }
    vals
  rescue CommandlineError => e
    $stderr.puts "Error: #{e.message}."
    $stderr.puts "Try --help for help."
    exit(-1)
  rescue HelpNeeded
    @p.educate
    exit
  rescue VersionNeeded
    puts @p.version
    exit
  end
end