Commit d9cd6269e991e187c2acf272240fcb332270a5c4

Authored by Valeriy Sizov
1 parent 86bd11cb

System Hooks: move callback to observer

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 &lt; ActiveRecord::Base @@ -57,25 +58,6 @@ class User &lt; 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 &lt; ActiveRecord::Base @@ -11,9 +11,6 @@ class UsersProject &lt; 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 &lt; ActiveRecord::Base @@ -21,31 +18,6 @@ class UsersProject &lt; 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|
app/observers/system_hook_observer.rb 0 → 100644
@@ -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.