optparse 0.3.1 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.document +7 -0
- data/.rdoc_options +4 -0
- data/ChangeLog +266 -16
- data/doc/optparse/.document +1 -0
- data/doc/optparse/argument_converters.rdoc +35 -35
- data/doc/optparse/option_params.rdoc +3 -3
- data/doc/optparse/ruby/argument_abbreviation.rb +9 -0
- data/doc/optparse/tutorial.rdoc +58 -35
- data/lib/optparse/ac.rb +16 -0
- data/lib/optparse/kwargs.rb +8 -3
- data/lib/optparse/version.rb +9 -0
- data/lib/optparse.rb +166 -63
- metadata +7 -3
data/doc/optparse/tutorial.rdoc
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
== Tutorial
|
2
2
|
|
3
|
-
=== Why
|
3
|
+
=== Why +OptionParser+?
|
4
4
|
|
5
5
|
When a Ruby program executes, it captures its command-line arguments
|
6
6
|
and options into variable ARGV.
|
7
|
-
This simple program just prints its
|
7
|
+
This simple program just prints its +ARGV+:
|
8
8
|
|
9
9
|
:include: ruby/argv.rb
|
10
10
|
|
@@ -18,7 +18,7 @@ the command-line options.
|
|
18
18
|
|
19
19
|
OptionParser offers methods for parsing and handling those options.
|
20
20
|
|
21
|
-
With
|
21
|
+
With +OptionParser+, you can define options so that for each option:
|
22
22
|
|
23
23
|
- The code that defines the option and code that handles that option
|
24
24
|
are in the same place.
|
@@ -55,7 +55,7 @@ The class also has method #help, which displays automatically-generated help tex
|
|
55
55
|
- {Argument Converters}[#label-Argument+Converters]
|
56
56
|
- {Help}[#label-Help]
|
57
57
|
- {Top List and Base List}[#label-Top+List+and+Base+List]
|
58
|
-
- {Defining Options}[#label-Defining+Options]
|
58
|
+
- {Methods for Defining Options}[#label-Methods+for+Defining+Options]
|
59
59
|
- {Parsing}[#label-Parsing]
|
60
60
|
- {Method parse!}[#label-Method+parse-21]
|
61
61
|
- {Method parse}[#label-Method+parse]
|
@@ -66,10 +66,10 @@ The class also has method #help, which displays automatically-generated help tex
|
|
66
66
|
|
67
67
|
=== To Begin With
|
68
68
|
|
69
|
-
To use
|
69
|
+
To use +OptionParser+:
|
70
70
|
|
71
|
-
1. Require the
|
72
|
-
2. Create an
|
71
|
+
1. Require the +OptionParser+ code.
|
72
|
+
2. Create an +OptionParser+ object.
|
73
73
|
3. Define one or more options.
|
74
74
|
4. Parse the command line.
|
75
75
|
|
@@ -92,9 +92,9 @@ the block defined for the option is called with the argument value.
|
|
92
92
|
An invalid option raises an exception.
|
93
93
|
|
94
94
|
Method #parse!, which is used most often in this tutorial,
|
95
|
-
removes from
|
95
|
+
removes from +ARGV+ the options and arguments it finds,
|
96
96
|
leaving other non-option arguments for the program to handle on its own.
|
97
|
-
The method returns the possibly-reduced
|
97
|
+
The method returns the possibly-reduced +ARGV+ array.
|
98
98
|
|
99
99
|
Executions:
|
100
100
|
|
@@ -115,7 +115,7 @@ Executions:
|
|
115
115
|
|
116
116
|
=== Defining Options
|
117
117
|
|
118
|
-
A common way to define an option in
|
118
|
+
A common way to define an option in +OptionParser+
|
119
119
|
is with instance method OptionParser#on.
|
120
120
|
|
121
121
|
The method may be called with any number of arguments
|
@@ -351,6 +351,29 @@ Executions:
|
|
351
351
|
|
352
352
|
Omitting an optional argument does not raise an error.
|
353
353
|
|
354
|
+
==== Argument Abbreviations
|
355
|
+
|
356
|
+
Specify an argument list as an Array or a Hash.
|
357
|
+
|
358
|
+
:include: ruby/argument_abbreviation.rb
|
359
|
+
|
360
|
+
When an argument is abbreviated, the expanded argument yielded.
|
361
|
+
|
362
|
+
Executions:
|
363
|
+
|
364
|
+
$ ruby argument_abbreviation.rb --help
|
365
|
+
Usage: argument_abbreviation [options]
|
366
|
+
Usage: argument_abbreviation [options]
|
367
|
+
-x, --xxx=VALUE Argument abbreviations
|
368
|
+
-y, --yyy=VALUE Argument abbreviations
|
369
|
+
$ ruby argument_abbreviation.rb --xxx A
|
370
|
+
["--xxx", "ABC"]
|
371
|
+
$ ruby argument_abbreviation.rb --xxx c
|
372
|
+
argument_abbreviation.rb:9:in `<main>': invalid argument: --xxx c (OptionParser::InvalidArgument)
|
373
|
+
$ ruby argument_abbreviation.rb --yyy a --yyy d
|
374
|
+
["--yyy", "XYZ"]
|
375
|
+
["--yyy", "FOO"]
|
376
|
+
|
354
377
|
=== Argument Values
|
355
378
|
|
356
379
|
Permissible argument values may be restricted
|
@@ -522,11 +545,11 @@ Executions:
|
|
522
545
|
=== Argument Converters
|
523
546
|
|
524
547
|
An option can specify that its argument is to be converted
|
525
|
-
from the default
|
548
|
+
from the default +String+ to an instance of another class.
|
526
549
|
There are a number of built-in converters.
|
527
550
|
|
528
551
|
Example: File +date.rb+
|
529
|
-
defines an option whose argument is to be converted to a
|
552
|
+
defines an option whose argument is to be converted to a +Date+ object.
|
530
553
|
The argument is converted by method Date#parse.
|
531
554
|
|
532
555
|
:include: ruby/date.rb
|
@@ -546,7 +569,7 @@ for both built-in and custom converters.
|
|
546
569
|
|
547
570
|
=== Help
|
548
571
|
|
549
|
-
|
572
|
+
+OptionParser+ makes automatically generated help text available.
|
550
573
|
|
551
574
|
The help text consists of:
|
552
575
|
|
@@ -614,49 +637,49 @@ Execution:
|
|
614
637
|
|
615
638
|
=== Top List and Base List
|
616
639
|
|
617
|
-
An
|
640
|
+
An +OptionParser+ object maintains a stack of OptionParser::List objects,
|
618
641
|
each of which has a collection of zero or more options.
|
619
642
|
It is unlikely that you'll need to add or take away from that stack.
|
620
643
|
|
621
644
|
The stack includes:
|
622
645
|
|
623
|
-
- The <em>top list</em>, given by
|
624
|
-
- The <em>base list</em>, given by
|
646
|
+
- The <em>top list</em>, given by OptionParser#top.
|
647
|
+
- The <em>base list</em>, given by OptionParser#base.
|
625
648
|
|
626
|
-
When
|
649
|
+
When +OptionParser+ builds its help text, the options in the top list
|
627
650
|
precede those in the base list.
|
628
651
|
|
629
|
-
=== Defining Options
|
652
|
+
=== Methods for Defining Options
|
630
653
|
|
631
654
|
Option-defining methods allow you to create an option, and also append/prepend it
|
632
655
|
to the top list or append it to the base list.
|
633
656
|
|
634
657
|
Each of these next three methods accepts a sequence of parameter arguments and a block,
|
635
|
-
creates an option object using method
|
658
|
+
creates an option object using method OptionParser#make_switch (see below),
|
636
659
|
and returns the created option:
|
637
660
|
|
638
|
-
- \Method
|
661
|
+
- \Method OptionParser#define appends the created option to the top list.
|
639
662
|
|
640
|
-
- \Method
|
663
|
+
- \Method OptionParser#define_head prepends the created option to the top list.
|
641
664
|
|
642
|
-
- \Method
|
665
|
+
- \Method OptionParser#define_tail appends the created option to the base list.
|
643
666
|
|
644
667
|
These next three methods are identical to the three above,
|
645
668
|
except for their return values:
|
646
669
|
|
647
|
-
- \Method
|
670
|
+
- \Method OptionParser#on is identical to method OptionParser#define,
|
648
671
|
except that it returns the parser object +self+.
|
649
672
|
|
650
|
-
- \Method
|
673
|
+
- \Method OptionParser#on_head is identical to method OptionParser#define_head,
|
651
674
|
except that it returns the parser object +self+.
|
652
675
|
|
653
|
-
- \Method
|
676
|
+
- \Method OptionParser#on_tail is identical to method OptionParser#define_tail,
|
654
677
|
except that it returns the parser object +self+.
|
655
678
|
|
656
679
|
Though you may never need to call it directly,
|
657
680
|
here's the core method for defining an option:
|
658
681
|
|
659
|
-
- \Method
|
682
|
+
- \Method OptionParser#make_switch accepts an array of parameters and a block.
|
660
683
|
See {Parameters for New Options}[optparse/option_params.rdoc].
|
661
684
|
This method is unlike others here in that it:
|
662
685
|
- Accepts an <em>array of parameters</em>;
|
@@ -668,7 +691,7 @@ here's the core method for defining an option:
|
|
668
691
|
|
669
692
|
=== Parsing
|
670
693
|
|
671
|
-
|
694
|
+
+OptionParser+ has six instance methods for parsing.
|
672
695
|
|
673
696
|
Three have names ending with a "bang" (<tt>!</tt>):
|
674
697
|
|
@@ -699,9 +722,9 @@ Each of these methods:
|
|
699
722
|
(see {Keyword Argument into}[#label-Keyword+Argument+into]).
|
700
723
|
- Returns +argv+, possibly with some elements removed.
|
701
724
|
|
702
|
-
==== \Method parse
|
725
|
+
==== \Method +parse!+
|
703
726
|
|
704
|
-
\Method parse
|
727
|
+
\Method +parse!+:
|
705
728
|
|
706
729
|
- Accepts an optional array of string arguments +argv+;
|
707
730
|
if not given, +argv+ defaults to the value of OptionParser#default_argv,
|
@@ -756,9 +779,9 @@ Processing ended by non-option found when +POSIXLY_CORRECT+ is defined:
|
|
756
779
|
["--xxx", true]
|
757
780
|
Returned: ["input_file.txt", "output_file.txt", "-yyy", "FOO"] (Array)
|
758
781
|
|
759
|
-
==== \Method parse
|
782
|
+
==== \Method +parse+
|
760
783
|
|
761
|
-
\Method parse
|
784
|
+
\Method +parse+:
|
762
785
|
|
763
786
|
- Accepts an array of string arguments
|
764
787
|
_or_ zero or more string arguments.
|
@@ -810,25 +833,25 @@ Processing ended by non-option found when +POSIXLY_CORRECT+ is defined:
|
|
810
833
|
["--xxx", true]
|
811
834
|
Returned: ["input_file.txt", "output_file.txt", "-yyy", "FOO"] (Array)
|
812
835
|
|
813
|
-
==== \Method order
|
836
|
+
==== \Method +order!+
|
814
837
|
|
815
838
|
Calling method OptionParser#order! gives exactly the same result as
|
816
839
|
calling method OptionParser#parse! with environment variable
|
817
840
|
+POSIXLY_CORRECT+ defined.
|
818
841
|
|
819
|
-
==== \Method order
|
842
|
+
==== \Method +order+
|
820
843
|
|
821
844
|
Calling method OptionParser#order gives exactly the same result as
|
822
845
|
calling method OptionParser#parse with environment variable
|
823
846
|
+POSIXLY_CORRECT+ defined.
|
824
847
|
|
825
|
-
==== \Method permute
|
848
|
+
==== \Method +permute!+
|
826
849
|
|
827
850
|
Calling method OptionParser#permute! gives exactly the same result as
|
828
851
|
calling method OptionParser#parse! with environment variable
|
829
852
|
+POSIXLY_CORRECT+ _not_ defined.
|
830
853
|
|
831
|
-
==== \Method permute
|
854
|
+
==== \Method +permute+
|
832
855
|
|
833
856
|
Calling method OptionParser#permute gives exactly the same result as
|
834
857
|
calling method OptionParser#parse with environment variable
|
data/lib/optparse/ac.rb
CHANGED
@@ -1,7 +1,11 @@
|
|
1
1
|
# frozen_string_literal: false
|
2
2
|
require_relative '../optparse'
|
3
3
|
|
4
|
+
#
|
5
|
+
# autoconf-like options.
|
6
|
+
#
|
4
7
|
class OptionParser::AC < OptionParser
|
8
|
+
# :stopdoc:
|
5
9
|
private
|
6
10
|
|
7
11
|
def _check_ac_args(name, block)
|
@@ -14,6 +18,7 @@ class OptionParser::AC < OptionParser
|
|
14
18
|
end
|
15
19
|
|
16
20
|
ARG_CONV = proc {|val| val.nil? ? true : val}
|
21
|
+
private_constant :ARG_CONV
|
17
22
|
|
18
23
|
def _ac_arg_enable(prefix, name, help_string, block)
|
19
24
|
_check_ac_args(name, block)
|
@@ -29,16 +34,27 @@ class OptionParser::AC < OptionParser
|
|
29
34
|
enable
|
30
35
|
end
|
31
36
|
|
37
|
+
# :startdoc:
|
38
|
+
|
32
39
|
public
|
33
40
|
|
41
|
+
# Define <tt>--enable</tt> / <tt>--disable</tt> style option
|
42
|
+
#
|
43
|
+
# Appears as <tt>--enable-<i>name</i></tt> in help message.
|
34
44
|
def ac_arg_enable(name, help_string, &block)
|
35
45
|
_ac_arg_enable("enable", name, help_string, block)
|
36
46
|
end
|
37
47
|
|
48
|
+
# Define <tt>--enable</tt> / <tt>--disable</tt> style option
|
49
|
+
#
|
50
|
+
# Appears as <tt>--disable-<i>name</i></tt> in help message.
|
38
51
|
def ac_arg_disable(name, help_string, &block)
|
39
52
|
_ac_arg_enable("disable", name, help_string, block)
|
40
53
|
end
|
41
54
|
|
55
|
+
# Define <tt>--with</tt> / <tt>--without</tt> style option
|
56
|
+
#
|
57
|
+
# Appears as <tt>--with-<i>name</i></tt> in help message.
|
42
58
|
def ac_arg_with(name, help_string, &block)
|
43
59
|
_check_ac_args(name, block)
|
44
60
|
|
data/lib/optparse/kwargs.rb
CHANGED
@@ -7,12 +7,17 @@ class OptionParser
|
|
7
7
|
#
|
8
8
|
# :include: ../../doc/optparse/creates_option.rdoc
|
9
9
|
#
|
10
|
-
|
11
|
-
|
10
|
+
# Defines options which set in to _options_ for keyword parameters
|
11
|
+
# of _method_.
|
12
|
+
#
|
13
|
+
# Parameters for each keywords are given as elements of _params_.
|
14
|
+
#
|
15
|
+
def define_by_keywords(options, method, **params)
|
16
|
+
method.parameters.each do |type, name|
|
12
17
|
case type
|
13
18
|
when :key, :keyreq
|
14
19
|
op, cl = *(type == :key ? %w"[ ]" : ["", ""])
|
15
|
-
define("--#{name}=#{op}#{name.upcase}#{cl}", *
|
20
|
+
define("--#{name}=#{op}#{name.upcase}#{cl}", *params[name]) do |o|
|
16
21
|
options[name] = o
|
17
22
|
end
|
18
23
|
end
|
data/lib/optparse/version.rb
CHANGED
@@ -2,6 +2,11 @@
|
|
2
2
|
# OptionParser internal utility
|
3
3
|
|
4
4
|
class << OptionParser
|
5
|
+
#
|
6
|
+
# Shows version string in packages if Version is defined.
|
7
|
+
#
|
8
|
+
# +pkgs+:: package list
|
9
|
+
#
|
5
10
|
def show_version(*pkgs)
|
6
11
|
progname = ARGV.options.program_name
|
7
12
|
result = false
|
@@ -47,6 +52,8 @@ class << OptionParser
|
|
47
52
|
result
|
48
53
|
end
|
49
54
|
|
55
|
+
# :stopdoc:
|
56
|
+
|
50
57
|
def each_const(path, base = ::Object)
|
51
58
|
path.split(/::|\//).inject(base) do |klass, name|
|
52
59
|
raise NameError, path unless Module === klass
|
@@ -68,4 +75,6 @@ class << OptionParser
|
|
68
75
|
end
|
69
76
|
end
|
70
77
|
end
|
78
|
+
|
79
|
+
# :startdoc:
|
71
80
|
end
|