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.

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

recover(argv) Instance Public methods Pushes back erred argument(s) to argv

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

new(banner = nil, width = 32, indent = ' ' * 4) Class Public methods Initializes

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

pattern() Class Public methods

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

warn(mesg = $!) Instance Public methods

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

getopts(*args) Class Public methods See

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

switch_name() Instance Public methods Main name of the switch.

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

on_tail(*opts, &block) Instance Public methods Add option switch like with

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

summarize(*args, &block) Instance Public methods Creates the summary table

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

separator(string) Instance Public methods Add separator in summary.

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

parse(arg, argv, &error) Instance Public methods Returns nil if argument

2025-01-10 15:47:30