diff options
author | Robb Kidd <robb@thekidds.org> | 2012-10-09 18:25:29 -0400 |
---|---|---|
committer | Robb Kidd <robb@thekidds.org> | 2012-10-10 17:59:25 -0400 |
commit | 16ceae895e32c2474de04c42307d914bf9a4c304 (patch) | |
tree | aa3a0104064cd80e6716ec010257103b0e66f377 /app/observers/merge_request_observer.rb | |
parent | 2b7fd29b1abb3ab6ca5ece7fe2b093f6672796d6 (diff) | |
download | gitlab-ce-16ceae895e32c2474de04c42307d914bf9a4c304.tar.gz |
Separate observing of Note and MergeRequests
* Move is_assigned? and is_being_xx? methods to IssueCommonality
This is behavior merge requests have in common with issues. Moved
methods to IssueCommonality role. Put specs directly into
merge_request_spec because setup differs for issues and MRs
specifically in the "closed" factory to use.
* Add MergeRequestObserver. Parallels IssueObserver in almost every way.
Ripe for refactoring.
* Rename MailerObserver to NoteObserver
With merge request observing moved out of MailerObserver, all that
was left was Note logic. Renamed to NoteObserver, added tests and
updated application config for new observer names. Refactored
NoteObserver to use the note's author and not rely on current_user.
* Set current_user for MergeRequestObserver
IssueObserver and MergeRequestObserver are the only observers that
need a reference to the current_user that they cannot look up on
the objects they are observing.
Diffstat (limited to 'app/observers/merge_request_observer.rb')
-rw-r--r-- | app/observers/merge_request_observer.rb | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/app/observers/merge_request_observer.rb b/app/observers/merge_request_observer.rb new file mode 100644 index 00000000000..9090794ded2 --- /dev/null +++ b/app/observers/merge_request_observer.rb @@ -0,0 +1,31 @@ +class MergeRequestObserver < ActiveRecord::Observer + cattr_accessor :current_user + + def after_create(merge_request) + if merge_request.assignee && merge_request.assignee != current_user + Notify.new_merge_request_email(merge_request.id).deliver + end + end + + def after_update(merge_request) + send_reassigned_email(merge_request) if merge_request.is_being_reassigned? + + status = nil + status = 'closed' if merge_request.is_being_closed? + status = 'reopened' if merge_request.is_being_reopened? + if status + Note.create_status_change_note(merge_request, current_user, status) + end + end + + protected + + def send_reassigned_email(merge_request) + recipients_ids = merge_request.assignee_id_was, merge_request.assignee_id + recipients_ids.delete current_user.id + + recipients_ids.each do |recipient_id| + Notify.reassigned_merge_request_email(recipient_id, merge_request.id, merge_request.assignee_id_was).deliver + end + end +end |