summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrett Walker <brett@digitalmoksha.com>2017-09-12 17:36:59 +0200
committerBrett Walker <brett@digitalmoksha.com>2017-09-23 15:24:53 +0200
commit30e3a49e23f8ce0c2a07b13addc45951d7fc6719 (patch)
treec08428fd3331f8c5f638bd1e38916fe44ba2ed78
parenta9b31786971d83c193a1430df7c5c4550ba5aa6b (diff)
downloadgitlab-ce-30e3a49e23f8ce0c2a07b13addc45951d7fc6719.tar.gz
optimized the email services
-rw-r--r--app/controllers/profiles/emails_controller.rb14
-rw-r--r--app/services/emails/base_service.rb2
-rw-r--r--app/services/emails/confirm_service.rb4
-rw-r--r--app/services/emails/destroy_service.rb4
-rw-r--r--spec/services/emails/confirm_service_spec.rb7
-rw-r--r--spec/services/emails/destroy_service_spec.rb4
6 files changed, 19 insertions, 16 deletions
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