Implements Verification::Management::Email#save + refactors

This commit is contained in:
kikito
2015-10-02 13:20:44 +02:00
parent 3786d9d67f
commit 75721ab186
2 changed files with 30 additions and 15 deletions

View File

@@ -7,8 +7,7 @@ class Management::EmailVerificationsController < Management::BaseController
def create def create
@email_verification = Verification::Management::Email.new(email_verification_params) @email_verification = Verification::Management::Email.new(email_verification_params)
if @email_verification.valid? if @email_verification.save
@email_verification.send_email
render :sent render :sent
else else
render :new render :new

View File

@@ -5,8 +5,9 @@ class Verification::Management::Email
attr_accessor :document_number attr_accessor :document_number
attr_accessor :email attr_accessor :email
validates :document_type, :document_number, presence: true validates :document_type, :document_number, :email, presence: true
validate :validate_email validates :email, format: { with: Devise.email_regexp }, allow_blank: true
validate :validate_user
def user def user
@user ||= User.where(email: email).first @user ||= User.where(email: email).first
@@ -16,19 +17,34 @@ class Verification::Management::Email
user.present? user.present?
end end
def send_email def save
# FIXME return false unless valid?
# Should assign document_number here?
# Should send verification email here? plain_token, encrypted_token = Devise.token_generator.generate(User, :email_verification_token)
user.update(email_verification_token: plain_token)
Mailer.email_verification(user, email, encrypted_token).deliver_later
true
end end
def validate_email def already_verified?
if email.blank? user? && user.level_three_verified?
errors.add(:email, I18n.t('errors.messages.blank')) end
elsif email !~ Devise.email_regexp
errors.add(:email, I18n.t('errors.messages.invalid')) def document_number_mismatch?
elsif !user? user? && user.document_number.present? &&
(user.document_number != document_number || user.document_type != document_type)
end
def validate_user
return if errors.count > 0
errors.add(:email, I18n.t('errors.messages.user_not_found')) unless user? errors.add(:email, I18n.t('errors.messages.user_not_found')) unless user?
if already_verified?
errors.add(:email, I18n.t('management.users.already_verified'))
elsif document_number_mismatch?
errors.add(:email,
I18n.t('management.users.document_mismatch',
document_type: ApplicationController.helpers.humanize_document_type(user.document_type),
document_number: user.document_number))
end end
end end
end end