From 0d1d779c239c4e4d98c42a7e97a9f43e3c5e53ff Mon Sep 17 00:00:00 2001 From: BurdetteLamar Date: Mon, 29 Mar 2021 14:03:04 -0500 Subject: [ruby/optparse] Beginnings of tutorial https://github.com/ruby/optparse/commit/f209276f79 --- doc/ruby/argv.rb | 2 + doc/ruby/long_names.rb | 9 ++++ doc/ruby/mixed_names.rb | 9 ++++ doc/ruby/short_names.rb | 9 ++++ doc/tutorial.rdoc | 125 ++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 154 insertions(+) create mode 100644 doc/ruby/argv.rb create mode 100644 doc/ruby/long_names.rb create mode 100644 doc/ruby/mixed_names.rb create mode 100644 doc/ruby/short_names.rb create mode 100644 doc/tutorial.rdoc (limited to 'doc') diff --git a/doc/ruby/argv.rb b/doc/ruby/argv.rb new file mode 100644 index 0000000000..12495cfa1f --- /dev/null +++ b/doc/ruby/argv.rb @@ -0,0 +1,2 @@ +p ARGV + diff --git a/doc/ruby/long_names.rb b/doc/ruby/long_names.rb new file mode 100644 index 0000000000..e36152d097 --- /dev/null +++ b/doc/ruby/long_names.rb @@ -0,0 +1,9 @@ +require 'optparse' +parser = OptionParser.new +parser.on('--xxx') do |option| + p "--xxx #{option}" +end +parser.on('--y1%', '--z2#') do |option| + p "--y1% or --z2# #{option}" +end +parser.parse! diff --git a/doc/ruby/mixed_names.rb b/doc/ruby/mixed_names.rb new file mode 100644 index 0000000000..b8f3ac9819 --- /dev/null +++ b/doc/ruby/mixed_names.rb @@ -0,0 +1,9 @@ +require 'optparse' +parser = OptionParser.new +parser.on('-x', '--xxx') do |option| + p "--xxx #{option}" +end +parser.on('-y', '--y1%') do |option| + p "--y1% #{option}" +end +parser.parse! diff --git a/doc/ruby/short_names.rb b/doc/ruby/short_names.rb new file mode 100644 index 0000000000..0dc35b789b --- /dev/null +++ b/doc/ruby/short_names.rb @@ -0,0 +1,9 @@ +require 'optparse' +parser = OptionParser.new +parser.on('-x') do |option| + p "-x #{option}" +end +parser.on('-1', '-%') do |option| + p "-1 or -% #{option}" +end +parser.parse! diff --git a/doc/tutorial.rdoc b/doc/tutorial.rdoc new file mode 100644 index 0000000000..3f60b462d6 --- /dev/null +++ b/doc/tutorial.rdoc @@ -0,0 +1,125 @@ +== Tutorial + +=== Why OptionParser? + +When a Ruby program executes, it captures its command-line arguments +and options into variable ARGV. +This simple program just prints its \ARGV: + + :include: ruby/argv.rb + +Execution, with arguments and options: + + $ ruby doc/ruby/argv.rb foo --bar --baz bat bam + ["foo", "--bar", "--baz", "bat", "bam"] + +The executing program is responsible for parsing and handling +the command-line options. + +OptionParser offers methods for parsing and handling those options. + +With \OptionParser, you can define options so that for each option: + +- The code that defines the option and code that handles that option + are in the same place. +- The option may take no argument, a required argument, or an optional argument. +- The argument may be automatically converted to a specified class. +- The argument may be restricted to specified _forms_. +- The argument may be restricted to specified _values_. + +The class also has a method #summarize that returns a string summary +of all defined options. + +=== Defining Options + +A common way to define an option in \OptionParser +is with instance method OptionParser#on. + +The method may be called with any number of arguments +(whose order does not matter), +and may also have a trailing optional keyword argument +into+. + +The given arguments determine the characteristics of the new option. +These may include: + +- One or more short option names. +- One or more long option names. +- Whether the option takes no argument, an optional argument, or a required argument. +- Acceptable _forms_ for the argument. +- Acceptable _values_ for the argument. +- A proc or method to be called when the parser encounters the option. +- String descriptions for the option. + +=== Option Names + +You can give an option one or more names of two types: + +- Short (1-character) name, beginning with one hyphen (-). +- Long (multi-character) name, beginning with two hyphens (--). + +==== Short Option Names + +A short option name consists of a hyphen and a single character. + +File +short_names.rb+ +defines an option with a short name, -x, +and an option with two short names (aliases, in effect) -y and -z. + + :include: ruby/short_names.rb + +Executions: + + $ ruby doc/ruby/short_names.rb -x + "-x true" + $ ruby doc/ruby/short_names.rb -1 + "-1 or -% true" + $ ruby doc/ruby/short_names.rb -% + "-1 or -% true" + +Multiple short names can "share" a hyphen: + + $ ruby short_names.rb -x1% + "-x true" + "-1 or -% true" + "-1 or -% true" + +==== Long Option Names + +A long option name consists of two hyphens and a one or more characters +(usually two or more characters). + +File +long_names.rb+ +defines an option with a long name, --xxx, +and an option with two long names (aliases, in effect) --y1% and --z2#. + + :include: ruby/long_names.rb + +Executions: + + $ ruby long_names.rb --xxx + "--xxx true" + $ ruby long_names.rb --y1% + "--y1% or -z2# true" + $ ruby long_names.rb --z2# + "--y1% or -z2# true" + +==== Mixing Option Names + +Many developers like to mix short and long option names, +so that a short name is in effect an abbreviation of a long name. + +File +mixed_names.rb+ +defines options that each have both a short and a long name. + + :include: ruby/mixed_names.rb + +Executions: + + $ ruby doc/ruby/mixed_names.rb -x + "--xxx true" + $ ruby doc/ruby/mixed_names.rb --xxx + "--xxx true" + $ ruby doc/ruby/mixed_names.rb -y + "--y1% true" + $ ruby doc/ruby/mixed_names.rb --y1% + "--y1% true" -- cgit v1.2.3