Commit d9cd6269e991e187c2acf272240fcb332270a5c4
1 parent
86bd11cb
Exists in
master
and in
4 other branches
System Hooks: move callback to observer
Showing
5 changed files
with
69 additions
and
74 deletions
Show diff stats
app/models/project.rb
| ... | ... | @@ -107,32 +107,6 @@ class Project < ActiveRecord::Base |
| 107 | 107 | validate :check_limit |
| 108 | 108 | validate :repo_name |
| 109 | 109 | |
| 110 | - after_create :create_hooks | |
| 111 | - after_destroy :destroy_hooks | |
| 112 | - | |
| 113 | - def create_hooks | |
| 114 | - SystemHook.all_hooks_fire({ | |
| 115 | - event_name: "project_create", | |
| 116 | - name: self.name, | |
| 117 | - path: self.path, | |
| 118 | - project_id: self.id, | |
| 119 | - owner_name: self.owner.name, | |
| 120 | - owner_email: self.owner.email, | |
| 121 | - created_at: self.created_at | |
| 122 | - }) | |
| 123 | - end | |
| 124 | - | |
| 125 | - def destroy_hooks | |
| 126 | - SystemHook.all_hooks_fire({ | |
| 127 | - event_name: "project_destroy", | |
| 128 | - name: self.name, | |
| 129 | - path: self.path, | |
| 130 | - project_id: self.id, | |
| 131 | - owner_name: self.owner.name, | |
| 132 | - owner_email: self.owner.email, | |
| 133 | - }) | |
| 134 | - end | |
| 135 | - | |
| 136 | 110 | def check_limit |
| 137 | 111 | unless owner.can_create_project? |
| 138 | 112 | errors[:base] << ("Your own projects limit is #{owner.projects_limit}! Please contact administrator to increase it") | ... | ... |
app/models/user.rb
| 1 | 1 | class User < ActiveRecord::Base |
| 2 | + | |
| 2 | 3 | include Account |
| 3 | 4 | |
| 4 | 5 | devise :database_authenticatable, :token_authenticatable, :lockable, |
| ... | ... | @@ -57,25 +58,6 @@ class User < ActiveRecord::Base |
| 57 | 58 | scope :active, where(:blocked => false) |
| 58 | 59 | |
| 59 | 60 | before_validation :generate_password, :on => :create |
| 60 | - after_create :create_hooks | |
| 61 | - after_destroy :destroy_hooks | |
| 62 | - | |
| 63 | - def create_hooks | |
| 64 | - SystemHook.all_hooks_fire({ | |
| 65 | - event_name: "user_create", | |
| 66 | - name: self.name, | |
| 67 | - email: self.email, | |
| 68 | - created_at: self.created_at | |
| 69 | - }) | |
| 70 | - end | |
| 71 | - | |
| 72 | - def destroy_hooks | |
| 73 | - SystemHook.all_hooks_fire({ | |
| 74 | - event_name: "user_destroy", | |
| 75 | - name: self.name, | |
| 76 | - email: self.email | |
| 77 | - }) | |
| 78 | - end | |
| 79 | 61 | |
| 80 | 62 | def generate_password |
| 81 | 63 | if self.force_random_password | ... | ... |
app/models/users_project.rb
| ... | ... | @@ -11,9 +11,6 @@ class UsersProject < ActiveRecord::Base |
| 11 | 11 | |
| 12 | 12 | after_save :update_repository |
| 13 | 13 | after_destroy :update_repository |
| 14 | - after_create :add_to_team_hooks | |
| 15 | - after_destroy :remove_from_team_hooks | |
| 16 | - | |
| 17 | 14 | |
| 18 | 15 | validates_uniqueness_of :user_id, :scope => [:project_id] |
| 19 | 16 | validates_presence_of :user_id |
| ... | ... | @@ -21,31 +18,6 @@ class UsersProject < ActiveRecord::Base |
| 21 | 18 | |
| 22 | 19 | delegate :name, :email, :to => :user, :prefix => true |
| 23 | 20 | |
| 24 | - def add_to_team_hooks | |
| 25 | - SystemHook.all_hooks_fire({ | |
| 26 | - event_name: "user_add_to_team", | |
| 27 | - project_name: self.project.name, | |
| 28 | - project_path: self.project.path, | |
| 29 | - project_id: self.project_id, | |
| 30 | - user_name: self.user.name, | |
| 31 | - user_email: self.user.email, | |
| 32 | - project_access: self.repo_access_human, | |
| 33 | - created_at: self.created_at | |
| 34 | - }) | |
| 35 | - end | |
| 36 | - | |
| 37 | - def remove_from_team_hooks | |
| 38 | - SystemHook.all_hooks_fire({ | |
| 39 | - event_name: "user_remove_from_team", | |
| 40 | - project_name: self.project.name, | |
| 41 | - project_path: self.project.path, | |
| 42 | - project_id: self.project_id, | |
| 43 | - user_name: self.user.name, | |
| 44 | - user_email: self.user.email, | |
| 45 | - project_access: self.repo_access_human | |
| 46 | - }) | |
| 47 | - end | |
| 48 | - | |
| 49 | 21 | def self.bulk_import(project, user_ids, project_access) |
| 50 | 22 | UsersProject.transaction do |
| 51 | 23 | user_ids.each do |user_id| | ... | ... |
| ... | ... | @@ -0,0 +1,67 @@ |
| 1 | +class SystemHookObserver < ActiveRecord::Observer | |
| 2 | + observe :user, :project, :users_project | |
| 3 | + | |
| 4 | + def after_create(model) | |
| 5 | + if model.kind_of? Project | |
| 6 | + SystemHook.all_hooks_fire({ | |
| 7 | + event_name: "project_create", | |
| 8 | + name: model.name, | |
| 9 | + path: model.path, | |
| 10 | + project_id: model.id, | |
| 11 | + owner_name: model.owner.name, | |
| 12 | + owner_email: model.owner.email, | |
| 13 | + created_at: model.created_at | |
| 14 | + }) | |
| 15 | + elsif model.kind_of? User | |
| 16 | + SystemHook.all_hooks_fire({ | |
| 17 | + event_name: "user_create", | |
| 18 | + name: model.name, | |
| 19 | + email: model.email, | |
| 20 | + created_at: model.created_at | |
| 21 | + }) | |
| 22 | + | |
| 23 | + elsif model.kind_of? UsersProject | |
| 24 | + SystemHook.all_hooks_fire({ | |
| 25 | + event_name: "user_add_to_team", | |
| 26 | + project_name: model.project.name, | |
| 27 | + project_path: model.project.path, | |
| 28 | + project_id: model.project_id, | |
| 29 | + user_name: model.user.name, | |
| 30 | + user_email: model.user.email, | |
| 31 | + project_access: model.repo_access_human, | |
| 32 | + created_at: model.created_at | |
| 33 | + }) | |
| 34 | + | |
| 35 | + end | |
| 36 | + end | |
| 37 | + | |
| 38 | + def after_destroy(model) | |
| 39 | + if model.kind_of? Project | |
| 40 | + SystemHook.all_hooks_fire({ | |
| 41 | + event_name: "project_destroy", | |
| 42 | + name: model.name, | |
| 43 | + path: model.path, | |
| 44 | + project_id: model.id, | |
| 45 | + owner_name: model.owner.name, | |
| 46 | + owner_email: model.owner.email, | |
| 47 | + }) | |
| 48 | + elsif model.kind_of? User | |
| 49 | + SystemHook.all_hooks_fire({ | |
| 50 | + event_name: "user_destroy", | |
| 51 | + name: model.name, | |
| 52 | + email: model.email | |
| 53 | + }) | |
| 54 | + | |
| 55 | + elsif model.kind_of? UsersProject | |
| 56 | + SystemHook.all_hooks_fire({ | |
| 57 | + event_name: "user_remove_from_team", | |
| 58 | + project_name: model.project.name, | |
| 59 | + project_path: model.project.path, | |
| 60 | + project_id: model.project_id, | |
| 61 | + user_name: model.user.name, | |
| 62 | + user_email: model.user.email, | |
| 63 | + project_access: model.repo_access_human | |
| 64 | + }) | |
| 65 | + end | |
| 66 | + end | |
| 67 | +end | ... | ... |
config/application.rb
| ... | ... | @@ -23,7 +23,7 @@ module Gitlab |
| 23 | 23 | # config.plugins = [ :exception_notification, :ssl_requirement, :all ] |
| 24 | 24 | |
| 25 | 25 | # Activate observers that should always be running. |
| 26 | - config.active_record.observers = :mailer_observer, :activity_observer, :project_observer, :key_observer, :issue_observer, :user_observer | |
| 26 | + config.active_record.observers = :mailer_observer, :activity_observer, :project_observer, :key_observer, :issue_observer, :user_observer, :system_hook_observer | |
| 27 | 27 | |
| 28 | 28 | # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. |
| 29 | 29 | # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. | ... | ... |