summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/observers/note_observer.rb33
-rw-r--r--app/observers/user_observer.rb7
-rw-r--r--app/services/notification_service.rb28
3 files changed, 34 insertions, 34 deletions
diff --git a/app/observers/note_observer.rb b/app/observers/note_observer.rb
index 1c3c1ad31cf..944c68393ab 100644
--- a/app/observers/note_observer.rb
+++ b/app/observers/note_observer.rb
@@ -1,41 +1,10 @@
class NoteObserver < ActiveRecord::Observer
def after_create(note)
- send_notify_mails(note)
+ notification.new_note(note)
end
protected
- def send_notify_mails(note)
- if note.notify
- notify_team(note)
- elsif note.notify_author
- # Notify only author of resource
- if note.commit_author
- Notify.delay.note_commit_email(note.commit_author.id, note.id)
- end
- else
- # Otherwise ignore it
- nil
- end
- end
-
- # Notifies the whole team except the author of note
- def notify_team(note)
- # Note: wall posts are not "attached" to anything, so fall back to "Wall"
- noteable_type = note.noteable_type.presence || "Wall"
- notify_method = "note_#{noteable_type.underscore}_email".to_sym
-
- if Notify.respond_to? notify_method
- team_without_note_author(note).map do |u|
- Notify.delay.send(notify_method, u.id, note.id)
- end
- end
- end
-
- def team_without_note_author(note)
- note.project.users.reject { |u| u.id == note.author.id }
- end
-
def notification
NotificationService.new
end
diff --git a/app/observers/user_observer.rb b/app/observers/user_observer.rb
index 6c461e07865..7ce3be0c654 100644
--- a/app/observers/user_observer.rb
+++ b/app/observers/user_observer.rb
@@ -2,8 +2,7 @@ class UserObserver < ActiveRecord::Observer
def after_create(user)
log_info("User \"#{user.name}\" (#{user.email}) was created")
- # Dont email omniauth created users
- Notify.delay.new_user_email(user.id, user.password) unless user.extern_uid?
+ notification.new_user(user)
end
def after_destroy user
@@ -25,4 +24,8 @@ class UserObserver < ActiveRecord::Observer
def log_info message
Gitlab::AppLogger.info message
end
+
+ def notification
+ NotificationService.new
+ end
end
diff --git a/app/services/notification_service.rb b/app/services/notification_service.rb
index 873fc297d77..05a6730f918 100644
--- a/app/services/notification_service.rb
+++ b/app/services/notification_service.rb
@@ -80,4 +80,32 @@ class NotificationService
Notify.delay.reassigned_merge_request_email(recipient_id, merge_request.id, merge_request.assignee_id_was)
end
end
+
+ # Notify new user with email after creation
+ def new_user(user)
+ # Dont email omniauth created users
+ Notify.delay.new_user_email(user.id, user.password) unless user.extern_uid?
+ end
+
+ # Notify users on new note in system
+ #
+ # TODO: split on methods and refactor
+ #
+ def new_note(note)
+ if note.notify
+ users = note.project.users.reject { |u| u.id == note.author.id }
+
+ # Note: wall posts are not "attached" to anything, so fall back to "Wall"
+ noteable_type = note.noteable_type.presence || "Wall"
+ notify_method = "note_#{noteable_type.underscore}_email".to_sym
+
+ if Notify.respond_to? notify_method
+ team_without_note_author(note).map do |u|
+ Notify.delay.send(notify_method, u.id, note.id)
+ end
+ end
+ elsif note.notify_author && note.commit_author
+ Notify.delay.note_commit_email(note.commit_author.id, note.id)
+ end
+ end
end