Type:
Class
Constants:
SPLAT_PROC : proc {|*a| a.length <= 1 ? a.first : a}
DecimalInteger : /\A[-+]?#{decimal}\z/io

Decimal integer format, to be converted to Integer.

OctalInteger : /\A[-+]?(?:[0-7]+(?:_[0-7]+)*|0(?:#{binary}|#{hex}))\z/io

Ruby/C like octal/hexadecimal/binary integer format, to be converted to Integer.

DecimalNumeric : floatpat # decimal integer is allowed as float also.

Decimal integer/float number format, to be converted to Integer for integer format, Float for float format.

OptionParser

Introduction

OptionParser is a class for command-line option analysis. It is much more advanced, yet also easier to use, than GetoptLong, and is a more Ruby-oriented solution.

Features

  1. The argument specification and the code to handle it are written in the same place.

  2. It can output an option summary; you don't need to maintain this string separately.

  3. Optional and mandatory arguments are specified very gracefully.

  4. Arguments can be automatically converted to a specified class.

  5. Arguments can be restricted to a certain set.

All of these features are demonstrated in the examples below. See make_switch for full documentation.

Minimal example

1
2
3
4
5
6
7
8
9
10
11
12
13
require 'optparse'
 
options = {}
OptionParser.new do |opts|
  opts.banner = "Usage: example.rb [options]"
 
  opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
    options[:verbose] = v
  end
end.parse!
 
p options
p ARGV

Complete example

The following example is a complete Ruby program. You can run it and see the effect of specifying various options. This is probably the best way to learn the features of optparse.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
require 'optparse'
require 'optparse/time'
require 'ostruct'
require 'pp'
 
class OptparseExample
 
  CODES = %w[iso-2022-jp shift_jis euc-jp utf8 binary]
  CODE_ALIASES = { "jis" => "iso-2022-jp", "sjis" => "shift_jis" }
 
  #
  # Return a structure describing the options.
  #
  def self.parse(args)
    # The options specified on the command line will be collected in *options*.
    # We set default values here.
    options = OpenStruct.new
    options.library = []
    options.inplace = false
    options.encoding = "utf8"
    options.transfer_type = :auto
    options.verbose = false
 
    opt_parser = OptionParser.new do |opts|
      opts.banner = "Usage: example.rb [options]"
 
      opts.separator ""
      opts.separator "Specific options:"
 
      # Mandatory argument.
      opts.on("-r", "--require LIBRARY",
              "Require the LIBRARY before executing your script") do |lib|
        options.library << lib
      end
 
      # Optional argument; multi-line description.
      opts.on("-i", "--inplace [EXTENSION]",
              "Edit ARGV files in place",
              "  (make backup if EXTENSION supplied)") do |ext|
        options.inplace = true
        options.extension = ext || ''
        options.extension.sub!(/\A\.?(?=.)/, "."# Ensure extension begins with dot.
      end
 
      # Cast 'delay' argument to a Float.
      opts.on("--delay N", Float, "Delay N seconds before executing") do |n|
        options.delay = n
      end
 
      # Cast 'time' argument to a Time object.
      opts.on("-t", "--time [TIME]", Time, "Begin execution at given time") do |time|
        options.time = time
      end
 
      # Cast to octal integer.
      opts.on("-F", "--irs [OCTAL]", OptionParser::OctalInteger,
              "Specify record separator (default \\0)") do |rs|
        options.record_separator = rs
      end
 
      # List of arguments.
      opts.on("--list x,y,z", Array, "Example 'list' of arguments") do |list|
        options.list = list
      end
 
      # Keyword completion.  We are specifying a specific set of arguments (CODES
      # and CODE_ALIASES - notice the latter is a Hash), and the user may provide
      # the shortest unambiguous text.
      code_list = (CODE_ALIASES.keys + CODES).join(',')
      opts.on("--code CODE", CODES, CODE_ALIASES, "Select encoding",
              "  (#{code_list})") do |encoding|
        options.encoding = encoding
      end
 
      # Optional argument with keyword completion.
      opts.on("--type [TYPE]", [:text, :binary, :auto],
              "Select transfer type (text, binary, auto)") do |t|
        options.transfer_type = t
      end
 
      # Boolean switch.
      opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
        options.verbose = v
      end
 
      opts.separator ""
      opts.separator "Common options:"
 
      # No argument, shows at tail.  This will print an options summary.
      # Try it and see!
      opts.on_tail("-h", "--help", "Show this message") do
        puts opts
        exit
      end
 
      # Another typical switch to print the version.
      opts.on_tail("--version", "Show version") do
        puts OptionParser::Version.join('.')
        exit
      end
    end
 
    opt_parser.parse!(args)
    options
  end  # parse()
 
end  # class OptparseExample
 
options = OptparseExample.parse(ARGV)
pp options
pp ARGV

Shell Completion

For modern shells (e.g. bash, zsh, etc.), you can use shell completion for command line options.

Further documentation

The above examples should be enough to learn how to use this class. If you have any questions, file a ticket at bugs.ruby-lang.org.

inspect
  • References/Ruby on Rails/Ruby/Classes/OptionParser/OptionParser::ParseError

inspect() Instance Public methods

2025-01-10 15:47:30
candidate
  • References/Ruby on Rails/Ruby/Classes/OptionParser

candidate(word) Instance Public methods

2025-01-10 15:47:30
parse
  • References/Ruby on Rails/Ruby/Classes/OptionParser/OptionParser::Switch/OptionParser::Switch::NoArgument

parse(arg, argv) Instance Public methods Raises an exception if any arguments

2025-01-10 15:47:30
help
  • References/Ruby on Rails/Ruby/Classes/OptionParser

help() Instance Public methods Returns option summary string.

2025-01-10 15:47:30
new
  • References/Ruby on Rails/Ruby/Classes/OptionParser/OptionParser::List

new() Class Public methods Just initializes all instance variables.

2025-01-10 15:47:30
inc 2
  • References/Ruby on Rails/Ruby/Classes/OptionParser

inc(*args) Instance Public methods

2025-01-10 15:47:30
ac_arg_with
  • References/Ruby on Rails/Ruby/Classes/OptionParser/OptionParser::AC

ac_arg_with(name, help_string, &block) Instance Public methods

2025-01-10 15:47:30
summarize
  • References/Ruby on Rails/Ruby/Classes/OptionParser

summarize(to = [], width = @summary_width, max = width - 1, indent = @summary_indent, &blk) Instance Public methods

2025-01-10 15:47:30
convert
  • References/Ruby on Rails/Ruby/Classes/OptionParser/OptionParser::Completion

convert(opt = nil, val = nil, *) Instance Public methods

2025-01-10 15:47:30
prepend
  • References/Ruby on Rails/Ruby/Classes/OptionParser/OptionParser::List

prepend(*args) Instance Public methods Inserts switch at the head

2025-01-10 15:47:30