Commit 30e3a49e authored by Brett Walker's avatar Brett Walker

optimized the email services

parent a9b31786
class Profiles::EmailsController < Profiles::ApplicationController class Profiles::EmailsController < Profiles::ApplicationController
before_action :find_email, only: [:destroy, :resend_confirmation_instructions]
def index def index
@primary = current_user.email @primary = current_user.email
@emails = current_user.emails.order_id_desc @emails = current_user.emails.order_id_desc
...@@ -14,9 +17,7 @@ class Profiles::EmailsController < Profiles::ApplicationController ...@@ -14,9 +17,7 @@ class Profiles::EmailsController < Profiles::ApplicationController
end end
def destroy def destroy
@email = current_user.emails.find(params[:id]) Emails::DestroyService.new(current_user).execute(@email)
Emails::DestroyService.new(current_user, email: @email.email).execute
respond_to do |format| respond_to do |format|
format.html { redirect_to profile_emails_url, status: 302 } format.html { redirect_to profile_emails_url, status: 302 }
...@@ -25,8 +26,7 @@ class Profiles::EmailsController < Profiles::ApplicationController ...@@ -25,8 +26,7 @@ class Profiles::EmailsController < Profiles::ApplicationController
end end
def resend_confirmation_instructions def resend_confirmation_instructions
@email = current_user.emails.find(params[:id]) if Emails::ConfirmService.new(current_user).execute(@email)
if @email && Emails::ConfirmService.new(current_user, email: @email.email).execute
flash[:notice] = "Confirmation email sent to #{@email.email}" flash[:notice] = "Confirmation email sent to #{@email.email}"
else else
flash[:alert] = "There was a problem sending the confirmation email" flash[:alert] = "There was a problem sending the confirmation email"
...@@ -39,4 +39,8 @@ class Profiles::EmailsController < Profiles::ApplicationController ...@@ -39,4 +39,8 @@ class Profiles::EmailsController < Profiles::ApplicationController
def email_params def email_params
params.require(:email).permit(:email) params.require(:email).permit(:email)
end end
def find_email
@email = current_user.emails.find(params[:id])
end
end end
module Emails module Emails
class BaseService class BaseService
def initialize(user, opts) def initialize(user, opts = {})
@user = user @user = user
@email = opts[:email] @email = opts[:email]
end end
......
module Emails module Emails
class ConfirmService < ::Emails::BaseService class ConfirmService < ::Emails::BaseService
def execute def execute(email_record)
Email.find_by_email!(@email).resend_confirmation_instructions email_record.resend_confirmation_instructions
end end
end end
end end
module Emails module Emails
class DestroyService < ::Emails::BaseService class DestroyService < ::Emails::BaseService
def execute def execute(email_record)
Email.find_by_email!(@email).destroy && update_secondary_emails! email_record.destroy && update_secondary_emails!
end end
private private
......
...@@ -2,14 +2,13 @@ require 'spec_helper' ...@@ -2,14 +2,13 @@ require 'spec_helper'
describe Emails::ConfirmService do describe Emails::ConfirmService do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:opts) { { email: 'new@email.com' } }
subject(:service) { described_class.new(user, opts) } subject(:service) { described_class.new(user) }
describe '#execute' do describe '#execute' do
it 'sends a confirmation email again' do it 'sends a confirmation email again' do
user.emails.create(email: opts[:email]) email = user.emails.create(email: 'new@email.com')
mail = service.execute mail = service.execute(email)
expect(mail.subject).to eq('Confirmation instructions') expect(mail.subject).to eq('Confirmation instructions')
end end
end end
......
...@@ -4,11 +4,11 @@ describe Emails::DestroyService do ...@@ -4,11 +4,11 @@ describe Emails::DestroyService do
let!(:user) { create(:user) } let!(:user) { create(:user) }
let!(:email) { create(:email, user: user) } let!(:email) { create(:email, user: user) }
subject(:service) { described_class.new(user, email: email.email) } subject(:service) { described_class.new(user) }
describe '#execute' do describe '#execute' do
it 'removes an email' do it 'removes an email' do
expect { service.execute }.to change { user.emails.count }.by(-1) expect { service.execute(email) }.to change { user.emails.count }.by(-1)
end end
end end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment