80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
|
# File 'lib/input_sanitizer/v2/types.rb', line 80
def call(value, options = {})
if options[:allow] && !options[:allow].include?(value)
raise InputSanitizer::ValueNotAllowedError.new(value)
elsif value.blank? && (options[:allow_blank] == false || options[:required] == true)
raise InputSanitizer::BlankValueError
elsif options[:regexp] && options[:regexp].match(value).nil?
raise InputSanitizer::RegexpMismatchError.new
elsif value == nil && options[:allow_nil] == false
raise InputSanitizer::BlankValueError
elsif value.blank?
value
else
value.to_s.tap do |string|
raise InputSanitizer::TypeMismatchError.new(value, :string) unless string == value
raise InputSanitizer::ValueError.new(value, options[:minimum], options[:maximum]) if options[:minimum] && string.length < options[:minimum]
raise InputSanitizer::ValueError.new(value, options[:minimum], options[:maximum]) if options[:maximum] && string.length > options[:maximum]
end
if options[:strip_4byte_chars] && !options[:already_stripped]
value_without_4byte_chars = strip_4byte_chars(value)
updated_options = options.merge(:already_stripped => true)
call(value_without_4byte_chars, updated_options)
else
value
end
end
end
|