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 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 &lt; 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 &lt; 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 &lt; 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|
... ...
app/observers/system_hook_observer.rb 0 → 100644
... ... @@ -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.
... ...