summaryrefslogtreecommitdiff
path: root/app/mailers
diff options
context:
space:
mode:
authorRémy Coutable <remy@rymai.me>2016-06-02 16:14:02 +0200
committerRémy Coutable <remy@rymai.me>2016-06-14 13:07:26 +0200
commit6d103a2f4764441b1650ba6d790732056c9a8516 (patch)
tree127216b5b120e88a53f7def0da28658f2150b682 /app/mailers
parentd75edf1a9854b2ab609c7d3acf5eee1ca89e8db9 (diff)
downloadgitlab-ce-6d103a2f4764441b1650ba6d790732056c9a8516.tar.gz
Factorize members mails into a new Emails::Members module
Signed-off-by: Rémy Coutable <remy@rymai.me>
Diffstat (limited to 'app/mailers')
-rw-r--r--app/mailers/emails/groups.rb73
-rw-r--r--app/mailers/emails/members.rb104
-rw-r--r--app/mailers/emails/projects.rb71
-rw-r--r--app/mailers/notify.rb2
4 files changed, 105 insertions, 145 deletions
diff --git a/app/mailers/emails/groups.rb b/app/mailers/emails/groups.rb
deleted file mode 100644
index fe218bfbe05..00000000000
--- a/app/mailers/emails/groups.rb
+++ /dev/null
@@ -1,73 +0,0 @@
-module Emails
- module Groups
- def group_access_requested_email(group_member_id)
- setup_group_member_mail(group_member_id)
-
- @requester = @group_member.created_by
-
- group_admins = User.where(id: @group.group_members.admins.pluck(:user_id)).pluck(:notification_email)
-
- mail(to: group_admins,
- subject: subject("Request to join #{@group.name} group"))
- end
-
- def group_access_granted_email(group_member_id)
- setup_group_member_mail(group_member_id)
-
- @current_user = @group_member.user
-
- mail(to: @current_user.notification_email,
- subject: subject("Access to #{@group.name} group was granted"))
- end
-
- def group_access_denied_email(group_id, user_id)
- @group = Group.find(group_id)
- @current_user = User.find(user_id)
- @target_url = group_url(@group)
-
- mail(to: @current_user.notification_email,
- subject: subject("Access to #{@group.name} group was denied"))
- end
-
- def group_member_invited_email(group_member_id, token)
- setup_group_member_mail(group_member_id)
-
- @token = token
- @current_user = @group_member.user
-
- mail(to: @group_member.invite_email,
- subject: "Invitation to join group #{@group.name}")
- end
-
- def group_invite_accepted_email(group_member_id)
- setup_group_member_mail(group_member_id)
- return if @group_member.created_by.nil?
-
- @current_user = @group_member.created_by
-
- mail(to: @current_user.notification_email,
- subject: subject("Invitation accepted"))
- end
-
- def group_invite_declined_email(group_id, invite_email, access_level, created_by_id)
- return if created_by_id.nil?
-
- @group = Group.find(group_id)
- @current_user = @created_by = User.find(created_by_id)
- @access_level = access_level
- @invite_email = invite_email
-
- @target_url = group_url(@group)
- mail(to: @created_by.notification_email,
- subject: subject("Invitation declined"))
- end
-
- private
-
- def setup_group_member_mail(group_member_id)
- @group_member = GroupMember.find(group_member_id)
- @group = @group_member.group
- @target_url = group_url(@group)
- end
- end
-end
diff --git a/app/mailers/emails/members.rb b/app/mailers/emails/members.rb
new file mode 100644
index 00000000000..5fd55c149df
--- /dev/null
+++ b/app/mailers/emails/members.rb
@@ -0,0 +1,104 @@
+module Emails
+ module Members
+ extend ActiveSupport::Concern
+
+ included do
+ attr_reader :member_target_type
+ helper_method :member, :access_requester, :member_target_type, :member_target_name, :member_target_url
+ end
+
+ def member_access_requested_email(member_target_type, member_id)
+ @member_target_type = member_target_type
+ @member_id = member_id
+
+ admins = User.where(id: target.public_send(members_association).admins.pluck(:user_id)).pluck(:notification_email)
+
+ mail(to: admins,
+ subject: subject("Request to join the #{member_target_name} #{member_target_type}"))
+ end
+
+ def member_access_granted_email(member_target_type, member_id)
+ @member_target_type = member_target_type
+ @member_id = member_id
+
+ mail(to: member.user.notification_email,
+ subject: subject("Access to the #{member_target_name} #{member_target_type} was granted"))
+ end
+
+ def member_access_denied_email(member_target_type, target_id, user_id)
+ @member_target_type = member_target_type
+ @target = target_class.find(target_id)
+
+ mail(to: User.find(user_id).notification_email,
+ subject: subject("Access to the #{member_target_name} #{member_target_type} was denied"))
+ end
+
+ def member_invited_email(member_target_type, member_id, token)
+ @member_target_type = member_target_type
+ @member_id = member_id
+ @token = token
+
+ mail(to: member.invite_email,
+ subject: "Invitation to join the #{member_target_name} #{member_target_type}")
+ end
+
+ def member_invite_accepted_email(member_target_type, member_id)
+ @member_target_type = member_target_type
+ @member_id = member_id
+ return if access_requester.nil?
+
+ mail(to: access_requester.notification_email,
+ subject: subject('Invitation accepted'))
+ end
+
+ def member_invite_declined_email(member_target_type, target_id, invite_email, created_by_id)
+ return if created_by_id.nil?
+
+ @member_target_type = member_target_type
+ @target = target_class.find(target_id)
+ @invite_email = invite_email
+
+ mail(to: User.find(created_by_id).notification_email,
+ subject: subject('Invitation declined'))
+ end
+
+ def member
+ @member ||= member_class.find(@member_id)
+ end
+
+ def access_requester
+ @access_requester ||= member.created_by
+ end
+
+ def member_target_name
+ case member_target_type
+ when 'project'
+ target.name_with_namespace
+ else
+ target.name
+ end
+ end
+
+ def member_target_url
+ @member_target_url ||= target.web_url
+ end
+
+ private
+
+ def target
+ @target ||= member.public_send(member_target_type)
+ end
+
+ def target_class
+ @target_class ||= member_target_type.classify.constantize
+ end
+
+ def member_class
+ @member_class ||= "#{member_target_type.classify}Member".constantize
+ end
+
+ def members_association
+ @members_association ||= member_class.to_s.tableize
+ end
+ end
+end
diff --git a/app/mailers/emails/projects.rb b/app/mailers/emails/projects.rb
index 43a2a7e80a8..689fb3e0ffb 100644
--- a/app/mailers/emails/projects.rb
+++ b/app/mailers/emails/projects.rb
@@ -1,68 +1,5 @@
module Emails
module Projects
- def project_access_requested_email(project_member_id)
- setup_project_member_mail(project_member_id)
-
- @requester = @project_member.created_by
-
- project_admins = User.where(id: @project.project_members.admins.pluck(:user_id)).pluck(:notification_email)
-
- mail(to: project_admins,
- subject: subject("Request to join #{@project.name_with_namespace} project"))
- end
-
- def project_access_granted_email(project_member_id)
- setup_project_member_mail(project_member_id)
-
- @current_user = @project_member.user
-
- mail(to: @current_user.notification_email,
- subject: subject("Access to #{@project.name_with_namespace} project was granted"))
- end
-
- def project_access_denied_email(project_id, user_id)
- @project = Project.find(project_id)
- @current_user = User.find(user_id)
- @target_url = namespace_project_url(@project.namespace, @project)
-
- mail(to: @current_user.notification_email,
- subject: subject("Access to #{@project.name_with_namespace} project was denied"))
- end
-
- def project_member_invited_email(project_member_id, token)
- setup_project_member_mail(project_member_id)
-
- @token = token
- @current_user = @project_member.user
-
- mail(to: @project_member.invite_email,
- subject: "Invitation to join project #{@project.name_with_namespace}")
- end
-
- def project_invite_accepted_email(project_member_id)
- setup_project_member_mail(project_member_id)
- return if @project_member.created_by.nil?
-
- @current_user = @project_member.created_by
-
- mail(to: @project_member.created_by.notification_email,
- subject: subject("Invitation accepted"))
- end
-
- def project_invite_declined_email(project_id, invite_email, access_level, created_by_id)
- return if created_by_id.nil?
-
- @project = Project.find(project_id)
- @current_user = @created_by = User.find(created_by_id)
- @access_level = access_level
- @invite_email = invite_email
-
- @target_url = namespace_project_url(@project.namespace, @project)
-
- mail(to: @created_by.notification_email,
- subject: subject("Invitation declined"))
- end
-
def project_was_moved_email(project_id, user_id, old_path_with_namespace)
@current_user = @user = User.find user_id
@project = Project.find project_id
@@ -88,13 +25,5 @@ module Emails
reply_to: @message.reply_to,
subject: @message.subject)
end
-
- private
-
- def setup_project_member_mail(project_member_id)
- @project_member = ProjectMember.find(project_member_id)
- @project = @project_member.project
- @target_url = namespace_project_url(@project.namespace, @project)
- end
end
end
diff --git a/app/mailers/notify.rb b/app/mailers/notify.rb
index 1c663bdd521..bd5c6788cce 100644
--- a/app/mailers/notify.rb
+++ b/app/mailers/notify.rb
@@ -6,8 +6,8 @@ class Notify < BaseMailer
include Emails::Notes
include Emails::Projects
include Emails::Profile
- include Emails::Groups
include Emails::Builds
+ include Emails::Members
add_template_helper MergeRequestsHelper
add_template_helper DiffHelper