class ContactForm LIMITS = { "email" => 254, "name" => 128, "subject" => 200, "message" => 5000 }.freeze EMAIL_PATTERN = /\A[A-Z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[A-Z0-9!#$%&'*+\/=?^_`{|}~-]+)*@[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?(?:\.[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?)+\z/i def initialize(params) @params = params end def spam? !@params["website"].to_s.empty? end def valid? fields_valid = LIMITS.all? do |key, max| value = @params[key] value.is_a?(String) && value.valid_encoding? && !value.strip.empty? && value.strip.length <= max end return false unless fields_valid email_valid = @params["email"].strip.match?(EMAIL_PATTERN) headers_valid = %w[name subject].none? do |key| @params[key].match?(/[\r\n]/) end email_valid && headers_valid end end