Commit 6abf58466fc47a7efd86a03c5b0b3878edfbce36
1 parent
f93c4dc0
Exists in
master
and in
4 other branches
Move new_note email logic to NotificationService
Showing
3 changed files
with
34 additions
and
34 deletions
Show diff stats
app/observers/note_observer.rb
| 1 | 1 | class NoteObserver < ActiveRecord::Observer |
| 2 | 2 | def after_create(note) |
| 3 | - send_notify_mails(note) | |
| 3 | + notification.new_note(note) | |
| 4 | 4 | end |
| 5 | 5 | |
| 6 | 6 | protected |
| 7 | 7 | |
| 8 | - def send_notify_mails(note) | |
| 9 | - if note.notify | |
| 10 | - notify_team(note) | |
| 11 | - elsif note.notify_author | |
| 12 | - # Notify only author of resource | |
| 13 | - if note.commit_author | |
| 14 | - Notify.delay.note_commit_email(note.commit_author.id, note.id) | |
| 15 | - end | |
| 16 | - else | |
| 17 | - # Otherwise ignore it | |
| 18 | - nil | |
| 19 | - end | |
| 20 | - end | |
| 21 | - | |
| 22 | - # Notifies the whole team except the author of note | |
| 23 | - def notify_team(note) | |
| 24 | - # Note: wall posts are not "attached" to anything, so fall back to "Wall" | |
| 25 | - noteable_type = note.noteable_type.presence || "Wall" | |
| 26 | - notify_method = "note_#{noteable_type.underscore}_email".to_sym | |
| 27 | - | |
| 28 | - if Notify.respond_to? notify_method | |
| 29 | - team_without_note_author(note).map do |u| | |
| 30 | - Notify.delay.send(notify_method, u.id, note.id) | |
| 31 | - end | |
| 32 | - end | |
| 33 | - end | |
| 34 | - | |
| 35 | - def team_without_note_author(note) | |
| 36 | - note.project.users.reject { |u| u.id == note.author.id } | |
| 37 | - end | |
| 38 | - | |
| 39 | 8 | def notification |
| 40 | 9 | NotificationService.new |
| 41 | 10 | end | ... | ... |
app/observers/user_observer.rb
| ... | ... | @@ -2,8 +2,7 @@ class UserObserver < ActiveRecord::Observer |
| 2 | 2 | def after_create(user) |
| 3 | 3 | log_info("User \"#{user.name}\" (#{user.email}) was created") |
| 4 | 4 | |
| 5 | - # Dont email omniauth created users | |
| 6 | - Notify.delay.new_user_email(user.id, user.password) unless user.extern_uid? | |
| 5 | + notification.new_user(user) | |
| 7 | 6 | end |
| 8 | 7 | |
| 9 | 8 | def after_destroy user |
| ... | ... | @@ -25,4 +24,8 @@ class UserObserver < ActiveRecord::Observer |
| 25 | 24 | def log_info message |
| 26 | 25 | Gitlab::AppLogger.info message |
| 27 | 26 | end |
| 27 | + | |
| 28 | + def notification | |
| 29 | + NotificationService.new | |
| 30 | + end | |
| 28 | 31 | end | ... | ... |
app/services/notification_service.rb
| ... | ... | @@ -80,4 +80,32 @@ class NotificationService |
| 80 | 80 | Notify.delay.reassigned_merge_request_email(recipient_id, merge_request.id, merge_request.assignee_id_was) |
| 81 | 81 | end |
| 82 | 82 | end |
| 83 | + | |
| 84 | + # Notify new user with email after creation | |
| 85 | + def new_user(user) | |
| 86 | + # Dont email omniauth created users | |
| 87 | + Notify.delay.new_user_email(user.id, user.password) unless user.extern_uid? | |
| 88 | + end | |
| 89 | + | |
| 90 | + # Notify users on new note in system | |
| 91 | + # | |
| 92 | + # TODO: split on methods and refactor | |
| 93 | + # | |
| 94 | + def new_note(note) | |
| 95 | + if note.notify | |
| 96 | + users = note.project.users.reject { |u| u.id == note.author.id } | |
| 97 | + | |
| 98 | + # Note: wall posts are not "attached" to anything, so fall back to "Wall" | |
| 99 | + noteable_type = note.noteable_type.presence || "Wall" | |
| 100 | + notify_method = "note_#{noteable_type.underscore}_email".to_sym | |
| 101 | + | |
| 102 | + if Notify.respond_to? notify_method | |
| 103 | + team_without_note_author(note).map do |u| | |
| 104 | + Notify.delay.send(notify_method, u.id, note.id) | |
| 105 | + end | |
| 106 | + end | |
| 107 | + elsif note.notify_author && note.commit_author | |
| 108 | + Notify.delay.note_commit_email(note.commit_author.id, note.id) | |
| 109 | + end | |
| 110 | + end | |
| 83 | 111 | end | ... | ... |