diff options
author | Stan Hu <stanhu@gmail.com> | 2019-03-09 00:05:59 +0000 |
---|---|---|
committer | Stan Hu <stanhu@gmail.com> | 2019-03-09 00:05:59 +0000 |
commit | 6908c5f70eb4d5d7e8ef28b43d73d71da9b2a0c3 (patch) | |
tree | 0404e97adfa9f2368aa43fc3be4c34d946eb552c /app/validators | |
parent | 1e7a7993d737965e53f51594172e920197d53510 (diff) | |
parent | c8c0ea6c52d46ce63d838d1e739355d4deace434 (diff) | |
download | gitlab-ce-6908c5f70eb4d5d7e8ef28b43d73d71da9b2a0c3.tar.gz |
Merge branch 'fix/email_validator' into 'master'
Align EmailValidator to validate_email gem implementation.
Closes #57352
See merge request gitlab-org/gitlab-ce!24971
Diffstat (limited to 'app/validators')
-rw-r--r-- | app/validators/devise_email_validator.rb | 36 | ||||
-rw-r--r-- | app/validators/email_validator.rb | 7 |
2 files changed, 36 insertions, 7 deletions
diff --git a/app/validators/devise_email_validator.rb b/app/validators/devise_email_validator.rb new file mode 100644 index 00000000000..6ca921ca7fa --- /dev/null +++ b/app/validators/devise_email_validator.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +# DeviseEmailValidator +# +# Custom validator for email formats. It asserts that there are no +# @ symbols or whitespaces in either the localpart or the domain, and that +# there is a single @ symbol separating the localpart and the domain. +# +# The available options are: +# - regexp: Email regular expression used to validate email formats as instance of Regexp class. +# If provided value has different type then a new Rexexp class instance is created using the value. +# Default: +Devise.email_regexp+ +# +# Example: +# class User < ActiveRecord::Base +# validates :personal_email, devise_email: true +# +# validates :public_email, devise_email: { regexp: Devise.email_regexp } +# end +class DeviseEmailValidator < ActiveModel::EachValidator + DEFAULT_OPTIONS = { + regexp: Devise.email_regexp + }.freeze + + def initialize(options) + options.reverse_merge!(DEFAULT_OPTIONS) + + raise ArgumentError, "Expected 'regexp' argument of type class Regexp" unless options[:regexp].is_a?(Regexp) + + super(options) + end + + def validate_each(record, attribute, value) + record.errors.add(attribute, :invalid) unless value =~ options[:regexp] + end +end diff --git a/app/validators/email_validator.rb b/app/validators/email_validator.rb deleted file mode 100644 index 9459edb7515..00000000000 --- a/app/validators/email_validator.rb +++ /dev/null @@ -1,7 +0,0 @@ -# frozen_string_literal: true - -class EmailValidator < ActiveModel::EachValidator - def validate_each(record, attribute, value) - record.errors.add(attribute, :invalid) unless value =~ Devise.email_regexp - end -end |