class InputSanitizer::V2::Types::StringCheck
Public Instance Methods
call(value, options = {})
click to toggle source
# File lib/input_sanitizer/v2/types.rb, line 79 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) # to prevent infinite loop call(value_without_4byte_chars, updated_options) # run checks once again to ensure string is still valid after stripping 4-byte chars else value end end end
Private Instance Methods
strip_4byte_chars(string)
click to toggle source
# File lib/input_sanitizer/v2/types.rb, line 109 def strip_4byte_chars(string) string.each_char.with_object(String.new) { |char, output| output << char if char.bytesize < 4 } end