class Mutations::StringFilter
Public Instance Methods
filter(data)
click to toggle source
# File lib/mutations/string_filter.rb, line 17 def filter(data) # Handle nil case if data.nil? return [nil, nil] if options[:nils] return [nil, :nils] end # At this point, data is not nil. If it's not a string, convert it to a string for some standard classes data = data.to_s if !options[:strict] && [TrueClass, FalseClass, Integer, Float, BigDecimal, Symbol].any? { |klass| data.is_a?(klass) } # Now ensure it's a string: return [data, :string] unless data.is_a?(String) # At this point, data is a string. Now remove control characters from the string: data = data.gsub(/((?=[[:cntrl:]])[^\t\r\n])+/, ' ') unless options[:allow_control_characters] # Transform it using strip: data = data.strip if options[:strip] # Now check if it's blank: if data == "" if options[:empty_is_nil] return [nil, (:nils unless options[:nils])] elsif options[:empty] return [data, nil] else return [data, :empty] end end # Now check to see if it's the correct size: return [data, :min_length] if options[:min_length] && data.length < options[:min_length] return [data, :max_length] if options[:max_length] && data.length > options[:max_length] # Ensure it match return [data, :in] if options[:in] && !options[:in].include?(data) # Ensure it matches the regexp return [data, :matches] if options[:matches] && (options[:matches] !~ data) # We win, it's valid! [data, nil] end