summaryrefslogtreecommitdiff
path: root/app/models
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2014-06-17 22:51:43 +0300
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2014-06-17 22:51:43 +0300
commit2d87556847931bd146eddaafdee48c2f8954326c (patch)
treea46a490d98f4a14e0fec210453d1643e51bdf062 /app/models
parenta90a201d0ee3c9e33cc04075ac8a2509c1d2acc9 (diff)
downloadgitlab-ce-2d87556847931bd146eddaafdee48c2f8954326c.tar.gz
Remove rails observers from application
Diffstat (limited to 'app/models')
-rw-r--r--app/models/users_project.rb37
1 files changed, 37 insertions, 0 deletions
diff --git a/app/models/users_project.rb b/app/models/users_project.rb
index e8810f56def..6495bed4e61 100644
--- a/app/models/users_project.rb
+++ b/app/models/users_project.rb
@@ -37,6 +37,10 @@ class UsersProject < ActiveRecord::Base
scope :in_projects, ->(projects) { where(project_id: projects.map { |p| p.id }) }
scope :with_user, ->(user) { where(user_id: user.id) }
+ after_create :post_create_hook
+ after_update :post_update_hook
+ after_destroy :post_destroy_hook
+
class << self
# Add users to project teams with passed access option
@@ -114,4 +118,37 @@ class UsersProject < ActiveRecord::Base
def owner?
project.owner == user
end
+
+ def post_create_hook
+ Event.create(
+ project_id: self.project.id,
+ action: Event::JOINED,
+ author_id: self.user.id
+ )
+
+ notification_service.new_team_member(self)
+ system_hook_service.execute_hooks_for(self, :create)
+ end
+
+ def post_update_hook
+ notification_service.update_team_member(self) if self.project_access_changed?
+ end
+
+ def post_destroy_hook
+ Event.create(
+ project_id: self.project.id,
+ action: Event::LEFT,
+ author_id: self.user.id
+ )
+
+ system_hook_service.execute_hooks_for(self, :destroy)
+ end
+
+ def notification_service
+ NotificationService.new
+ end
+
+ def system_hook_service
+ SystemHooksService.new
+ end
end