optimized the email services
This commit is contained in:
parent
a9b3178697
commit
30e3a49e23
6 changed files with 19 additions and 16 deletions
|
@ -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
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
module Emails
|
||||
class BaseService
|
||||
def initialize(user, opts)
|
||||
def initialize(user, opts = {})
|
||||
@user = user
|
||||
@email = opts[:email]
|
||||
end
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue