Refactor RepositoryPush, move to Message namespace
This commit is contained in:
parent
45f7f01f19
commit
e2f937ce22
|
@ -60,26 +60,28 @@ module Emails
|
|||
end
|
||||
|
||||
def repository_push_email(project_id, recipient, opts = {})
|
||||
email = Gitlab::Email::RepositoryPush.new(project_id, recipient, opts)
|
||||
repository_push =
|
||||
Gitlab::Email::Message::RepositoryPush.new(self, project_id, recipient, opts)
|
||||
|
||||
@project = email.project
|
||||
@current_user = @author = email.author
|
||||
@reverse_compare = email.reverse_compare
|
||||
@compare = email.compare
|
||||
@ref_name = email.ref_name
|
||||
@ref_type = email.ref_type
|
||||
@action = email.action
|
||||
@disable_diffs = email.disable_diffs
|
||||
@commits = email.commits
|
||||
@diffs = email.diffs
|
||||
@action_name = email.action_name
|
||||
@target_url = email.target_url
|
||||
@project = repository_push.project
|
||||
@current_user = @author = repository_push.author
|
||||
@reverse_compare = repository_push.reverse_compare
|
||||
@compare = repository_push.compare
|
||||
@ref_name = repository_push.ref_name
|
||||
@ref_type = repository_push.ref_type
|
||||
@action = repository_push.action
|
||||
@action_name = repository_push.action_name
|
||||
@disable_diffs = repository_push.disable_diffs
|
||||
@commits = repository_push.commits
|
||||
@diffs = repository_push.diffs
|
||||
@target_url = repository_push.target_url
|
||||
@disable_footer = true
|
||||
|
||||
mail(from: sender(email.author_id, email.send_from_committer_email),
|
||||
reply_to: email.reply_to,
|
||||
to: email.recipient,
|
||||
subject: email.subject)
|
||||
mail(from: sender(repository_push.author_id,
|
||||
repository_push.send_from_committer_email),
|
||||
reply_to: repository_push.reply_to,
|
||||
to: repository_push.recipient,
|
||||
subject: repository_push.subject)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -0,0 +1,120 @@
|
|||
module Gitlab
|
||||
module Email
|
||||
module Message
|
||||
class RepositoryPush
|
||||
attr_reader :compare, :reverse_compare, :send_from_committer_email,
|
||||
:disable_diffs, :action, :ref, :author_id
|
||||
attr_accessor :recipient
|
||||
|
||||
def initialize(notify, project_id, recipient, opts = {})
|
||||
raise ArgumentError, 'Missing arguments: author_id, ref, action' unless
|
||||
opts[:author_id] && opts[:ref] && opts[:action]
|
||||
|
||||
@notify = notify
|
||||
@project_id = project_id
|
||||
@recipient = recipient
|
||||
|
||||
@author_id = opts[:author_id]
|
||||
@ref = opts[:ref]
|
||||
@action = opts[:action]
|
||||
|
||||
@compare = opts[:compare] || nil
|
||||
@reverse_compare = opts[:reverse_compare] || false
|
||||
@send_from_committer_email = opts[:send_from_committer_email] || false
|
||||
@disable_diffs = opts[:disable_diffs] || false
|
||||
|
||||
@author = author
|
||||
@project = project
|
||||
@commits = commits
|
||||
@diffs = diffs
|
||||
@ref_name = ref_name
|
||||
@ref_type = ref_type
|
||||
@action_name = action_name
|
||||
end
|
||||
|
||||
def project
|
||||
Project.find(@project_id)
|
||||
end
|
||||
|
||||
def author
|
||||
User.find(@author_id)
|
||||
end
|
||||
|
||||
def commits
|
||||
Commit.decorate(@compare.commits, @project) if @compare
|
||||
end
|
||||
|
||||
def diffs
|
||||
@compare.diffs if @compare
|
||||
end
|
||||
|
||||
def action_name
|
||||
case @action
|
||||
when :create
|
||||
'pushed new'
|
||||
when :delete
|
||||
'deleted'
|
||||
else
|
||||
'pushed to'
|
||||
end
|
||||
end
|
||||
|
||||
def subject
|
||||
subject_text = '[Git]'
|
||||
subject_text << "[#{@project.path_with_namespace}]"
|
||||
subject_text << "[#{@ref_name}]" if @action == :push
|
||||
subject_text << ' '
|
||||
|
||||
if @action == :push
|
||||
if @commits.length > 1
|
||||
subject_text << "Deleted " if @reverse_compare
|
||||
subject_text << "#{@commits.length} commits: #{@commits.first.title}"
|
||||
else
|
||||
subject_text << "Deleted 1 commit: " if @reverse_compare
|
||||
subject_text << @commits.first.title
|
||||
end
|
||||
else
|
||||
subject_action = @action_name.dup
|
||||
subject_action[0] = subject_action[0].capitalize
|
||||
subject_text << "#{subject_action} #{@ref_type} #{@ref_name}"
|
||||
end
|
||||
end
|
||||
|
||||
def ref_name
|
||||
Gitlab::Git.ref_name(@ref)
|
||||
end
|
||||
|
||||
def ref_type
|
||||
Gitlab::Git.tag_ref?(@ref) ? 'tag' : 'branch'
|
||||
end
|
||||
|
||||
def target_url
|
||||
if @action == :push
|
||||
if @commits.length > 1
|
||||
@notify.namespace_project_compare_url(@project.namespace,
|
||||
@project,
|
||||
from: Commit.new(@compare.base, @project),
|
||||
to: Commit.new(@compare.head, @project))
|
||||
else
|
||||
@notify.namespace_project_commit_url(@project.namespace,
|
||||
@project, @commits.first)
|
||||
end
|
||||
else
|
||||
unless @action == :delete
|
||||
@notify.namespace_project_tree_url(@project.namespace,
|
||||
@project, @ref_name)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def reply_to
|
||||
if @send_from_committer_email && @notify.can_send_from_user_email?(@author)
|
||||
@author.email
|
||||
else
|
||||
Gitlab.config.gitlab.email_reply_to
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,116 +0,0 @@
|
|||
module Gitlab
|
||||
module Email
|
||||
class RepositoryPush
|
||||
attr_reader :compare, :reverse_compare, :send_from_cmmitter_email, :disable_diffs,
|
||||
:action, :ref, :author_id
|
||||
|
||||
def initialize(project_id, recipient, opts = {})
|
||||
raise ArgumentError, 'Missing arguments: author_id, ref, action' unless
|
||||
opts[:author_id] && opts[:ref] && opts[:action]
|
||||
|
||||
@project_id = project_id
|
||||
@recipient = recipient
|
||||
|
||||
@author_id = opts[:author_id]
|
||||
@ref = opts[:ref]
|
||||
@action = opts[:action]
|
||||
|
||||
@compare = opts[:compare] || nil
|
||||
@reverse_compare = opts[:reverse_compare] || false
|
||||
@send_from_committer_email = opts[:send_from_committer_email] || false
|
||||
@disable_diffs = opts[:disable_diffs] || false
|
||||
|
||||
@author = author
|
||||
@project = project
|
||||
@commits = commits
|
||||
@diffs = diffs
|
||||
@ref_name = ref_name
|
||||
@ref_type = ref_type
|
||||
@action_name = action_name
|
||||
end
|
||||
|
||||
def project
|
||||
Project.find(@project_id)
|
||||
end
|
||||
|
||||
def author
|
||||
User.find(@author_id)
|
||||
end
|
||||
|
||||
def commits
|
||||
Commit.decorate(@compare.commits, @project) if @compare
|
||||
end
|
||||
|
||||
def diffs
|
||||
@compare.diffs if @compare
|
||||
end
|
||||
|
||||
def action_name
|
||||
case @action
|
||||
when :create
|
||||
'pushed new'
|
||||
when :delete
|
||||
'deleted'
|
||||
else
|
||||
'pushed to'
|
||||
end
|
||||
end
|
||||
|
||||
def subject
|
||||
subject_text = '[Git]'
|
||||
subject_text << "[#{@project.path_with_namespace}]"
|
||||
subject_text << "[#{@ref_name}]" if @action == :push
|
||||
subject_text << ' '
|
||||
|
||||
if @action == :push
|
||||
if @commits.length > 1
|
||||
subject_text << "Deleted " if @reverse_compare
|
||||
subject_text << "#{@commits.length} commits: #{@commits.first.title}"
|
||||
else
|
||||
subject_text << "Deleted 1 commit: " if @reverse_compare
|
||||
subject_text << @commits.first.title
|
||||
end
|
||||
end
|
||||
|
||||
subject_action = @action_name.dup
|
||||
subject_action[0] = subject_action[0].capitalize
|
||||
subject_text << "#{subject_action} #{@ref_type} #{@ref_name}"
|
||||
end
|
||||
|
||||
def ref_name
|
||||
Gitlab::Git.ref_name(@ref)
|
||||
end
|
||||
|
||||
def ref_type
|
||||
Gitlab::Git.tag_ref?(@ref) ? 'tag' : 'branch'
|
||||
end
|
||||
|
||||
def target_url
|
||||
if action == :push
|
||||
if @commits.length > 1
|
||||
namespace_project_compare_url(@project.namespace,
|
||||
@project,
|
||||
from: Commit.new(@compare.base, @project),
|
||||
to: Commit.new(@compare.head, @project))
|
||||
else
|
||||
namespace_project_commit_url(@project.namespace,
|
||||
@project, @commits.first)
|
||||
end
|
||||
end
|
||||
|
||||
if action != :delete && action != :push
|
||||
namespace_project_tree_url(@project.namespace,
|
||||
@project, @ref_name)
|
||||
end
|
||||
end
|
||||
|
||||
def reply_to
|
||||
if @send_from_committer_email && can_send_from_user_email?(@author)
|
||||
@author.email
|
||||
else
|
||||
Gitlab.config.gitlab.email_reply_to
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue