Module: Trollop

Defined in:
lib/amp/dependencies/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.13"
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?


701
702
703
704
705
706
707
708
709
# File 'lib/amp/dependencies/trollop.rb', line 701

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(args = ARGV, *a, &b) ⇒ Object

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

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

The returned block contains a value for every option specified with opt. The value will be the value given on the commandline, or the default value if the option was not specified on the commandline. For every option specified on the commandline, a key “<option name>_given” will also be set in the hash.

Example:

require 'trollop'
opts = Trollop::options do
  opt :monkey, "Use monkey mode"                     # a flag --monkey, defaulting to false
  opt :goat, "Use goat mode", :default => true       # a flag --goat, defaulting to true
  opt :num_limbs, "Number of limbs", :default => 4   # an integer --num-limbs <i>, defaulting to 4
  opt :num_thumbs, "Number of thumbs", :type => :int # an integer --num-thumbs <i>, defaulting to nil
end

## if called with no arguments
p opts # => { :monkey => false, :goat => true, :num_limbs => 4, :num_thumbs => nil }

## if called with --monkey
p opts # => {:monkey_given=>true, :monkey=>true, :goat=>true, :num_limbs=>4, :help=>false, :num_thumbs=>nil}

See more examples at trollop.rubyforge.org.



663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
# File 'lib/amp/dependencies/trollop.rb', line 663

def options args = ARGV, *a, &b
  @p = Parser.new(*a, &b)
  begin
    vals = @p.parse args
    args.clear
    @p.leftovers.each { |l| args << l }
    [vals, @p]
  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