opt_parse_validator 0.0.9 → 0.0.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -0
- data/lib/opt_parse_validator/opts/regexp.rb +12 -0
- data/lib/opt_parse_validator/opts.rb +1 -1
- data/lib/opt_parse_validator/version.rb +1 -1
- data/lib/opt_parse_validator.rb +1 -1
- data/opt_parse_validator.gemspec +14 -4
- metadata +7 -62
- data/.gitignore +0 -4
- data/.rspec +0 -2
- data/.rubocop.yml +0 -6
- data/.travis.yml +0 -19
- data/Gemfile +0 -6
- data/Rakefile +0 -9
- data/spec/fixtures/options_file/default.json +0 -4
- data/spec/fixtures/options_file/malformed.json +0 -4
- data/spec/fixtures/options_file/override.yml +0 -1
- data/spec/fixtures/options_file/unsupported.ext +0 -1
- data/spec/fixtures/r.txt +0 -1
- data/spec/fixtures/rwx.txt +0 -1
- data/spec/lib/opt_parse_validator/options_file_spec.rb +0 -48
- data/spec/lib/opt_parse_validator/opts/array_spec.rb +0 -74
- data/spec/lib/opt_parse_validator/opts/base_spec.rb +0 -188
- data/spec/lib/opt_parse_validator/opts/boolean_spec.rb +0 -34
- data/spec/lib/opt_parse_validator/opts/choice_spec.rb +0 -78
- data/spec/lib/opt_parse_validator/opts/credentials_spec.rb +0 -21
- data/spec/lib/opt_parse_validator/opts/direcyory_path_spec.rb +0 -23
- data/spec/lib/opt_parse_validator/opts/file_path_spec.rb +0 -91
- data/spec/lib/opt_parse_validator/opts/integer_range_spec.rb +0 -54
- data/spec/lib/opt_parse_validator/opts/integer_spec.rb +0 -17
- data/spec/lib/opt_parse_validator/opts/multi_choices_spec.rb +0 -105
- data/spec/lib/opt_parse_validator/opts/path_spec.rb +0 -5
- data/spec/lib/opt_parse_validator/opts/positive_integer_spec.rb +0 -17
- data/spec/lib/opt_parse_validator/opts/proxy_spec.rb +0 -10
- data/spec/lib/opt_parse_validator/opts/uri_spec.rb +0 -73
- data/spec/lib/opt_parse_validator/opts/url_spec.rb +0 -26
- data/spec/lib/opt_parse_validator/version_spec.rb +0 -7
- data/spec/lib/opt_parse_validator_spec.rb +0 -185
- data/spec/spec_helper.rb +0 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b9f84ae1d23fed8ad36be7b431234657f5c9cbc3
|
4
|
+
data.tar.gz: b813aa3f972db1171b96ac7442d7aa14597296b5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e92ff979aa85b9020e5044512451d4d291a548f49e69d6aa51d1487444609cd25fabe346ef111912532aa88b8a775f90bc2e276dc6f2f74c31ca12f23e06b6d6
|
7
|
+
data.tar.gz: 07f1cb36452e4f4ed87c3263744afa32185f0bd8f05c03312eccca0deb6698c2ba1cdb30033d2f16a4331e688e21a58f5c0217e6bf228b4a56df569cc9e580cb
|
data/README.md
CHANGED
@@ -0,0 +1,12 @@
|
|
1
|
+
module OptParseValidator
|
2
|
+
# Implementation of the Regexp Option
|
3
|
+
# See http://ruby-doc.org/core-2.2.1/Regexp.html#method-c-new for expected values in :options
|
4
|
+
class OptRegexp < OptBase
|
5
|
+
# @param [ String ] value
|
6
|
+
#
|
7
|
+
# @return [ Regexp ]
|
8
|
+
def validate(value)
|
9
|
+
Regexp.new(super(value), attrs[:options])
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
%w(
|
2
2
|
base string integer positive_integer choice boolean uri url proxy credentials
|
3
|
-
path file_path directory_path array integer_range multi_choices
|
3
|
+
path file_path directory_path array integer_range multi_choices regexp
|
4
4
|
).each do |opt|
|
5
5
|
require 'opt_parse_validator/opts/' + opt
|
6
6
|
end
|
data/lib/opt_parse_validator.rb
CHANGED
@@ -37,7 +37,7 @@ module OptParseValidator
|
|
37
37
|
fail "The option is not an OptBase, #{opt.class} supplied" unless opt.is_a?(OptBase)
|
38
38
|
fail "The option #{opt.to_sym} is already used !" if @symbols_used.include?(opt.to_sym)
|
39
39
|
|
40
|
-
@opts
|
40
|
+
@opts << opt
|
41
41
|
@symbols_used << opt.to_sym
|
42
42
|
# Set the default option value if it exists
|
43
43
|
@results[opt.to_sym] = opt.default unless opt.default.nil?
|
data/opt_parse_validator.gemspec
CHANGED
@@ -16,9 +16,19 @@ Gem::Specification.new do |s|
|
|
16
16
|
s.homepage = 'https://github.com/wpscanteam/OptParseValidator'
|
17
17
|
s.license = 'MIT'
|
18
18
|
|
19
|
-
s.files = `git ls-files -z`.split("\x0")
|
20
|
-
|
21
|
-
|
19
|
+
s.files = `git ls-files -z`.split("\x0").reject do |file|
|
20
|
+
file =~ %r{^(?:
|
21
|
+
spec\/.*
|
22
|
+
|Gemfile
|
23
|
+
|Rakefile
|
24
|
+
|\.rspec
|
25
|
+
|\.gitignore
|
26
|
+
|\.rubocop.yml
|
27
|
+
|\.travis.yml
|
28
|
+
)$}x
|
29
|
+
end
|
30
|
+
s.test_files = []
|
31
|
+
s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
22
32
|
s.require_paths = ['lib']
|
23
33
|
|
24
34
|
s.add_dependency 'addressable', '~> 2.3'
|
@@ -27,6 +37,6 @@ Gem::Specification.new do |s|
|
|
27
37
|
s.add_development_dependency 'rspec', '~> 3.2'
|
28
38
|
s.add_development_dependency 'rspec-its', '~> 1.1'
|
29
39
|
s.add_development_dependency 'bundler', '~> 1.6'
|
30
|
-
s.add_development_dependency 'rubocop', '~> 0.
|
40
|
+
s.add_development_dependency 'rubocop', '~> 0.30'
|
31
41
|
s.add_development_dependency 'simplecov', '~> 0.9'
|
32
42
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opt_parse_validator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- WPScanTeam - Erwan le Rousseau
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-04-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: addressable
|
@@ -86,14 +86,14 @@ dependencies:
|
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '0.
|
89
|
+
version: '0.30'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '0.
|
96
|
+
version: '0.30'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: simplecov
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -115,15 +115,9 @@ executables: []
|
|
115
115
|
extensions: []
|
116
116
|
extra_rdoc_files: []
|
117
117
|
files:
|
118
|
-
- ".gitignore"
|
119
|
-
- ".rspec"
|
120
|
-
- ".rubocop.yml"
|
121
118
|
- ".simplecov"
|
122
|
-
- ".travis.yml"
|
123
|
-
- Gemfile
|
124
119
|
- LICENSE
|
125
120
|
- README.md
|
126
|
-
- Rakefile
|
127
121
|
- lib/opt_parse_validator.rb
|
128
122
|
- lib/opt_parse_validator/hacks.rb
|
129
123
|
- lib/opt_parse_validator/options_file.rb
|
@@ -141,36 +135,12 @@ files:
|
|
141
135
|
- lib/opt_parse_validator/opts/path.rb
|
142
136
|
- lib/opt_parse_validator/opts/positive_integer.rb
|
143
137
|
- lib/opt_parse_validator/opts/proxy.rb
|
138
|
+
- lib/opt_parse_validator/opts/regexp.rb
|
144
139
|
- lib/opt_parse_validator/opts/string.rb
|
145
140
|
- lib/opt_parse_validator/opts/uri.rb
|
146
141
|
- lib/opt_parse_validator/opts/url.rb
|
147
142
|
- lib/opt_parse_validator/version.rb
|
148
143
|
- opt_parse_validator.gemspec
|
149
|
-
- spec/fixtures/options_file/default.json
|
150
|
-
- spec/fixtures/options_file/malformed.json
|
151
|
-
- spec/fixtures/options_file/override.yml
|
152
|
-
- spec/fixtures/options_file/unsupported.ext
|
153
|
-
- spec/fixtures/r.txt
|
154
|
-
- spec/fixtures/rwx.txt
|
155
|
-
- spec/lib/opt_parse_validator/options_file_spec.rb
|
156
|
-
- spec/lib/opt_parse_validator/opts/array_spec.rb
|
157
|
-
- spec/lib/opt_parse_validator/opts/base_spec.rb
|
158
|
-
- spec/lib/opt_parse_validator/opts/boolean_spec.rb
|
159
|
-
- spec/lib/opt_parse_validator/opts/choice_spec.rb
|
160
|
-
- spec/lib/opt_parse_validator/opts/credentials_spec.rb
|
161
|
-
- spec/lib/opt_parse_validator/opts/direcyory_path_spec.rb
|
162
|
-
- spec/lib/opt_parse_validator/opts/file_path_spec.rb
|
163
|
-
- spec/lib/opt_parse_validator/opts/integer_range_spec.rb
|
164
|
-
- spec/lib/opt_parse_validator/opts/integer_spec.rb
|
165
|
-
- spec/lib/opt_parse_validator/opts/multi_choices_spec.rb
|
166
|
-
- spec/lib/opt_parse_validator/opts/path_spec.rb
|
167
|
-
- spec/lib/opt_parse_validator/opts/positive_integer_spec.rb
|
168
|
-
- spec/lib/opt_parse_validator/opts/proxy_spec.rb
|
169
|
-
- spec/lib/opt_parse_validator/opts/uri_spec.rb
|
170
|
-
- spec/lib/opt_parse_validator/opts/url_spec.rb
|
171
|
-
- spec/lib/opt_parse_validator/version_spec.rb
|
172
|
-
- spec/lib/opt_parse_validator_spec.rb
|
173
|
-
- spec/spec_helper.rb
|
174
144
|
homepage: https://github.com/wpscanteam/OptParseValidator
|
175
145
|
licenses:
|
176
146
|
- MIT
|
@@ -191,33 +161,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
191
161
|
version: '0'
|
192
162
|
requirements: []
|
193
163
|
rubyforge_project:
|
194
|
-
rubygems_version: 2.4.
|
164
|
+
rubygems_version: 2.4.6
|
195
165
|
signing_key:
|
196
166
|
specification_version: 4
|
197
167
|
summary: Testing Gem
|
198
|
-
test_files:
|
199
|
-
- spec/fixtures/options_file/default.json
|
200
|
-
- spec/fixtures/options_file/malformed.json
|
201
|
-
- spec/fixtures/options_file/override.yml
|
202
|
-
- spec/fixtures/options_file/unsupported.ext
|
203
|
-
- spec/fixtures/r.txt
|
204
|
-
- spec/fixtures/rwx.txt
|
205
|
-
- spec/lib/opt_parse_validator/options_file_spec.rb
|
206
|
-
- spec/lib/opt_parse_validator/opts/array_spec.rb
|
207
|
-
- spec/lib/opt_parse_validator/opts/base_spec.rb
|
208
|
-
- spec/lib/opt_parse_validator/opts/boolean_spec.rb
|
209
|
-
- spec/lib/opt_parse_validator/opts/choice_spec.rb
|
210
|
-
- spec/lib/opt_parse_validator/opts/credentials_spec.rb
|
211
|
-
- spec/lib/opt_parse_validator/opts/direcyory_path_spec.rb
|
212
|
-
- spec/lib/opt_parse_validator/opts/file_path_spec.rb
|
213
|
-
- spec/lib/opt_parse_validator/opts/integer_range_spec.rb
|
214
|
-
- spec/lib/opt_parse_validator/opts/integer_spec.rb
|
215
|
-
- spec/lib/opt_parse_validator/opts/multi_choices_spec.rb
|
216
|
-
- spec/lib/opt_parse_validator/opts/path_spec.rb
|
217
|
-
- spec/lib/opt_parse_validator/opts/positive_integer_spec.rb
|
218
|
-
- spec/lib/opt_parse_validator/opts/proxy_spec.rb
|
219
|
-
- spec/lib/opt_parse_validator/opts/uri_spec.rb
|
220
|
-
- spec/lib/opt_parse_validator/opts/url_spec.rb
|
221
|
-
- spec/lib/opt_parse_validator/version_spec.rb
|
222
|
-
- spec/lib/opt_parse_validator_spec.rb
|
223
|
-
- spec/spec_helper.rb
|
168
|
+
test_files: []
|
data/.gitignore
DELETED
data/.rspec
DELETED
data/.rubocop.yml
DELETED
data/.travis.yml
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
language: ruby
|
2
|
-
rvm:
|
3
|
-
- 2.0.0
|
4
|
-
- 2.1.0
|
5
|
-
- 2.1.1
|
6
|
-
- 2.1.2
|
7
|
-
- 2.1.3
|
8
|
-
- 2.1.4
|
9
|
-
- 2.1.5
|
10
|
-
- 2.2.0
|
11
|
-
- ruby-head
|
12
|
-
matrix:
|
13
|
-
allow_failures:
|
14
|
-
- rvm: ruby-head
|
15
|
-
before_script:
|
16
|
-
- chmod 0400 spec/fixtures/r.txt
|
17
|
-
script:
|
18
|
-
- bundle exec rspec
|
19
|
-
- bundle exec rubocop
|
data/Gemfile
DELETED
data/Rakefile
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
override_me: "Yeaa"
|
@@ -1 +0,0 @@
|
|
1
|
-
Unsupported file format
|
data/spec/fixtures/r.txt
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
This file is a chmod 400
|
data/spec/fixtures/rwx.txt
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
This file is a chmod 777
|
@@ -1,48 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe OptParseValidator::OptParser do
|
4
|
-
subject(:parser) { described_class.new }
|
5
|
-
let(:fixtures) { File.join(FIXTURES, 'options_file') }
|
6
|
-
let(:default_file) { File.join(fixtures, 'default.json') }
|
7
|
-
let(:override_file) { File.join(fixtures, 'override.yml') }
|
8
|
-
|
9
|
-
describe '#load_options_files' do
|
10
|
-
context 'when error' do
|
11
|
-
before { parser.options_files << config_file }
|
12
|
-
|
13
|
-
context 'when the format is not supported' do
|
14
|
-
let(:config_file) { File.join(fixtures, 'unsupported.ext') }
|
15
|
-
let(:exception) { "The format #{File.extname(config_file).delete('.')} is not supported" }
|
16
|
-
|
17
|
-
it 'raises an error' do
|
18
|
-
expect { parser.load_options_files }.to raise_error(exception)
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
context 'when file content is malformed' do
|
23
|
-
let(:config_file) { File.join(fixtures, 'malformed.json') }
|
24
|
-
let(:exception) { "Parse Error, #{config_file} seems to be malformed" }
|
25
|
-
|
26
|
-
it 'raises an error' do
|
27
|
-
expect { parser.load_options_files }.to raise_error(exception)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
context 'otherwise' do
|
33
|
-
let(:verbose_opt) { OptParseValidator::OptBoolean.new(%w(-v --verbose)) }
|
34
|
-
let(:override_opt) { OptParseValidator::OptString.new(['--override-me VALUE'], normalize: :to_sym) }
|
35
|
-
|
36
|
-
let(:opts) { [verbose_opt, override_opt] }
|
37
|
-
|
38
|
-
let(:expected) { { verbose: true, override_me: :Yeaa } }
|
39
|
-
|
40
|
-
it 'sets everything correctly and get the right results' do
|
41
|
-
parser.options_files << default_file << override_file
|
42
|
-
parser.add(*opts)
|
43
|
-
|
44
|
-
expect(parser.results([])).to eq expected
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
@@ -1,74 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe OptParseValidator::OptArray do
|
4
|
-
subject(:opt) { described_class.new(['-a', '--array VALUES'], attrs) }
|
5
|
-
let(:attrs) { {} }
|
6
|
-
|
7
|
-
describe '#validate' do
|
8
|
-
context 'when an empty or nil value is given' do
|
9
|
-
context 'when no value_if_empty attribute' do
|
10
|
-
it 'raises an error' do
|
11
|
-
[nil, ''].each do |value|
|
12
|
-
expect { opt.validate(value) }.to raise_error('Empty option value supplied')
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
context 'when value_if_empty attribute' do
|
18
|
-
let(:attrs) { super().merge(value_if_empty: 'a,b') }
|
19
|
-
|
20
|
-
it 'returns the expected array' do
|
21
|
-
[nil, ''].each do |value|
|
22
|
-
expect(opt.validate(value)).to eql %w(a b)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
context 'when the separator is not supplied' do
|
29
|
-
context 'when not present in the argument' do
|
30
|
-
it 'returns an array with the correct value' do
|
31
|
-
expect(opt.validate('rspec')).to eql %w(rspec)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
context 'when present' do
|
36
|
-
it 'returns the expected array' do
|
37
|
-
expect(opt.validate('r1,r2,r3')).to eql %w(r1 r2 r3)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
context 'when separator supplied' do
|
43
|
-
subject(:opt) { described_class.new(['-a', '--array VALUES'], separator: '-') }
|
44
|
-
|
45
|
-
it 'returns an array with the correct value' do
|
46
|
-
expect(opt.validate('r1,r2,r3')).to eql %w(r1,r2,r3)
|
47
|
-
end
|
48
|
-
|
49
|
-
it 'returns the expected array' do
|
50
|
-
expect(opt.validate('r1-r2-r3')).to eql %w(r1 r2 r3)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
describe '#normalize' do
|
56
|
-
after { expect(opt.normalize(@value)).to eql @expected }
|
57
|
-
|
58
|
-
context 'when no :normalize attribute' do
|
59
|
-
it 'returns the value' do
|
60
|
-
@value = %w(t1 t2)
|
61
|
-
@expected = @value
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
context 'when a single normalization' do
|
66
|
-
let(:attrs) { { normalize: :to_sym } }
|
67
|
-
|
68
|
-
it 'returns the expected value' do
|
69
|
-
@value = [1.0, 'test']
|
70
|
-
@expected = [1.0, :test]
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
@@ -1,188 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe OptParseValidator::OptBase do
|
4
|
-
subject(:opt) { described_class.new(option, attrs) }
|
5
|
-
let(:option) { %w(-v --verbose) }
|
6
|
-
let(:attrs) { {} }
|
7
|
-
|
8
|
-
describe '#to_long' do
|
9
|
-
after { expect(described_class.new(@option).to_long).to eql @expected }
|
10
|
-
|
11
|
-
context 'when not found' do
|
12
|
-
it 'returns nil' do
|
13
|
-
@option = %w(-v)
|
14
|
-
@expected = nil
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
context 'when found' do
|
19
|
-
it 'returns the long name' do
|
20
|
-
@option = ['-v', '--[no-]verbose VALUE [OPT]', 'Verbose Mode']
|
21
|
-
@expected = '--verbose'
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
describe '#to_sym' do
|
27
|
-
after :each do
|
28
|
-
if @exception
|
29
|
-
expect { described_class.new(@option).to_sym }.to raise_error(@exception)
|
30
|
-
else
|
31
|
-
expect(described_class.new(@option).to_sym).to eql(@expected)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
context 'without REQUIRED or OPTIONAL arguments' do
|
36
|
-
context 'with short option' do
|
37
|
-
it 'returns :test' do
|
38
|
-
@option = %w(-t --test Testing)
|
39
|
-
@expected = :test
|
40
|
-
end
|
41
|
-
|
42
|
-
it 'returns :its_a_long_option' do
|
43
|
-
@option = ['-l', '--its-a-long-option', "Testing '-' replacement"]
|
44
|
-
@expected = :its_a_long_option
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
context 'without short option' do
|
49
|
-
it 'returns :long' do
|
50
|
-
@option = ['--long']
|
51
|
-
@expected = :long
|
52
|
-
end
|
53
|
-
|
54
|
-
it 'returns :long_option' do
|
55
|
-
@option = ['--long-option', 'No short !']
|
56
|
-
@expected = :long_option
|
57
|
-
end
|
58
|
-
end
|
59
|
-
|
60
|
-
context 'without long option' do
|
61
|
-
it 'raises an error' do
|
62
|
-
@option = ['-v', 'long option missing']
|
63
|
-
@exception = 'Could not find option symbol for ["-v", "long option missing"]'
|
64
|
-
end
|
65
|
-
|
66
|
-
it 'raises an error' do
|
67
|
-
@option = ['long option missing']
|
68
|
-
@exception = 'Could not find option symbol for ["long option missing"]'
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
context 'with multiple long option names (like alias)' do
|
73
|
-
it 'returns the first long option found' do
|
74
|
-
@option = %w(--check-long --cl)
|
75
|
-
@expected = :check_long
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
context 'when negative prefix name' do
|
81
|
-
it 'returns the positive option symbol' do
|
82
|
-
@option = %w(-v --[no-]verbose)
|
83
|
-
@expected = :verbose
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
context 'with REQUIRED or OPTIONAL arguments' do
|
88
|
-
it 'should removed the OPTIONAL argument' do
|
89
|
-
@option = ['-p', '--page [PAGE_NUMBER]']
|
90
|
-
@expected = :page
|
91
|
-
end
|
92
|
-
|
93
|
-
it 'should removed the REQUIRED argument' do
|
94
|
-
@option = ['--url TARGET_URL']
|
95
|
-
@expected = :url
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
describe '#new, #required?' do
|
101
|
-
context 'when no :required' do
|
102
|
-
its(:option) { should eq(option) }
|
103
|
-
its(:required?) { should be_falsey }
|
104
|
-
its(:to_sym) { should eq(:verbose) }
|
105
|
-
end
|
106
|
-
|
107
|
-
context 'when :required' do
|
108
|
-
let(:attrs) { { required: true } }
|
109
|
-
|
110
|
-
its(:required?) { should be true }
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
describe '#normalize' do
|
115
|
-
after { expect(opt.normalize(@value)).to eql @expected }
|
116
|
-
|
117
|
-
context 'when no :normalize attribute' do
|
118
|
-
it 'returns the value' do
|
119
|
-
@value = 'test'
|
120
|
-
@expected = @value
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
context 'when a single normalization' do
|
125
|
-
let(:attrs) { { normalize: :to_sym } }
|
126
|
-
|
127
|
-
context 'when the value does not have a to_sym method' do
|
128
|
-
it 'returns the value' do
|
129
|
-
@value = 1.0
|
130
|
-
@expected = @value
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
context 'when a to_sym method' do
|
135
|
-
it 'returns the symbol' do
|
136
|
-
@value = 'test'
|
137
|
-
@expected = :test
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
context 'when multiple normalization' do
|
143
|
-
let(:attrs) { { normalize: [:to_sym, 2.0, :upcase] } }
|
144
|
-
|
145
|
-
it 'apply each of them (if possible)' do
|
146
|
-
@value = 'test'
|
147
|
-
@expected = :TEST
|
148
|
-
end
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
describe '#validate' do
|
153
|
-
context 'when no value_if_empty attribute' do
|
154
|
-
context 'when an empty or nil value' do
|
155
|
-
it 'raises an error' do
|
156
|
-
[nil, ''].each do |value|
|
157
|
-
expect { opt.validate(value) }
|
158
|
-
.to raise_error('Empty option value supplied')
|
159
|
-
end
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
|
-
context 'when a valid value' do
|
164
|
-
it 'returns it' do
|
165
|
-
expect(opt.validate('testing')).to eql 'testing'
|
166
|
-
end
|
167
|
-
end
|
168
|
-
end
|
169
|
-
|
170
|
-
context 'when value_if_empty attribute' do
|
171
|
-
let(:attrs) { super().merge(value_if_empty: 'it works') }
|
172
|
-
|
173
|
-
context 'when nil or empty value' do
|
174
|
-
it 'returns the value from the value_if_empty attribute' do
|
175
|
-
[nil, ''].each do |value|
|
176
|
-
expect(opt.validate(value)).to eql attrs[:value_if_empty]
|
177
|
-
end
|
178
|
-
end
|
179
|
-
end
|
180
|
-
|
181
|
-
context 'when a valid value' do
|
182
|
-
it 'returns it' do
|
183
|
-
expect(opt.validate('tt')).to eql 'tt'
|
184
|
-
end
|
185
|
-
end
|
186
|
-
end
|
187
|
-
end
|
188
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
describe OptParseValidator::OptBoolean do
|
4
|
-
subject(:opt) { described_class.new(['-b', '--bool BOOL']) }
|
5
|
-
|
6
|
-
describe '#validate' do
|
7
|
-
context 'when does not match TRUE_PATTERN and FALSE_PATTERN' do
|
8
|
-
it 'raises an error' do
|
9
|
-
expect { opt.validate("true\nfalse") }
|
10
|
-
.to raise_error('Invalid boolean value, expected true|t|yes|y|1|false|f|no|n|0')
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
context 'when matches TRUE_PATTERN' do
|
15
|
-
after { expect(opt.validate(@argument)).to be true }
|
16
|
-
|
17
|
-
%w(true t yes y 1).each do |arg|
|
18
|
-
it 'returns true' do
|
19
|
-
@argument = arg
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
context 'when matches FALSE_PATTERN' do
|
25
|
-
after { expect(opt.validate(@argument)).to be false }
|
26
|
-
|
27
|
-
%w(false f no n 0).each do |arg|
|
28
|
-
it 'returns false' do
|
29
|
-
@argument = arg
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|