diff options
author | Horatiu Eugen Vlad <horatiu@vlad.eu> | 2018-10-27 00:39:00 +0200 |
---|---|---|
committer | Horatiu Eugen Vlad <horatiu@vlad.eu> | 2019-03-05 19:56:01 +0000 |
commit | c8c0ea6c52d46ce63d838d1e739355d4deace434 (patch) | |
tree | a91cbe57b1cc4235f3be6b32f2829e200c73de09 /app/validators | |
parent | 60876192f89e41494cb56e2dc0a90f5f0dbfa716 (diff) | |
download | gitlab-ce-c8c0ea6c52d46ce63d838d1e739355d4deace434.tar.gz |
Align EmailValidator to validate_email gem implementation.
Renamed EmailValidator to DeviseEmailValidator to avoid 'email:' naming collision with ActiveModel::Validations::EmailValidator in 'validates' statement.
Make use of the options attribute of the parent class ActiveModel::EachValidator.
Add more options: regex.
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 |