Skip to content
Snippets Groups Projects
Commit aa1780d0 authored by Andrew8xx8's avatar Andrew8xx8
Browse files

System hooks execution moved to System hook service

parent 468c8c5f
No related branches found
No related tags found
1 merge request!3052System hooks code & logic refactoring
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -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
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
require 'spec_helper'
describe SystemHooksService do
let (:user) { create :user }
let (:project) { create :project }
let (:users_project) { create :users_project }
context 'it should build event data' do
it 'should build event data for user' do
SystemHooksService.build_event_data(user, :create).should include(:event_name, :name, :created_at, :email)
end
it 'should build event data for project' do
SystemHooksService.build_event_data(project, :create).should include(:event_name, :name, :created_at, :path, :project_id, :owner_name, :owner_email)
end
it 'should build event data for users project' do
SystemHooksService.build_event_data(users_project, :create).should include(:event_name, :created_at, :project_name, :project_path, :project_id, :user_name, :user_email, :project_access)
end
end
context 'it should build event names' do
it 'should build event names for user' do
SystemHooksService.build_event_name(user, :create).should eq "user_create"
SystemHooksService.build_event_name(user, :destroy).should eq "user_destroy"
end
it 'should build event names for project' do
SystemHooksService.build_event_name(project, :create).should eq "project_create"
SystemHooksService.build_event_name(project, :destroy).should eq "project_destroy"
end
it 'should build event names for users project' do
SystemHooksService.build_event_name(users_project, :create).should eq "user_add_to_team"
SystemHooksService.build_event_name(users_project, :destroy).should eq "user_remove_from_team"
end
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment