getopt 1.3.5 → 1.3.6
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.
- data/CHANGES +7 -0
- data/MANIFEST +12 -15
- data/README +7 -12
- data/Rakefile +23 -0
- data/lib/getopt/long.rb +29 -11
- data/lib/getopt/std.rb +7 -6
- data/test/tc_getopt_long.rb +7 -14
- data/test/tc_getopt_std.rb +11 -18
- metadata +4 -3
data/CHANGES
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
== 8-Aug-2007 - 1.3.6
|
2
|
+
* The Getopt::StdError class is now Getopt::Std::Error.
|
3
|
+
* The Getopt::LongError class is now Getopt::Long::Error.
|
4
|
+
* Added some inline rdoc documentation to the source code.
|
5
|
+
* Added a Rakefile with tasks for installation and testing.
|
6
|
+
* Removed the install.rb file - use the 'rake install' task instead.
|
7
|
+
|
1
8
|
== 5-Jul-2006 - 1.3.5
|
2
9
|
* Fixed a bug where multiple long switches with the same first character
|
3
10
|
could cause invalid results. Thanks go to Michael Campbell for the spot.
|
data/MANIFEST
CHANGED
@@ -1,15 +1,12 @@
|
|
1
|
-
CHANGES
|
2
|
-
MANIFEST
|
3
|
-
README
|
4
|
-
|
5
|
-
getopt.gemspec
|
6
|
-
|
7
|
-
examples/
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
test/tc_getopt_std.rb
|
14
|
-
test/tc_getopt_long.rb
|
15
|
-
test/ts_all.rb
|
1
|
+
* CHANGES
|
2
|
+
* MANIFEST
|
3
|
+
* README
|
4
|
+
* Rakefile
|
5
|
+
* getopt.gemspec
|
6
|
+
* examples/example_std.rb
|
7
|
+
* examples/example_long.rb
|
8
|
+
* lib/getopt/std.rb
|
9
|
+
* lib/getopt/long.rb
|
10
|
+
* test/tc_getopt_std.rb
|
11
|
+
* test/tc_getopt_long.rb
|
12
|
+
* test/ts_all.rb
|
data/README
CHANGED
@@ -6,18 +6,12 @@
|
|
6
6
|
Ruby 1.8.0 or later.
|
7
7
|
|
8
8
|
== Installation
|
9
|
-
|
10
|
-
|
11
|
-
ruby install.rb
|
12
|
-
|
13
|
-
=== Gem Installation
|
14
|
-
ruby test/ts_all.rb
|
15
|
-
ruby getopt.gemspec
|
16
|
-
gem install getopt-x-y-z.gem # Where x-y-z is a version
|
9
|
+
rake test (optional)
|
10
|
+
rake install (non-gem) or rake install_gem (gem)
|
17
11
|
|
18
12
|
== Synopsis
|
19
13
|
=== Getopt::Std
|
20
|
-
require
|
14
|
+
require 'getopt/std'
|
21
15
|
|
22
16
|
# Look for -o with argument, and -I and -D boolean arguments
|
23
17
|
opt = Getopt::Std.getopts("o:ID")
|
@@ -35,7 +29,8 @@
|
|
35
29
|
end
|
36
30
|
|
37
31
|
=== Getopt::Long
|
38
|
-
require
|
32
|
+
require 'getopt/long'
|
33
|
+
|
39
34
|
opt = Getopt::Long.getopts(
|
40
35
|
["--foo", "-f", Getopt::BOOLEAN],
|
41
36
|
["--bar", "-b", Getopt::REQUIRED]
|
@@ -181,10 +176,10 @@ INCREMENT
|
|
181
176
|
Ruby's
|
182
177
|
|
183
178
|
== Copyright
|
184
|
-
(C) 2005-
|
179
|
+
(C) 2005-2007, Daniel J. Berger
|
185
180
|
All Rights Reserved
|
186
181
|
|
187
182
|
== Author
|
188
183
|
Daniel J. Berger
|
189
|
-
djberg96 at gmail.com
|
184
|
+
djberg96 at nospam at gmail.com
|
190
185
|
imperator on IRC (freenode)
|
data/Rakefile
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/testtask'
|
3
|
+
|
4
|
+
desc "Install the getopt package (non-gem)"
|
5
|
+
task :install do
|
6
|
+
dest = File.join(Config::CONFIG['sitelibdir'], 'getopt')
|
7
|
+
Dir.mkdir(dest) unless File.exists? dest
|
8
|
+
cp 'lib/getopt/std.rb', dest, :verbose => true
|
9
|
+
cp 'lib/getopt/long.rb', dest, :verbose => true
|
10
|
+
end
|
11
|
+
|
12
|
+
desc "Install the getopt package as a gem"
|
13
|
+
task :install_gem do
|
14
|
+
ruby 'getopt.gemspec'
|
15
|
+
file = Dir["*.gem"].first
|
16
|
+
sh "gem install #{file}"
|
17
|
+
end
|
18
|
+
|
19
|
+
Rake::TestTask.new do |t|
|
20
|
+
t.libs << 'lib'
|
21
|
+
t.warning = true
|
22
|
+
t.test_files = FileList['test/ts_all.rb']
|
23
|
+
end
|
data/lib/getopt/long.rb
CHANGED
@@ -7,12 +7,30 @@ module Getopt
|
|
7
7
|
NEGATABLE = 4
|
8
8
|
NUMERIC = 5
|
9
9
|
|
10
|
-
class LongError < StandardError; end
|
11
|
-
|
12
10
|
class Long
|
13
|
-
|
14
|
-
|
15
|
-
|
11
|
+
class Error < StandardError; end
|
12
|
+
|
13
|
+
VERSION = '1.3.6'
|
14
|
+
|
15
|
+
# Takes an array of switches. Each array consists of up to three
|
16
|
+
# elements that indicate the name and type of switch. Returns a hash
|
17
|
+
# containing each switch name, minus the '-', as a key. The value
|
18
|
+
# for each key depends on the type of switch and/or the value provided
|
19
|
+
# by the user.
|
20
|
+
#
|
21
|
+
# The long switch _must_ be provided. The short switch defaults to the
|
22
|
+
# first letter of the short switch. The default type is BOOLEAN.
|
23
|
+
#
|
24
|
+
# Example:
|
25
|
+
#
|
26
|
+
# opts = Getopt::Long.getopts(
|
27
|
+
# ["--debug"],
|
28
|
+
# ["--verbose", "-v"],
|
29
|
+
# ["--level", "-l", NUMERIC]
|
30
|
+
# )
|
31
|
+
#
|
32
|
+
# See the README file for more information.
|
33
|
+
#
|
16
34
|
def self.getopts(*switches)
|
17
35
|
if switches.empty?
|
18
36
|
raise ArgumentError, "no switches provided"
|
@@ -69,7 +87,7 @@ module Getopt
|
|
69
87
|
|
70
88
|
chars.each_with_index{ |char, i|
|
71
89
|
unless valid.include?(char)
|
72
|
-
raise
|
90
|
+
raise Error, "invalid switch '#{char}'"
|
73
91
|
end
|
74
92
|
|
75
93
|
# Grab the next arg if the switch takes a required arg
|
@@ -83,7 +101,7 @@ module Getopt
|
|
83
101
|
arg = ARGV.delete_at(index+1)
|
84
102
|
if arg.nil? || valid.include?(arg) # Minor cheat here
|
85
103
|
err = "no value provided for required argument '#{char}'"
|
86
|
-
raise
|
104
|
+
raise Error, err
|
87
105
|
end
|
88
106
|
ARGV.push(char, arg)
|
89
107
|
end
|
@@ -122,7 +140,7 @@ module Getopt
|
|
122
140
|
# a preceding switch, e.g. --option foo bar.
|
123
141
|
unless valid.include?(switch)
|
124
142
|
switch ||= opt
|
125
|
-
raise
|
143
|
+
raise Error, "invalid switch '#{switch}'"
|
126
144
|
end
|
127
145
|
|
128
146
|
# Required arguments
|
@@ -132,13 +150,13 @@ module Getopt
|
|
132
150
|
# Make sure there's a value for mandatory arguments
|
133
151
|
if nextval.nil?
|
134
152
|
err = "no value provided for required argument '#{switch}'"
|
135
|
-
raise
|
153
|
+
raise Error, err
|
136
154
|
end
|
137
155
|
|
138
156
|
# If there is a value, make sure it's not another switch
|
139
157
|
if valid.include?(nextval)
|
140
158
|
err = "cannot pass switch '#{nextval}' as an argument"
|
141
|
-
raise
|
159
|
+
raise Error, err
|
142
160
|
end
|
143
161
|
|
144
162
|
# If the same option appears more than once, put the values
|
@@ -154,7 +172,7 @@ module Getopt
|
|
154
172
|
# For boolean arguments set the switch's value to true.
|
155
173
|
if types[switch] == BOOLEAN
|
156
174
|
if hash.has_key?(switch)
|
157
|
-
raise
|
175
|
+
raise Error, "boolean switch already set"
|
158
176
|
end
|
159
177
|
hash[switch] = true
|
160
178
|
end
|
data/lib/getopt/std.rb
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
module Getopt
|
2
|
-
class StdError < StandardError; end
|
3
2
|
class Std
|
4
|
-
|
3
|
+
class Error < StandardError; end
|
4
|
+
|
5
|
+
VERSION = '1.3.6'
|
5
6
|
|
6
7
|
# Processes single character command line options with option
|
7
8
|
# clustering. This information is parsed from ARGV and returned
|
@@ -24,7 +25,7 @@ module Getopt
|
|
24
25
|
|
25
26
|
# Switches on the command line must appear among the characters
|
26
27
|
# declared in +switches+.
|
27
|
-
raise
|
28
|
+
raise Error, "invalid option '#{first}'" unless pos
|
28
29
|
|
29
30
|
if args[pos+1] == ":"
|
30
31
|
ARGV.shift
|
@@ -34,7 +35,7 @@ module Getopt
|
|
34
35
|
# Ensure that switches requiring arguments actually
|
35
36
|
# receive a (non-switch) argument.
|
36
37
|
if rest.nil? || rest.empty?
|
37
|
-
raise
|
38
|
+
raise Error, "missing argument for '-#{args[pos]}'"
|
38
39
|
end
|
39
40
|
|
40
41
|
# Do not permit switches that require arguments to be
|
@@ -42,7 +43,7 @@ module Getopt
|
|
42
43
|
if args.include?(rest) || args.include?(rest[1..-1])
|
43
44
|
err = "cannot use switch '#{rest}' as argument "
|
44
45
|
err += "to another switch"
|
45
|
-
raise
|
46
|
+
raise Error, err
|
46
47
|
end
|
47
48
|
|
48
49
|
# For non boolean switches, arguments that appear multiple
|
@@ -59,7 +60,7 @@ module Getopt
|
|
59
60
|
if args.include?(rest) || args.include?(rest[1..-1])
|
60
61
|
err = "cannot use switch '#{rest}' as argument "
|
61
62
|
err += "to another switch"
|
62
|
-
raise
|
63
|
+
raise Error, err
|
63
64
|
end
|
64
65
|
end
|
65
66
|
else
|
data/test/tc_getopt_long.rb
CHANGED
@@ -1,18 +1,11 @@
|
|
1
|
-
|
1
|
+
#####################################################################
|
2
2
|
# tc_getopt_long.rb
|
3
3
|
#
|
4
|
-
# Test suite for the getopt-long package.
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
Dir.chdir("..") if base == "test"
|
10
|
-
$LOAD_PATH.unshift(Dir.pwd + "/lib")
|
11
|
-
Dir.chdir("test") rescue nil
|
12
|
-
end
|
13
|
-
|
14
|
-
require "test/unit"
|
15
|
-
require "getopt/long"
|
4
|
+
# Test suite for the getopt-long package. You should run this test
|
5
|
+
# via the 'rake test' rake task.
|
6
|
+
#####################################################################
|
7
|
+
require 'test/unit'
|
8
|
+
require 'getopt/long'
|
16
9
|
include Getopt
|
17
10
|
|
18
11
|
class TC_Getopt_Long < Test::Unit::TestCase
|
@@ -21,7 +14,7 @@ class TC_Getopt_Long < Test::Unit::TestCase
|
|
21
14
|
end
|
22
15
|
|
23
16
|
def test_version
|
24
|
-
assert_equal('1.3.
|
17
|
+
assert_equal('1.3.6', Long::VERSION)
|
25
18
|
end
|
26
19
|
|
27
20
|
def test_constants
|
data/test/tc_getopt_std.rb
CHANGED
@@ -1,24 +1,17 @@
|
|
1
|
-
|
1
|
+
###################################################################
|
2
2
|
# tc_getopt_std.rb
|
3
3
|
#
|
4
|
-
# Test suite for the Getopt::Std class.
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
Dir.chdir("..") if base == "test"
|
10
|
-
$LOAD_PATH.unshift(Dir.pwd + "/lib")
|
11
|
-
Dir.chdir("test") rescue nil
|
12
|
-
end
|
13
|
-
|
14
|
-
require "test/unit"
|
15
|
-
require "getopt/std"
|
4
|
+
# Test suite for the Getopt::Std class. You should run this test
|
5
|
+
# via the 'rake test' task.
|
6
|
+
###################################################################
|
7
|
+
require 'test/unit'
|
8
|
+
require 'getopt/std'
|
16
9
|
include Getopt
|
17
10
|
|
18
11
|
class TC_Getopt_Std < Test::Unit::TestCase
|
19
12
|
|
20
13
|
def test_version
|
21
|
-
assert_equal(
|
14
|
+
assert_equal('1.3.6', Std::VERSION)
|
22
15
|
end
|
23
16
|
|
24
17
|
def test_getopts_basic
|
@@ -56,18 +49,18 @@ class TC_Getopt_Std < Test::Unit::TestCase
|
|
56
49
|
|
57
50
|
def test_getopts_expected_errors_missing_arg
|
58
51
|
ARGV.push("-ID")
|
59
|
-
assert_raises(
|
52
|
+
assert_raises(Std::Error){ Std.getopts("I:D") }
|
60
53
|
|
61
54
|
ARGV.push("-ID")
|
62
|
-
assert_raises(
|
55
|
+
assert_raises(Std::Error){ Std.getopts("ID:") }
|
63
56
|
end
|
64
57
|
|
65
58
|
def test_getopts_expected_errors_extra_arg
|
66
59
|
ARGV.push("-I", "-D", "-X")
|
67
|
-
assert_raises(
|
60
|
+
assert_raises(Std::Error){ Std.getopts("ID") }
|
68
61
|
|
69
62
|
ARGV.push("-IDX")
|
70
|
-
assert_raises(
|
63
|
+
assert_raises(Std::Error){ Std.getopts("ID") }
|
71
64
|
end
|
72
65
|
|
73
66
|
# If a switch that accepts an argument appears more than once, the values
|
metadata
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.
|
2
|
+
rubygems_version: 0.9.4
|
3
3
|
specification_version: 1
|
4
4
|
name: getopt
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.3.
|
7
|
-
date:
|
6
|
+
version: 1.3.6
|
7
|
+
date: 2007-08-08 00:00:00 -06:00
|
8
8
|
summary: Getopt::Std and Getopt::Long option parsers for Ruby
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -34,6 +34,7 @@ files:
|
|
34
34
|
- CHANGES
|
35
35
|
- MANIFEST
|
36
36
|
- README
|
37
|
+
- Rakefile
|
37
38
|
- test/tc_getopt_long.rb
|
38
39
|
- test/tc_getopt_std.rb
|
39
40
|
- test/ts_all.rb
|