@@ -4,6 +4,8 @@ module SplitIoClient
44 class Validators
55
66 Flagset_regex = /^[a-z0-9][_a-z0-9]{0,49}$/
7+ Fallback_treatment_regex = /^[0-9]+[.a-zA-Z0-9_-]*$|^[a-zA-Z]+[a-zA-Z0-9_-]*$/
8+ Fallback_treatment_size = 100
79
810 def initialize ( config )
911 @config = config
@@ -68,7 +70,7 @@ def valid_flag_sets(method, flag_sets)
6870 log_invalid_flag_set_type ( method )
6971 elsif flag_set . is_a? ( String ) && flag_set . empty?
7072 log_invalid_flag_set_type ( method )
71- elsif !flag_set . empty? && string_match? ( flag_set . strip . downcase , method )
73+ elsif !flag_set . empty? && string_match? ( flag_set . strip . downcase , method , Flagset_regex , :log_invalid_match )
7274 valid_flag_sets . add ( flag_set . strip . downcase )
7375 else
7476 log_invalid_flag_set_type ( method )
@@ -77,6 +79,46 @@ def valid_flag_sets(method, flag_sets)
7779 !valid_flag_sets . empty? ? valid_flag_sets . to_a . sort : [ ]
7880 end
7981
82+ def validate_fallback_treatment ( method , fallback_treatment )
83+ if !fallback_treatment . is_a? Engine ::Models ::FallbackTreatment
84+ @config . logger . warn ( "#{ method } : Fallback treatment instance should be FallbackTreatment, input is discarded" )
85+ return false
86+ end
87+
88+ if !fallback_treatment . treatment . is_a? String
89+ @config . logger . warn ( "#{ method } : Fallback treatment value should be str type, input is discarded" )
90+ return false
91+ end
92+
93+ return false unless string_match? ( fallback_treatment . treatment , method , Fallback_treatment_regex , :log_invalid_fallback_treatment )
94+
95+ if fallback_treatment . treatment . size > Fallback_treatment_size
96+ @config . logger . warn ( "#{ method } : Fallback treatment size should not exceed #{ Fallback_treatment_size } characters" )
97+ return false
98+ end
99+
100+ true
101+ end
102+
103+ def valid_split_name? ( method , split_name )
104+ if split_name . nil?
105+ log_nil ( :split_name , method )
106+ return false
107+ end
108+
109+ unless string? ( split_name )
110+ log_invalid_type ( :split_name , method )
111+ return false
112+ end
113+
114+ if empty_string? ( split_name )
115+ log_empty_string ( :split_name , method )
116+ return false
117+ end
118+
119+ true
120+ end
121+
80122 private
81123
82124 def string? ( value )
@@ -91,9 +133,9 @@ def number_or_string?(value)
91133 ( value . is_a? ( Numeric ) && !value . to_f . nan? ) || string? ( value )
92134 end
93135
94- def string_match? ( value , method )
95- if Flagset_regex . match ( value ) == nil
96- log_invalid_match ( value , method )
136+ def string_match? ( value , method , regex_exp , log_if_invalid )
137+ if regex_exp . match ( value ) == nil
138+ method ( log_if_invalid ) . call ( value , method )
97139 false
98140 else
99141 true
@@ -132,25 +174,6 @@ def log_key_too_long(key, method)
132174 @config . logger . error ( "#{ method } : #{ key } is too long - must be #{ @config . max_key_size } characters or less" )
133175 end
134176
135- def valid_split_name? ( method , split_name )
136- if split_name . nil?
137- log_nil ( :split_name , method )
138- return false
139- end
140-
141- unless string? ( split_name )
142- log_invalid_type ( :split_name , method )
143- return false
144- end
145-
146- if empty_string? ( split_name )
147- log_empty_string ( :split_name , method )
148- return false
149- end
150-
151- true
152- end
153-
154177 def valid_key? ( method , key )
155178 if key . nil?
156179 log_nil ( :key , method )
@@ -326,5 +349,9 @@ def valid_properties?(properties)
326349
327350 true
328351 end
352+
353+ def log_invalid_fallback_treatment ( key , method )
354+ @config . logger . warn ( "#{ method } : Invalid treatment #{ key } , Fallback treatment should match regex #{ Fallback_treatment_regex } " )
355+ end
329356 end
330357end
0 commit comments