Commit 72b9c14ebca18b065085f18590e09ccb6137dc6f
1 parent
f5ee330a
Exists in
master
and in
4 other branches
refactored mail observer
Showing
1 changed file
with
40 additions
and
37 deletions
Show diff stats
app/models/mailer_observer.rb
@@ -27,25 +27,31 @@ class MailerObserver < ActiveRecord::Observer | @@ -27,25 +27,31 @@ class MailerObserver < ActiveRecord::Observer | ||
27 | end | 27 | end |
28 | 28 | ||
29 | def new_note(note) | 29 | def new_note(note) |
30 | - # Notify whole team except author of note | ||
31 | if note.notify | 30 | if note.notify |
32 | - note.project.users.reject { |u| u.id == current_user.id } .each do |u| | ||
33 | - case note.noteable_type | ||
34 | - when "Commit" then | ||
35 | - Notify.note_commit_email(u.id, note.id).deliver | ||
36 | - when "Issue" then | ||
37 | - Notify.note_issue_email(u.id, note.id).deliver | ||
38 | - when "MergeRequest" then | ||
39 | - Notify.note_merge_request_email(u.id, note.id).deliver | ||
40 | - when "Snippet" | ||
41 | - true | ||
42 | - else | ||
43 | - Notify.note_wall_email(u.id, note.id).deliver | ||
44 | - end | ||
45 | - end | ||
46 | - # Notify only author of resource | 31 | + # Notify whole team except author of note |
32 | + notify_note(note) | ||
47 | elsif note.notify_author | 33 | elsif note.notify_author |
34 | + # Notify only author of resource | ||
48 | Notify.note_commit_email(note.commit_author.id, note.id).deliver | 35 | Notify.note_commit_email(note.commit_author.id, note.id).deliver |
36 | + else | ||
37 | + # Otherwise ignore it | ||
38 | + nil | ||
39 | + end | ||
40 | + end | ||
41 | + | ||
42 | + def notify_note note | ||
43 | + # reject author of note from mail list | ||
44 | + users = note.project.users.reject { |u| u.id == current_user.id } | ||
45 | + | ||
46 | + users.each do |u| | ||
47 | + case note.noteable_type | ||
48 | + when "Commit"; Notify.note_commit_email(u.id, note.id).deliver | ||
49 | + when "Issue"; Notify.note_issue_email(u.id, note.id).deliver | ||
50 | + when "MergeRequest"; Notify.note_merge_request_email(u.id, note.id).deliver | ||
51 | + when "Snippet"; true | ||
52 | + else | ||
53 | + Notify.note_wall_email(u.id, note.id).deliver | ||
54 | + end | ||
49 | end | 55 | end |
50 | end | 56 | end |
51 | 57 | ||
@@ -56,37 +62,34 @@ class MailerObserver < ActiveRecord::Observer | @@ -56,37 +62,34 @@ class MailerObserver < ActiveRecord::Observer | ||
56 | end | 62 | end |
57 | 63 | ||
58 | def changed_merge_request(merge_request) | 64 | def changed_merge_request(merge_request) |
59 | - if merge_request.assignee_id_changed? | ||
60 | - recipients_ids = merge_request.assignee_id_was, merge_request.assignee_id | ||
61 | - recipients_ids.delete current_user.id | ||
62 | - | ||
63 | - User.find(recipients_ids).each do |user| | ||
64 | - Notify.reassigned_merge_request_email(user.id, merge_request.id, merge_request.assignee_id_was).deliver | ||
65 | - end | ||
66 | - end | ||
67 | - | ||
68 | - if merge_request.closed_changed? | ||
69 | - note = Note.new(:noteable => merge_request, :project => merge_request.project) | ||
70 | - note.author = current_user | ||
71 | - note.note = "_Status changed to #{merge_request.closed ? 'closed' : 'reopened'}_" | ||
72 | - note.save() | ||
73 | - end | 65 | + status_notify_and_comment issue, :reassigned_merge_request_email |
74 | end | 66 | end |
75 | 67 | ||
76 | def changed_issue(issue) | 68 | def changed_issue(issue) |
77 | - if issue.assignee_id_changed? | ||
78 | - recipients_ids = issue.assignee_id_was, issue.assignee_id | 69 | + status_notify_and_comment issue, :reassigned_issue_email |
70 | + end | ||
71 | + | ||
72 | + # This method used for Issues & Merge Requests | ||
73 | + # | ||
74 | + # It create a comment for Issue or MR if someone close/reopen. | ||
75 | + # It also notify via email if assignee was changed | ||
76 | + # | ||
77 | + def status_notify_and_comment target, mail_method | ||
78 | + # If assigne changed - notify to recipients | ||
79 | + if target.assignee_id_changed? | ||
80 | + recipients_ids = target.assignee_id_was, target.assignee_id | ||
79 | recipients_ids.delete current_user.id | 81 | recipients_ids.delete current_user.id |
80 | 82 | ||
81 | recipients_ids.each do |recipient_id| | 83 | recipients_ids.each do |recipient_id| |
82 | - Notify.reassigned_issue_email(recipient_id, issue.id, issue.assignee_id_was).deliver | 84 | + Notify.send(mail_method, recipient_id, target.id, target.assignee_id_was).deliver |
83 | end | 85 | end |
84 | end | 86 | end |
85 | 87 | ||
86 | - if issue.closed_changed? | ||
87 | - note = Note.new(:noteable => issue, :project => issue.project) | 88 | + # Create comment about status changed |
89 | + if target.closed_changed? | ||
90 | + note = Note.new(:noteable => target, :project => target.project) | ||
88 | note.author = current_user | 91 | note.author = current_user |
89 | - note.note = "_Status changed to #{issue.closed ? 'closed' : 'reopened'}_" | 92 | + note.note = "_Status changed to #{target.closed ? 'closed' : 'reopened'}_" |
90 | note.save() | 93 | note.save() |
91 | end | 94 | end |
92 | end | 95 | end |