summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorAndrew8xx8 <avk@8xx8.ru>2013-02-20 14:53:15 +0400
committerAndrew8xx8 <avk@8xx8.ru>2013-02-20 14:53:15 +0400
commitaa1780d03c7ceb916c2e122b841d3d4ebc5ce597 (patch)
treef0e0ebd956199cc5d81c4e63e14555a4e46bb6a9 /app
parent468c8c5f0a66a9ebf1489926ba32c19db71d821a (diff)
downloadgitlab-ce-aa1780d03c7ceb916c2e122b841d3d4ebc5ce597.tar.gz
System hooks execution moved to System hook service
Diffstat (limited to 'app')
-rw-r--r--app/models/system_hook.rb6
-rw-r--r--app/observers/system_hook_observer.rb59
-rw-r--r--app/services/system_hooks_service.rb55
3 files changed, 57 insertions, 63 deletions
diff --git a/app/models/system_hook.rb b/app/models/system_hook.rb
index 5f1bd6477c4..3914a915aab 100644
--- a/app/models/system_hook.rb
+++ b/app/models/system_hook.rb
@@ -12,12 +12,6 @@
#
class SystemHook < WebHook
- def self.all_hooks_fire(data)
- SystemHook.all.each do |sh|
- sh.async_execute data
- end
- end
-
def async_execute(data)
Sidekiq::Client.enqueue(SystemHookWorker, id, data)
end
diff --git a/app/observers/system_hook_observer.rb b/app/observers/system_hook_observer.rb
index 195a6b127ee..be2594b4916 100644
--- a/app/observers/system_hook_observer.rb
+++ b/app/observers/system_hook_observer.rb
@@ -2,65 +2,10 @@ class SystemHookObserver < ActiveRecord::Observer
observe :user, :project, :users_project
def after_create(model)
- case model
- when Project
- SystemHook.all_hooks_fire({
- event_name: "project_create",
- name: model.name,
- path: model.path,
- project_id: model.id,
- owner_name: model.owner.name,
- owner_email: model.owner.email,
- created_at: model.created_at
- })
- when User
- SystemHook.all_hooks_fire({
- event_name: "user_create",
- name: model.name,
- email: model.email,
- created_at: model.created_at
- })
- when UsersProject
- SystemHook.all_hooks_fire({
- event_name: "user_add_to_team",
- project_name: model.project.name,
- project_path: model.project.path,
- project_id: model.project_id,
- user_name: model.user.name,
- user_email: model.user.email,
- project_access: model.repo_access_human,
- created_at: model.created_at
- })
- end
+ SystemHooksService.execute_hooks_for(model, :create)
end
def after_destroy(model)
- case model
- when Project
- SystemHook.all_hooks_fire({
- event_name: "project_destroy",
- name: model.name,
- path: model.path,
- project_id: model.id,
- owner_name: model.owner.name,
- owner_email: model.owner.email,
- })
- when User
- SystemHook.all_hooks_fire({
- event_name: "user_destroy",
- name: model.name,
- email: model.email
- })
- when UsersProject
- SystemHook.all_hooks_fire({
- event_name: "user_remove_from_team",
- project_name: model.project.name,
- project_path: model.project.path,
- project_id: model.project_id,
- user_name: model.user.name,
- user_email: model.user.email,
- project_access: model.repo_access_human
- })
- end
+ SystemHooksService.execute_hooks_for(model, :destroy)
end
end
diff --git a/app/services/system_hooks_service.rb b/app/services/system_hooks_service.rb
new file mode 100644
index 00000000000..1d53f3baf33
--- /dev/null
+++ b/app/services/system_hooks_service.rb
@@ -0,0 +1,55 @@
+class SystemHooksService
+ def self.execute_hooks_for(model, event)
+ execute_hooks(build_event_data(model, event))
+ end
+
+ private
+
+ def self.execute_hooks(data)
+ SystemHook.all.each do |sh|
+ sh.async_execute data
+ end
+ end
+
+ def self.build_event_data(model, event)
+ data = {
+ event_name: build_event_name(model, event),
+ created_at: model.created_at
+ }
+
+ case model
+ when Project
+ data.merge!({
+ name: model.name,
+ path: model.path,
+ project_id: model.id,
+ owner_name: model.owner.name,
+ owner_email: model.owner.email
+ })
+ when User
+ data.merge!({
+ name: model.name,
+ email: model.email
+ })
+ when UsersProject
+ data.merge!({
+ project_name: model.project.name,
+ project_path: model.project.path,
+ project_id: model.project_id,
+ user_name: model.user.name,
+ user_email: model.user.email,
+ project_access: model.repo_access_human
+ })
+ end
+ end
+
+ def self.build_event_name(model, event)
+ case model
+ when UsersProject
+ return "user_add_to_team" if event == :create
+ return "user_remove_from_team" if event == :destroy
+ else
+ "#{model.class.name.downcase}_#{event.to_s}"
+ end
+ end
+end