Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 20 additions & 2 deletions doc/optparse/argument_converters.rdoc
Original file line number Diff line number Diff line change
Expand Up @@ -345,8 +345,14 @@ Executions:
=== Custom Argument Converters

You can create custom argument converters.
To create a custom converter, call OptionParser#accept with a class argument,
along with a block that converts the argument and returns the converted value.
To create a custom converter, call OptionParser#accept with:

- An identifier, which may be any object.
- An optional match pattern, which defaults to <tt>/.*/m</tt>.
- A block that accepts the argument and returns the converted value.

This custom converter accepts any argument and converts it,
if possible, to a \Complex object.

:include: ruby/custom_converter.rb

Expand All @@ -360,3 +366,15 @@ Executions:
[(1+2i), Complex]
$ ruby custom_converter.rb --complex 0.3-0.5i
[(0.3-0.5i), Complex]

This custom converter accepts any 1-word argument
and capitalizes it, if possible.

:include: ruby/match_converter.rb

Executions:

$ ruby match_converter.rb --capitalize foo
["Foo", String]
$ ruby match_converter.rb --capitalize "foo bar"
match_converter.rb:9:in `<main>': invalid argument: --capitalize foo bar (OptionParser::InvalidArgument)
16 changes: 16 additions & 0 deletions doc/optparse/ruby/basic.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# Require the OptionParser code.
require 'optparse'
# Create an OptionParser object.
parser = OptionParser.new
# Define one or more options.
parser.on('-x', 'Whether to X') do |value|
p ['x', value]
end
parser.on('-y', 'Whether to Y') do |value|
p ['y', value]
end
parser.on('-z', 'Whether to Z') do |value|
p ['z', value]
end
# Parse the command line.
parser.parse!
9 changes: 9 additions & 0 deletions doc/optparse/ruby/match_converter.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
require 'optparse/date'
parser = OptionParser.new
parser.accept(:capitalize, /\w*/) do |value|
value.capitalize
end
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TIL! This is so great, thanks for adding this set of examples.

parser.on('--capitalize XXX', :capitalize) do |value|
p [value, value.class]
end
parser.parse!
40 changes: 38 additions & 2 deletions doc/optparse/tutorial.rdoc
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
== Tutorial

=== Why OptionParser?
=== Why \OptionParser?

When a Ruby program executes, it captures its command-line arguments
and options into variable ARGV.
Expand Down Expand Up @@ -34,6 +34,7 @@ The class also has:

=== Contents

- {To Begin With}[#label-To+Begin+With]
- {Defining Options}[#label-Defining+Options]
- {Option Names}[#label-Option+Names]
- {Short Option Names}[#label-Short+Option+Names]
Expand All @@ -50,6 +51,42 @@ The class also has:
- {Default Values for Options}[#label-Default+Values+for+Options]
- {Argument Converters}[#label-Argument+Converters]

=== To Begin With

To use \OptionParser:

1. Require the \OptionParser code.
2. Create an \OptionParser object.
3. Define one or more options.
4. Parse the command line.

File +basic.rb+ defines three options, <tt>-x</tt>,
<tt>-y</tt>, and <tt>-z</tt>, each with a descriptive string,
and each with a block.

:include: ruby/basic.rb

From these defined options, the parser automatically builds help text:

$ ruby basic.rb --help
Usage: basic [options]
-x Whether to X
-y Whether to Y
-z Whether to Z

When an option is found during parsing,
the block defined for the option is called with the argument value.

Executions:

$ ruby basic.rb -x -z
["x", true]
["z", true]
$ ruby basic.rb -z -y -x
["z", true]
["y", true]
["x", true]

=== Defining Options

A common way to define an option in \OptionParser
Expand Down Expand Up @@ -361,7 +398,6 @@ Executions:
$ ruby default_values.rb --yyy FOO
{:yyy=>"FOO", :zzz=>"BBB"}


=== Argument Converters

An option can specify that its argument is to be converted
Expand Down