Permalink
Browse files

Move new_note email logic to NotificationService

  • Loading branch information...
1 parent f93c4dc commit 6abf58466fc47a7efd86a03c5b0b3878edfbce36 @randx randx committed Mar 26, 2013
Showing with 34 additions and 34 deletions.
  1. +1 −32 app/observers/note_observer.rb
  2. +5 −2 app/observers/user_observer.rb
  3. +28 −0 app/services/notification_service.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
@@ -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 @@ def after_save user
def log_info message
Gitlab::AppLogger.info message
end
+
+ def notification
+ NotificationService.new
+ end
end
@@ -80,4 +80,32 @@ def reassigned_merge_request(merge_request, current_user)
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

0 comments on commit 6abf584

Please sign in to comment.