Commit 72b9c14ebca18b065085f18590e09ccb6137dc6f

Authored by Dmitriy Zaporozhets
1 parent f5ee330a

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 27 end
28 28  
29 29 def new_note(note)
30   - # Notify whole team except author of note
31 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 33 elsif note.notify_author
  34 + # Notify only author of resource
48 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 55 end
50 56 end
51 57  
... ... @@ -56,37 +62,34 @@ class MailerObserver < ActiveRecord::Observer
56 62 end
57 63  
58 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 66 end
75 67  
76 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 81 recipients_ids.delete current_user.id
80 82  
81 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 85 end
84 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 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 93 note.save()
91 94 end
92 95 end
... ...