diff --git a/app/controllers/profiles/emails_controller.rb b/app/controllers/profiles/emails_controller.rb index b5df4c9554b..0cd5a7db098 100644 --- a/app/controllers/profiles/emails_controller.rb +++ b/app/controllers/profiles/emails_controller.rb @@ -1,4 +1,7 @@ class Profiles::EmailsController < Profiles::ApplicationController + + before_action :find_email, only: [:destroy, :resend_confirmation_instructions] + def index @primary = current_user.email @emails = current_user.emails.order_id_desc @@ -14,9 +17,7 @@ class Profiles::EmailsController < Profiles::ApplicationController end def destroy - @email = current_user.emails.find(params[:id]) - - Emails::DestroyService.new(current_user, email: @email.email).execute + Emails::DestroyService.new(current_user).execute(@email) respond_to do |format| format.html { redirect_to profile_emails_url, status: 302 } @@ -25,8 +26,7 @@ class Profiles::EmailsController < Profiles::ApplicationController end def resend_confirmation_instructions - @email = current_user.emails.find(params[:id]) - if @email && Emails::ConfirmService.new(current_user, email: @email.email).execute + if Emails::ConfirmService.new(current_user).execute(@email) flash[:notice] = "Confirmation email sent to #{@email.email}" else flash[:alert] = "There was a problem sending the confirmation email" @@ -39,4 +39,8 @@ class Profiles::EmailsController < Profiles::ApplicationController def email_params params.require(:email).permit(:email) end + + def find_email + @email = current_user.emails.find(params[:id]) + end end diff --git a/app/services/emails/base_service.rb b/app/services/emails/base_service.rb index ace49889097..227c87602fc 100644 --- a/app/services/emails/base_service.rb +++ b/app/services/emails/base_service.rb @@ -1,6 +1,6 @@ module Emails class BaseService - def initialize(user, opts) + def initialize(user, opts = {}) @user = user @email = opts[:email] end diff --git a/app/services/emails/confirm_service.rb b/app/services/emails/confirm_service.rb index 45845ccecc5..e764f18ddd0 100644 --- a/app/services/emails/confirm_service.rb +++ b/app/services/emails/confirm_service.rb @@ -1,7 +1,7 @@ module Emails class ConfirmService < ::Emails::BaseService - def execute - Email.find_by_email!(@email).resend_confirmation_instructions + def execute(email_record) + email_record.resend_confirmation_instructions end end end diff --git a/app/services/emails/destroy_service.rb b/app/services/emails/destroy_service.rb index d586b9dfe0c..d29d7e69bde 100644 --- a/app/services/emails/destroy_service.rb +++ b/app/services/emails/destroy_service.rb @@ -1,7 +1,7 @@ module Emails class DestroyService < ::Emails::BaseService - def execute - Email.find_by_email!(@email).destroy && update_secondary_emails! + def execute(email_record) + email_record.destroy && update_secondary_emails! end private diff --git a/spec/services/emails/confirm_service_spec.rb b/spec/services/emails/confirm_service_spec.rb index 21efe60266e..2b2c31e2521 100644 --- a/spec/services/emails/confirm_service_spec.rb +++ b/spec/services/emails/confirm_service_spec.rb @@ -2,14 +2,13 @@ require 'spec_helper' describe Emails::ConfirmService do 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 it 'sends a confirmation email again' do - user.emails.create(email: opts[:email]) - mail = service.execute + email = user.emails.create(email: 'new@email.com') + mail = service.execute(email) expect(mail.subject).to eq('Confirmation instructions') end end diff --git a/spec/services/emails/destroy_service_spec.rb b/spec/services/emails/destroy_service_spec.rb index 1f4294dd905..200e33a78cf 100644 --- a/spec/services/emails/destroy_service_spec.rb +++ b/spec/services/emails/destroy_service_spec.rb @@ -4,11 +4,11 @@ describe Emails::DestroyService do let!(:user) { create(: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 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