@@ -20,6 +20,7 @@ class OptBase
20
20
# attrs[1] = description (string)
21
21
# attrs[2] = default value
22
22
# attrs[3] = possible enum values
23
+ # attrs[4] = Regex to validate the option
23
24
#
24
25
def initialize ( in_name , attrs = [ ] )
25
26
self . name = in_name
@@ -29,6 +30,21 @@ def initialize(in_name, attrs = [])
29
30
self . desc = attrs [ 1 ]
30
31
self . default = attrs [ 2 ]
31
32
self . enums = [ *( attrs [ 3 ] ) ] . map { |x | x . to_s }
33
+ regex_temp = attrs [ 4 ] || nil
34
+ if regex_temp
35
+ # convert to string
36
+ regex_temp = regex_temp . to_s if regex_temp . is_a? Regexp
37
+ # remove start and end character, they will be added later
38
+ regex_temp = regex_temp . sub ( /^\^ / , '' ) . sub ( /\$ $/ , '' )
39
+ # Add start and end marker to match the whole regex
40
+ regex_temp = "^#{ regex_temp } $"
41
+ begin
42
+ Regexp . compile ( regex_temp )
43
+ self . regex = regex_temp
44
+ rescue RegexpError , TypeError => e
45
+ raise ( "Invalid Regex #{ regex_temp } : #{ e } " )
46
+ end
47
+ end
32
48
end
33
49
34
50
#
@@ -63,7 +79,18 @@ def type?(in_type)
63
79
# If it's required and the value is nil or empty, then it's not valid.
64
80
#
65
81
def valid? ( value )
66
- return ( required? and ( value == nil or value . to_s . empty? ) ) ? false : true
82
+ if required?
83
+ # required variable not set
84
+ return false if ( value == nil or value . to_s . empty? )
85
+ end
86
+ if regex
87
+ if value . match ( regex )
88
+ return true
89
+ else
90
+ return false
91
+ end
92
+ end
93
+ return true
67
94
end
68
95
69
96
#
@@ -125,6 +152,10 @@ def display_value(value)
125
152
# The list of potential valid values
126
153
#
127
154
attr_accessor :enums
155
+ #
156
+ # A optional regex to validate the option value
157
+ #
158
+ attr_accessor :regex
128
159
129
160
protected
130
161
0 commit comments