deliver_later for controller actions.

This commit is contained in:
Mark Moser
2016-09-14 14:38:26 -05:00
parent d54b99135e
commit 9db007489f
10 changed files with 31 additions and 32 deletions

View File

@ -31,7 +31,7 @@ module Admin
redirect_to(admin_reset_request_path) and return if user.nil?
user.setup_reset
UserMailer.password_reset(user).deliver_now
UserMailer.password_reset(user).deliver_later
redirect_to admin_reset_request_path,
success: "Reset request sent! Please check your email for instructions."
end

View File

@ -14,7 +14,7 @@ module Admin
@user = User.create({ password: default_passwd }.merge(user_params.to_h))
if @user.persisted?
UserMailer.welcome(@user, default_passwd).deliver_now
UserMailer.welcome(@user, default_passwd).deliver_later
redirect_to admin_users_path, flash: { success: "Sucessfully created user #{@user.name}" }
else
flash[:error] = "Failed to save user."

View File

@ -26,14 +26,23 @@ class QuizController < ApplicationController
def submit_summary
not_completed_error = 'You must complete all questions to submit your test.'
record_error = 'There was a problem with your submission. Please try again later.'
redirect_to :summary, flash: { error: not_completed_error } and return unless prep_status.can_submit
redirect_to :thankyou and return if current_candidate.complete!
redirect_to :summary, flash: { error: record_error }
redirect_to :thankyou and return if complete_and_email
redirect_to :summary, flash: { error: 'Sorry, there was a problem. Please try again.' }
end
private
def complete_and_email
if current_candidate.update_attributes(completed: true)
CandidateMailer.submitted(current_candidate).deliver_later
RecruiterMailer.candidate_submitted(current_candidate).deliver_later
ReviewerMailer.candidate_submission(current_candidate).deliver_later
return true
end
false
end
def prep_question qid
@question = current_candidate.fetch_question(qid)
end

View File

@ -15,8 +15,8 @@ class RecruiterController < ApplicationController
@candidate = Candidate.create(candidate_params.merge(recruiter_id: current_recruiter.id))
if @candidate.persisted?
CandidateMailer.welcome(@candidate).deliver_now
RecruiterMailer.candidate_created(@candidate).deliver_now
CandidateMailer.welcome(@candidate).deliver_later
RecruiterMailer.candidate_created(@candidate).deliver_later
redirect_to recruiter_path, flash: { success: "Sucessfully created candidate #{@candidate.name}" }
else
flash[:error] = "Failed to save candidate."

View File

@ -40,19 +40,6 @@ class Candidate < ApplicationRecord
"#{my_status.progress}%"
end
# FIXME: This feels wrong here. Mail deliveries should be in controller.
# Privatize in QuizController
# also, bang methods in ruby do an action and replace, or return nil
def complete!
if update_attributes(completed: true)
CandidateMailer.submitted(self).deliver_now
RecruiterMailer.candidate_submitted(self).deliver_now
ReviewerMailer.candidate_submission(self).deliver_now
return true
end
false
end
private
def generate_test_hash