getopt 1.4.2 → 1.6.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 +5 -5
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/{CHANGES → CHANGES.md} +39 -16
- data/Gemfile +3 -0
- data/LICENSE +177 -0
- data/{MANIFEST → MANIFEST.md} +12 -5
- data/README.md +197 -0
- data/Rakefile +13 -21
- data/certs/djberg96_pub.pem +26 -0
- data/getopt.gemspec +15 -6
- data/lib/getopt-long.rb +1 -0
- data/lib/getopt-std.rb +1 -0
- data/lib/getopt.rb +2 -0
- data/lib/getopt/long.rb +6 -6
- data/lib/getopt/std.rb +3 -3
- data/lib/getopt/version.rb +6 -0
- data/spec/getopt_long_spec.rb +279 -0
- data/spec/getopt_std_spec.rb +122 -0
- metadata +74 -24
- metadata.gz.sig +0 -0
- data/README +0 -191
- data/test/test_getopt_long.rb +0 -264
- data/test/test_getopt_std.rb +0 -125
data/Rakefile
CHANGED
@@ -1,19 +1,16 @@
|
|
1
1
|
require 'rake'
|
2
2
|
require 'rake/clean'
|
3
|
-
require '
|
3
|
+
require 'rspec/core/rake_task'
|
4
4
|
|
5
5
|
CLEAN.include("**/*.gem", "**/*.rbc")
|
6
6
|
|
7
7
|
namespace :gem do
|
8
8
|
desc "Create the getopt gem"
|
9
9
|
task :create => [:clean] do
|
10
|
+
require 'rubygems/package'
|
10
11
|
spec = eval(IO.read('getopt.gemspec'))
|
11
|
-
|
12
|
-
|
13
|
-
else
|
14
|
-
require 'rubygems/package'
|
15
|
-
Gem::Package.build(spec)
|
16
|
-
end
|
12
|
+
spec.signing_key = File.join(Dir.home, '.ssh', 'gem-private_key.pem')
|
13
|
+
Gem::Package.build(spec)
|
17
14
|
end
|
18
15
|
|
19
16
|
desc "Install the getopt gem"
|
@@ -23,23 +20,18 @@ namespace :gem do
|
|
23
20
|
end
|
24
21
|
end
|
25
22
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
end
|
23
|
+
namespace :spec do
|
24
|
+
RSpec::Core::RakeTask.new(:all) do |t|
|
25
|
+
t.pattern = FileList['spec/*_spec.rb']
|
26
|
+
end
|
30
27
|
|
31
|
-
|
32
|
-
|
33
|
-
t.test_files = 'test/test_getopt_long.rb'
|
34
|
-
t.warning = true
|
35
|
-
t.verbose = true
|
28
|
+
RSpec::Core::RakeTask.new(:getopt_long) do |t|
|
29
|
+
t.pattern = FileList['spec/*long_spec.rb']
|
36
30
|
end
|
37
31
|
|
38
|
-
|
39
|
-
t.
|
40
|
-
t.warning = true
|
41
|
-
t.verbose = true
|
32
|
+
RSpec::Core::RakeTask.new(:getopt_std) do |t|
|
33
|
+
t.pattern = FileList['spec/*std_spec.rb']
|
42
34
|
end
|
43
35
|
end
|
44
36
|
|
45
|
-
task :default => :
|
37
|
+
task :default => 'spec:all'
|
@@ -0,0 +1,26 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIEcDCCAtigAwIBAgIBATANBgkqhkiG9w0BAQsFADA/MREwDwYDVQQDDAhkamJl
|
3
|
+
cmc5NjEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPyLGQBGRYDY29t
|
4
|
+
MB4XDTE4MDMxODE1MjIwN1oXDTI4MDMxNTE1MjIwN1owPzERMA8GA1UEAwwIZGpi
|
5
|
+
ZXJnOTYxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixkARkWA2Nv
|
6
|
+
bTCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBALgfaroVM6CI06cxr0/h
|
7
|
+
A+j+pc8fgpRgBVmHFaFunq28GPC3IvW7Nvc3Y8SnAW7pP1EQIbhlwRIaQzJ93/yj
|
8
|
+
u95KpkP7tA9erypnV7dpzBkzNlX14ACaFD/6pHoXoe2ltBxk3CCyyzx70mTqJpph
|
9
|
+
75IB03ni9a8yqn8pmse+s83bFJOAqddSj009sGPcQO+QOWiNxqYv1n5EHcvj2ebO
|
10
|
+
6hN7YTmhx7aSia4qL/quc4DlIaGMWoAhvML7u1fmo53CYxkKskfN8MOecq2vfEmL
|
11
|
+
iLu+SsVVEAufMDDFMXMJlvDsviolUSGMSNRTujkyCcJoXKYYxZSNtIiyd9etI0X3
|
12
|
+
ctu0uhrFyrMZXCedutvXNjUolD5r9KGBFSWH1R9u2I3n3SAyFF2yzv/7idQHLJJq
|
13
|
+
74BMnx0FIq6fCpu5slAipvxZ3ZkZpEXZFr3cIBtO1gFvQWW7E/Y3ijliWJS1GQFq
|
14
|
+
058qERadHGu1yu1dojmFRo6W2KZvY9al2yIlbkpDrD5MYQIDAQABo3cwdTAJBgNV
|
15
|
+
HRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUFZsMapgzJimzsbaBG2Tm8j5e
|
16
|
+
AzgwHQYDVR0RBBYwFIESZGpiZXJnOTZAZ21haWwuY29tMB0GA1UdEgQWMBSBEmRq
|
17
|
+
YmVyZzk2QGdtYWlsLmNvbTANBgkqhkiG9w0BAQsFAAOCAYEAW2tnYixXQtKxgGXq
|
18
|
+
/3iSWG2bLwvxS4go3srO+aRXZHrFUMlJ5W0mCxl03aazxxKTsVVpZD8QZxvK91OQ
|
19
|
+
h9zr9JBYqCLcCVbr8SkmYCi/laxIZxsNE5YI8cC8vvlLI7AMgSfPSnn/Epq1GjGY
|
20
|
+
6L1iRcEDtanGCIvjqlCXO9+BmsnCfEVehqZkQHeYczA03tpOWb6pon2wzvMKSsKH
|
21
|
+
ks0ApVdstSLz1kzzAqem/uHdG9FyXdbTAwH1G4ZPv69sQAFAOCgAqYmdnzedsQtE
|
22
|
+
1LQfaQrx0twO+CZJPcRLEESjq8ScQxWRRkfuh2VeR7cEU7L7KqT10mtUwrvw7APf
|
23
|
+
DYoeCY9KyjIBjQXfbj2ke5u1hZj94Fsq9FfbEQg8ygCgwThnmkTrrKEiMSs3alYR
|
24
|
+
ORVCZpRuCPpmC8qmqxUnARDArzucjaclkxjLWvCVHeFa9UP7K3Nl9oTjJNv+7/jM
|
25
|
+
WZs4eecIcUc4tKdHxcAJ0MO/Dkqq7hGaiHpwKY76wQ1+8xAh
|
26
|
+
-----END CERTIFICATE-----
|
data/getopt.gemspec
CHANGED
@@ -2,18 +2,27 @@ require 'rubygems'
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = 'getopt'
|
5
|
-
spec.version = '1.
|
5
|
+
spec.version = '1.6.0'
|
6
6
|
spec.author = 'Daniel J. Berger'
|
7
|
-
spec.license = '
|
7
|
+
spec.license = 'Apache-2.0'
|
8
8
|
spec.email = 'djberg96@gmail.com'
|
9
9
|
spec.homepage = 'https://github.com/djberg96/getopt'
|
10
10
|
spec.summary = 'Getopt::Std and Getopt::Long option parsers for Ruby'
|
11
|
-
spec.test_files = Dir['
|
11
|
+
spec.test_files = Dir['spec/*_spec.rb']
|
12
12
|
spec.files = Dir['**/*'].reject{ |f| f.include?('git') }
|
13
|
+
spec.cert_chain = Dir['certs/*']
|
13
14
|
|
14
|
-
spec.
|
15
|
-
|
16
|
-
|
15
|
+
spec.add_development_dependency('rake')
|
16
|
+
spec.add_development_dependency('rspec', '~> 3.9')
|
17
|
+
|
18
|
+
spec.metadata = {
|
19
|
+
'homepage_uri' => 'https://github.com/djberg96/getopt',
|
20
|
+
'bug_tracker_uri' => 'https://github.com/djberg96/getopt/issues',
|
21
|
+
'changelog_uri' => 'https://github.com/djberg96/getopt/blob/master/CHANGES',
|
22
|
+
'documentation_uri' => 'https://github.com/djberg96/getopt/wiki',
|
23
|
+
'source_code_uri' => 'https://github.com/djberg96/getopt',
|
24
|
+
'wiki_uri' => 'https://github.com/djberg96/getopt/wiki'
|
25
|
+
}
|
17
26
|
|
18
27
|
spec.description = <<-EOF
|
19
28
|
The getopt library provides two different command line option parsers.
|
data/lib/getopt-long.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require_relative 'getopt/long'
|
data/lib/getopt-std.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require_relative 'getopt/std'
|
data/lib/getopt.rb
ADDED
data/lib/getopt/long.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require_relative 'version'
|
2
|
+
|
1
3
|
# The Getopt module serves as a namespace only
|
2
4
|
module Getopt
|
3
5
|
|
@@ -12,13 +14,11 @@ module Getopt
|
|
12
14
|
|
13
15
|
# The Getopt::Long class encapsulates longhanded parameter parsing options
|
14
16
|
class Long
|
17
|
+
include Getopt::Version
|
15
18
|
|
16
19
|
# Error raised if an illegal option or argument is passed
|
17
20
|
class Error < StandardError; end
|
18
21
|
|
19
|
-
# The version of the getopt library
|
20
|
-
VERSION = '1.4.2'
|
21
|
-
|
22
22
|
# Takes an array of switches. Each array consists of up to three
|
23
23
|
# elements that indicate the name and type of switch. Returns a hash
|
24
24
|
# containing each switch name, minus the '-', as a key. The value
|
@@ -59,7 +59,7 @@ module Getopt
|
|
59
59
|
valid.push(switch[0]) # Set valid long switches
|
60
60
|
|
61
61
|
# Set type for long switch, default to BOOLEAN.
|
62
|
-
if switch[1].kind_of?(
|
62
|
+
if switch[1].kind_of?(Integer)
|
63
63
|
switch[2] = switch[1]
|
64
64
|
types[switch[0]] = switch[2]
|
65
65
|
switch[1] = switch[0][1..2]
|
@@ -75,7 +75,7 @@ module Getopt
|
|
75
75
|
syns[switch[0]] = switch[1] unless syns[switch[1]]
|
76
76
|
syns[switch[1]] = switch[0] unless syns[switch[1]]
|
77
77
|
|
78
|
-
switch[1] = [switch[1]]
|
78
|
+
switch[1] = [switch[1]]
|
79
79
|
|
80
80
|
switch[1].each{ |char|
|
81
81
|
types[char] = switch[2] # Set type for short switch
|
@@ -217,7 +217,7 @@ module Getopt
|
|
217
217
|
# the same value
|
218
218
|
hash.dup.each{ |switch, val|
|
219
219
|
if syns.keys.include?(switch)
|
220
|
-
syns[switch] = [syns[switch]]
|
220
|
+
syns[switch] = [syns[switch]]
|
221
221
|
syns[switch].each{ |key|
|
222
222
|
hash[key] = val
|
223
223
|
}
|
data/lib/getopt/std.rb
CHANGED
@@ -1,17 +1,17 @@
|
|
1
|
+
require_relative 'version'
|
2
|
+
|
1
3
|
# The Getopt module serves as a namespace only
|
2
4
|
module Getopt
|
3
5
|
|
4
6
|
# The Getopt::Std class serves as a base class for the getopts method.
|
5
7
|
class Std
|
8
|
+
include Getopt::Version
|
6
9
|
|
7
10
|
# The Getopt::Std::Error class is raised if there are any illegal
|
8
11
|
# command line arguments.
|
9
12
|
#
|
10
13
|
class Error < StandardError; end
|
11
14
|
|
12
|
-
# The version of the getopt library
|
13
|
-
VERSION = '1.4.2'
|
14
|
-
|
15
15
|
# Processes single character command line options with option
|
16
16
|
# clustering. This information is parsed from ARGV and returned
|
17
17
|
# as a hash, with the switch (minus the "-") as the key. The value
|
@@ -0,0 +1,279 @@
|
|
1
|
+
#####################################################################
|
2
|
+
# getopt_long_spec.rb
|
3
|
+
#
|
4
|
+
# Specs for the getopt-long library. You should run this test
|
5
|
+
# via the 'rake spec:getopt_long' rake task.
|
6
|
+
#####################################################################
|
7
|
+
require 'rspec'
|
8
|
+
require 'getopt/long'
|
9
|
+
|
10
|
+
RSpec.describe Getopt::Long do
|
11
|
+
before do
|
12
|
+
@opts = nil
|
13
|
+
end
|
14
|
+
|
15
|
+
example "version" do
|
16
|
+
expect(Getopt::Long::VERSION).to eq('1.6.0')
|
17
|
+
expect(Getopt::Long::VERSION).to be_frozen
|
18
|
+
end
|
19
|
+
|
20
|
+
example "constants" do
|
21
|
+
expect(Getopt::BOOLEAN).not_to be_nil
|
22
|
+
expect(Getopt::OPTIONAL).not_to be_nil
|
23
|
+
expect(Getopt::REQUIRED).not_to be_nil
|
24
|
+
expect(Getopt::INCREMENT).not_to be_nil
|
25
|
+
end
|
26
|
+
|
27
|
+
example "getopts long basic functionality" do
|
28
|
+
expect(Getopt::Long).to respond_to(:getopts)
|
29
|
+
|
30
|
+
expect{ Getopt::Long.getopts(["--test"],["--help"],["--foo"]) }.not_to raise_error
|
31
|
+
expect{ Getopt::Long.getopts(["--test", "-x"],["--help", "-y"],["--foo", "-z"]) }.not_to raise_error
|
32
|
+
|
33
|
+
expect{
|
34
|
+
Getopt::Long.getopts(
|
35
|
+
["--test", "-x", Getopt::BOOLEAN],
|
36
|
+
["--help", "-y", Getopt::REQUIRED],
|
37
|
+
["--foo", "-z", Getopt::OPTIONAL],
|
38
|
+
["--more", "-m", Getopt::INCREMENT]
|
39
|
+
)
|
40
|
+
}.not_to raise_error
|
41
|
+
|
42
|
+
expect(Getopt::Long.getopts("--test")).to be_kind_of(Hash)
|
43
|
+
end
|
44
|
+
|
45
|
+
example "getopts long using equals sign works as expected" do
|
46
|
+
ARGV.push("--foo=hello","-b","world")
|
47
|
+
|
48
|
+
expect{
|
49
|
+
@opts = Getopt::Long.getopts(
|
50
|
+
["--foo", "-f", Getopt::REQUIRED],
|
51
|
+
["--bar", "-b", Getopt::OPTIONAL]
|
52
|
+
)
|
53
|
+
}.not_to raise_error
|
54
|
+
|
55
|
+
expect(@opts["foo"]).to eq("hello")
|
56
|
+
expect(@opts["f"]).to eq("hello")
|
57
|
+
expect(@opts["bar"]).to eq("world")
|
58
|
+
expect(@opts["b"]).to eq("world")
|
59
|
+
end
|
60
|
+
|
61
|
+
example "getopts long with embedded hyphens works as expected" do
|
62
|
+
ARGV.push('--foo-bar', 'hello', '--test1-test2-test3', 'world')
|
63
|
+
|
64
|
+
expect{
|
65
|
+
@opts = Getopt::Long.getopts(
|
66
|
+
['--foo-bar', '-f', Getopt::REQUIRED],
|
67
|
+
['--test1-test2-test3', '-t', Getopt::REQUIRED]
|
68
|
+
)
|
69
|
+
}.not_to raise_error
|
70
|
+
|
71
|
+
expect(@opts['foo-bar']).to eq('hello')
|
72
|
+
expect(@opts['f']).to eq('hello')
|
73
|
+
expect(@opts['test1-test2-test3']).to eq('world')
|
74
|
+
expect(@opts['t']).to eq('world')
|
75
|
+
end
|
76
|
+
|
77
|
+
example "getopts long embedded hyphens using equals sign works as expected" do
|
78
|
+
ARGV.push('--foo-bar=hello', '--test1-test2-test3=world')
|
79
|
+
|
80
|
+
expect{
|
81
|
+
@opts = Getopt::Long.getopts(
|
82
|
+
['--foo-bar', '-f', Getopt::REQUIRED],
|
83
|
+
['--test1-test2-test3', '-t', Getopt::REQUIRED]
|
84
|
+
)
|
85
|
+
}.not_to raise_error
|
86
|
+
|
87
|
+
expect(@opts['foo-bar']).to eq('hello')
|
88
|
+
expect(@opts['f']).to eq('hello')
|
89
|
+
expect(@opts['test1-test2-test3']).to eq('world')
|
90
|
+
expect(@opts['t']).to eq('world')
|
91
|
+
end
|
92
|
+
|
93
|
+
example "getopts long with short switch squished works as expected" do
|
94
|
+
ARGV.push("-f", "hello", "-bworld")
|
95
|
+
|
96
|
+
expect{
|
97
|
+
@opts = Getopt::Long.getopts(
|
98
|
+
["--foo", "-f", Getopt::REQUIRED],
|
99
|
+
["--bar", "-b", Getopt::OPTIONAL]
|
100
|
+
)
|
101
|
+
}.not_to raise_error
|
102
|
+
|
103
|
+
expect(@opts["f"]).to eq("hello")
|
104
|
+
expect(@opts["b"]).to eq("world")
|
105
|
+
end
|
106
|
+
|
107
|
+
example "getopts long increment type works as expected" do
|
108
|
+
ARGV.push("-m","-m")
|
109
|
+
|
110
|
+
expect{ @opts = Getopt::Long.getopts(["--more", "-m", Getopt::INCREMENT]) }.not_to raise_error
|
111
|
+
|
112
|
+
expect(@opts["more"]).to eq(2)
|
113
|
+
expect(@opts["m"]).to eq(2)
|
114
|
+
end
|
115
|
+
|
116
|
+
example "switches are set as expected" do
|
117
|
+
ARGV.push("--verbose","--test","--foo")
|
118
|
+
expect{ @opts = Getopt::Long.getopts("--verbose --test --foo") }.not_to raise_error
|
119
|
+
expect( @opts.has_key?("verbose")).to eq(true)
|
120
|
+
expect( @opts.has_key?("test")).to eq(true)
|
121
|
+
expect( @opts.has_key?("foo")).to eq(true)
|
122
|
+
end
|
123
|
+
|
124
|
+
example "short switch synonyms work as expected" do
|
125
|
+
ARGV.push("--verbose","--test","--foo")
|
126
|
+
expect{ @opts = Getopt::Long.getopts("--verbose --test --foo") }.not_to raise_error
|
127
|
+
expect(@opts.has_key?("v")).to eq(true)
|
128
|
+
expect(@opts.has_key?("t")).to eq(true)
|
129
|
+
expect(@opts.has_key?("f")).to eq(true)
|
130
|
+
end
|
131
|
+
|
132
|
+
example "short_switch_synonyms_with_explicit_types" do
|
133
|
+
ARGV.push("--verbose", "--test", "hello", "--foo")
|
134
|
+
|
135
|
+
expect{
|
136
|
+
@opts = Getopt::Long.getopts(
|
137
|
+
["--verbose", Getopt::BOOLEAN],
|
138
|
+
["--test", Getopt::REQUIRED],
|
139
|
+
["--foo", Getopt::BOOLEAN]
|
140
|
+
)
|
141
|
+
}.not_to raise_error
|
142
|
+
|
143
|
+
expect(@opts.has_key?("v")).to be(true)
|
144
|
+
expect(@opts.has_key?("t")).to be(true)
|
145
|
+
expect(@opts.has_key?("f")).to be(true)
|
146
|
+
end
|
147
|
+
|
148
|
+
example "switches with required arguments" do
|
149
|
+
ARGV.push("--foo","1","--bar","hello")
|
150
|
+
|
151
|
+
expect{
|
152
|
+
@opts = Getopt::Long.getopts(
|
153
|
+
["--foo", "-f", Getopt::REQUIRED],
|
154
|
+
["--bar", "-b", Getopt::REQUIRED]
|
155
|
+
)
|
156
|
+
}.not_to raise_error
|
157
|
+
|
158
|
+
expect(@opts).to eq({"foo"=>"1", "bar"=>"hello", "f"=>"1", "b"=>"hello"})
|
159
|
+
end
|
160
|
+
|
161
|
+
example "compressed switches work as expected" do
|
162
|
+
ARGV.push("-fb")
|
163
|
+
|
164
|
+
expect{
|
165
|
+
@opts = Getopt::Long.getopts(
|
166
|
+
["--foo", "-f", Getopt::BOOLEAN],
|
167
|
+
["--bar", "-b", Getopt::BOOLEAN]
|
168
|
+
)
|
169
|
+
}.not_to raise_error
|
170
|
+
|
171
|
+
expect(@opts).to eq({"foo"=>true, "f"=>true, "b"=>true, "bar"=>true})
|
172
|
+
end
|
173
|
+
|
174
|
+
example "compress switches with required argument works as expected" do
|
175
|
+
ARGV.push("-xf", "foo.txt")
|
176
|
+
|
177
|
+
expect{
|
178
|
+
@opts = Getopt::Long.getopts(
|
179
|
+
["--expand", "-x", Getopt::BOOLEAN],
|
180
|
+
["--file", "-f", Getopt::REQUIRED]
|
181
|
+
)
|
182
|
+
}.not_to raise_error
|
183
|
+
|
184
|
+
expect(@opts).to eq({"x"=>true, "expand"=>true, "f"=>"foo.txt", "file"=>"foo.txt"})
|
185
|
+
end
|
186
|
+
|
187
|
+
example "compress switches with argument that is compressed works as expected" do
|
188
|
+
ARGV.push("-xffoo.txt")
|
189
|
+
|
190
|
+
expect{
|
191
|
+
@opts = Getopt::Long.getopts(
|
192
|
+
["--expand", "-x", Getopt::BOOLEAN],
|
193
|
+
["--file", "-f", Getopt::REQUIRED]
|
194
|
+
)
|
195
|
+
}.not_to raise_error
|
196
|
+
|
197
|
+
expect(@opts).to eq({"x"=>true, "expand"=>true, "f"=>"foo.txt", "file"=>"foo.txt"})
|
198
|
+
end
|
199
|
+
|
200
|
+
example "compress switches with optional argument not defined works as expected" do
|
201
|
+
ARGV.push("-xf")
|
202
|
+
|
203
|
+
expect{
|
204
|
+
@opts = Getopt::Long.getopts(
|
205
|
+
["--expand", "-x", Getopt::BOOLEAN],
|
206
|
+
["--file", "-f", Getopt::OPTIONAL]
|
207
|
+
)
|
208
|
+
}.not_to raise_error
|
209
|
+
|
210
|
+
expect(@opts).to eq({"x"=>true, "expand"=>true, "f"=>nil, "file"=>nil})
|
211
|
+
end
|
212
|
+
|
213
|
+
example "compress switches with optional argument works as expected" do
|
214
|
+
ARGV.push("-xf", "boo.txt")
|
215
|
+
|
216
|
+
expect{
|
217
|
+
@opts = Getopt::Long.getopts(
|
218
|
+
["--expand", "-x", Getopt::BOOLEAN],
|
219
|
+
["--file", "-f", Getopt::OPTIONAL]
|
220
|
+
)
|
221
|
+
}.not_to raise_error
|
222
|
+
|
223
|
+
expect(@opts).to eq({"x"=>true, "expand"=>true, "f"=>"boo.txt", "file"=>"boo.txt"})
|
224
|
+
end
|
225
|
+
|
226
|
+
example "compress switches with compressed optional argument works as expected" do
|
227
|
+
ARGV.push("-xfboo.txt")
|
228
|
+
|
229
|
+
expect{
|
230
|
+
@opts = Getopt::Long.getopts(
|
231
|
+
["--expand", "-x", Getopt::BOOLEAN],
|
232
|
+
["--file", "-f", Getopt::OPTIONAL]
|
233
|
+
)
|
234
|
+
}.not_to raise_error
|
235
|
+
|
236
|
+
expect(@opts).to eq({"x"=>true, "expand"=>true, "f"=>"boo.txt", "file"=>"boo.txt"})
|
237
|
+
end
|
238
|
+
|
239
|
+
example "compressed_short_and_long_mixed" do
|
240
|
+
ARGV.push("-xb", "--file", "boo.txt", "-v")
|
241
|
+
|
242
|
+
expect{
|
243
|
+
@opts = Getopt::Long.getopts(
|
244
|
+
["--expand", "-x", Getopt::BOOLEAN],
|
245
|
+
["--verbose", "-v", Getopt::BOOLEAN],
|
246
|
+
["--file", "-f", Getopt::REQUIRED],
|
247
|
+
["--bar", "-b", Getopt::OPTIONAL]
|
248
|
+
)
|
249
|
+
}.not_to raise_error
|
250
|
+
|
251
|
+
expect(@opts).to eq({
|
252
|
+
"x"=>true, "expand"=>true,
|
253
|
+
"v"=>true, "verbose"=>true,
|
254
|
+
"f"=>"boo.txt", "file"=>"boo.txt",
|
255
|
+
"b"=>nil, "bar"=>nil
|
256
|
+
})
|
257
|
+
end
|
258
|
+
|
259
|
+
example "multiple similar long switches with no short switches works as expected" do
|
260
|
+
ARGV.push('--to','1','--too','2','--tooo','3')
|
261
|
+
|
262
|
+
expect{
|
263
|
+
@opts = Getopt::Long.getopts(
|
264
|
+
["--to", Getopt::REQUIRED],
|
265
|
+
["--too", Getopt::REQUIRED],
|
266
|
+
["--tooo", Getopt::REQUIRED]
|
267
|
+
)
|
268
|
+
}.not_to raise_error
|
269
|
+
|
270
|
+
expect(@opts['to']).to eq('1')
|
271
|
+
expect(@opts['too']).to eq('2')
|
272
|
+
expect(@opts['tooo']).to eq('3')
|
273
|
+
end
|
274
|
+
|
275
|
+
after do
|
276
|
+
@opts = nil
|
277
|
+
ARGV.clear
|
278
|
+
end
|
279
|
+
end
|