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. | ... | ... |