optitron 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/optitron/option.rb +19 -6
- data/lib/optitron/version.rb +1 -1
- data/spec/option_spec.rb +42 -0
- data/spec/{type_spec.rb → validation_spec.rb} +25 -0
- metadata +5 -4
data/lib/optitron/option.rb
CHANGED
@@ -14,6 +14,11 @@ class Optitron
|
|
14
14
|
interpolate_type(default)
|
15
15
|
@default = default
|
16
16
|
end
|
17
|
+
|
18
|
+
def inclusion_test=(tester)
|
19
|
+
interpolate_type(tester.first)
|
20
|
+
@inclusion_test = tester
|
21
|
+
end
|
17
22
|
|
18
23
|
def interpolate_type(default)
|
19
24
|
@type = case default
|
@@ -31,7 +36,7 @@ class Optitron
|
|
31
36
|
end
|
32
37
|
|
33
38
|
def validate(val)
|
34
|
-
case @type
|
39
|
+
validated_type = case @type
|
35
40
|
when :boolean
|
36
41
|
if TRUE_BOOLEAN_VALUES.include?(val)
|
37
42
|
true
|
@@ -51,6 +56,8 @@ class Optitron
|
|
51
56
|
else
|
52
57
|
raise
|
53
58
|
end
|
59
|
+
@inclusion_test.include?(validated_type) or raise if @inclusion_test
|
60
|
+
validated_type
|
54
61
|
end
|
55
62
|
|
56
63
|
class Opt < Option
|
@@ -61,6 +68,7 @@ class Optitron
|
|
61
68
|
end
|
62
69
|
@name, @desc = name, desc
|
63
70
|
@type = opts && opts[:type] || :boolean
|
71
|
+
self.inclusion_test = opts[:in] if opts && opts[:in]
|
64
72
|
self.default = opts && opts.key?(:default) ? opts[:default] : (@type == :boolean ? false : nil)
|
65
73
|
end
|
66
74
|
|
@@ -80,15 +88,19 @@ class Optitron
|
|
80
88
|
tokens.delete_at(opt_tok_index).val
|
81
89
|
end
|
82
90
|
response.params_array << [self, value.nil? ? !default : value]
|
83
|
-
when :numeric
|
84
|
-
value = if opt_tok.name == name
|
85
|
-
opt_tok.value
|
91
|
+
when :numeric, :string
|
92
|
+
value = if opt_tok.name == name
|
93
|
+
if opt_tok.respond_to?(:value)
|
94
|
+
opt_tok.value
|
95
|
+
else
|
96
|
+
response.add_error("missing", opt_tok.name)
|
97
|
+
end
|
86
98
|
elsif tokens[opt_tok_index].respond_to?(:val)
|
87
99
|
tokens.delete_at(opt_tok_index).val
|
88
100
|
elsif default
|
89
101
|
default
|
90
102
|
else
|
91
|
-
response.add_error("required",
|
103
|
+
response.add_error("required", opt_tok.name)
|
92
104
|
end
|
93
105
|
response.params_array << [self, value]
|
94
106
|
when :array
|
@@ -128,13 +140,14 @@ class Optitron
|
|
128
140
|
end
|
129
141
|
|
130
142
|
class Arg < Option
|
131
|
-
attr_accessor :greedy
|
143
|
+
attr_accessor :greedy, :inclusion_test
|
132
144
|
alias_method :greedy?, :greedy
|
133
145
|
def initialize(name = nil, desc = nil, opts = nil)
|
134
146
|
if desc.is_a?(Hash)
|
135
147
|
desc, opts = nil, desc
|
136
148
|
end
|
137
149
|
@name, @desc = name, desc
|
150
|
+
self.inclusion_test = opts[:in] if opts && opts[:in]
|
138
151
|
@required = opts && opts.key?(:required) ? opts[:required] : true
|
139
152
|
@type = opts && opts[:type]
|
140
153
|
end
|
data/lib/optitron/version.rb
CHANGED
data/spec/option_spec.rb
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Optitron::Parser options" do
|
4
|
+
context "long names vs short names" do
|
5
|
+
before(:each) do
|
6
|
+
@parser = Optitron.new {
|
7
|
+
opt "option", :type => :string
|
8
|
+
}
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should parse '-o test'" do
|
12
|
+
@parser.parse(%w(-o test)).params.should == {'option' => 'test'}
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should parse '--option=test'" do
|
16
|
+
@parser.parse(%w(--option=test)).params.should == {'option' => 'test'}
|
17
|
+
end
|
18
|
+
|
19
|
+
it "shouldn't parse '--option test'" do
|
20
|
+
@parser.parse(%w(--option test)).valid?.should be_false
|
21
|
+
end
|
22
|
+
|
23
|
+
it "shouldn't parse '-option test'" do
|
24
|
+
@parser.parse(%w(-option test)).valid?.should be_false
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context "multiple options" do
|
29
|
+
before(:each) do
|
30
|
+
@parser = Optitron.new {
|
31
|
+
opt "1"
|
32
|
+
opt "2"
|
33
|
+
opt "3"
|
34
|
+
opt "option", :type => :string
|
35
|
+
}
|
36
|
+
end
|
37
|
+
|
38
|
+
it "should parse '-123o test'" do
|
39
|
+
@parser.parse(%w(-123o test)).params.should == {'option' => 'test', '1' => true, '2' => true, '3' => true}
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -102,4 +102,29 @@ describe "Optitron::Parser types" do
|
|
102
102
|
end
|
103
103
|
end
|
104
104
|
end
|
105
|
+
|
106
|
+
context "inclusion" do
|
107
|
+
before(:each) {
|
108
|
+
@parser = Optitron.new {
|
109
|
+
opt 'pid', :in => [1, 2, 3, 4]
|
110
|
+
opt 'range', :in => 0...100
|
111
|
+
}
|
112
|
+
}
|
113
|
+
|
114
|
+
it "should parse 'parse --pid=3'" do
|
115
|
+
@parser.parse(%w(--pid=3)).params.should == {'pid' => 3}
|
116
|
+
end
|
117
|
+
|
118
|
+
it "should parse 'parse --range=56'" do
|
119
|
+
@parser.parse(%w(--range=56)).params.should == {'range' => 56}
|
120
|
+
end
|
121
|
+
|
122
|
+
it "shouldn't parse 'parse --range=156'" do
|
123
|
+
@parser.parse(%w(--range=156)).valid?.should be_false
|
124
|
+
end
|
125
|
+
|
126
|
+
it "shouldn't parse 'parse --pid=9'" do
|
127
|
+
@parser.parse(%w(--pid=9)).valid?.should be_false
|
128
|
+
end
|
129
|
+
end
|
105
130
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: optitron
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 4
|
10
|
+
version: 0.0.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Joshua Hull
|
@@ -62,12 +62,13 @@ files:
|
|
62
62
|
- spec/default_spec.rb
|
63
63
|
- spec/dispatch_spec.rb
|
64
64
|
- spec/errors_spec.rb
|
65
|
+
- spec/option_spec.rb
|
65
66
|
- spec/other_spec.rb
|
66
67
|
- spec/short_name_spec.rb
|
67
68
|
- spec/simple_spec.rb
|
68
69
|
- spec/spec.opts
|
69
70
|
- spec/spec_helper.rb
|
70
|
-
- spec/
|
71
|
+
- spec/validation_spec.rb
|
71
72
|
has_rdoc: true
|
72
73
|
homepage: http://rubygems.org/gems/optitron
|
73
74
|
licenses: []
|