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,32 +107,6 @@ class Project < ActiveRecord::Base | ||
107 | validate :check_limit | 107 | validate :check_limit |
108 | validate :repo_name | 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 | def check_limit | 110 | def check_limit |
137 | unless owner.can_create_project? | 111 | unless owner.can_create_project? |
138 | errors[:base] << ("Your own projects limit is #{owner.projects_limit}! Please contact administrator to increase it") | 112 | errors[:base] << ("Your own projects limit is #{owner.projects_limit}! Please contact administrator to increase it") |
app/models/user.rb
1 | class User < ActiveRecord::Base | 1 | class User < ActiveRecord::Base |
2 | + | ||
2 | include Account | 3 | include Account |
3 | 4 | ||
4 | devise :database_authenticatable, :token_authenticatable, :lockable, | 5 | devise :database_authenticatable, :token_authenticatable, :lockable, |
@@ -57,25 +58,6 @@ class User < ActiveRecord::Base | @@ -57,25 +58,6 @@ class User < ActiveRecord::Base | ||
57 | scope :active, where(:blocked => false) | 58 | scope :active, where(:blocked => false) |
58 | 59 | ||
59 | before_validation :generate_password, :on => :create | 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 | def generate_password | 62 | def generate_password |
81 | if self.force_random_password | 63 | if self.force_random_password |
app/models/users_project.rb
@@ -11,9 +11,6 @@ class UsersProject < ActiveRecord::Base | @@ -11,9 +11,6 @@ class UsersProject < ActiveRecord::Base | ||
11 | 11 | ||
12 | after_save :update_repository | 12 | after_save :update_repository |
13 | after_destroy :update_repository | 13 | after_destroy :update_repository |
14 | - after_create :add_to_team_hooks | ||
15 | - after_destroy :remove_from_team_hooks | ||
16 | - | ||
17 | 14 | ||
18 | validates_uniqueness_of :user_id, :scope => [:project_id] | 15 | validates_uniqueness_of :user_id, :scope => [:project_id] |
19 | validates_presence_of :user_id | 16 | validates_presence_of :user_id |
@@ -21,31 +18,6 @@ class UsersProject < ActiveRecord::Base | @@ -21,31 +18,6 @@ class UsersProject < ActiveRecord::Base | ||
21 | 18 | ||
22 | delegate :name, :email, :to => :user, :prefix => true | 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 | def self.bulk_import(project, user_ids, project_access) | 21 | def self.bulk_import(project, user_ids, project_access) |
50 | UsersProject.transaction do | 22 | UsersProject.transaction do |
51 | user_ids.each do |user_id| | 23 | user_ids.each do |user_id| |
@@ -0,0 +1,67 @@ | @@ -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,7 +23,7 @@ module Gitlab | ||
23 | # config.plugins = [ :exception_notification, :ssl_requirement, :all ] | 23 | # config.plugins = [ :exception_notification, :ssl_requirement, :all ] |
24 | 24 | ||
25 | # Activate observers that should always be running. | 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 | # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. | 28 | # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. |
29 | # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. | 29 | # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. |