Commit aa1780d03c7ceb916c2e122b841d3d4ebc5ce597

Authored by Andrew8xx8
1 parent 468c8c5f

System hooks execution moved to System hook service

app/models/system_hook.rb
... ... @@ -12,12 +12,6 @@
12 12 #
13 13  
14 14 class SystemHook < WebHook
15   - def self.all_hooks_fire(data)
16   - SystemHook.all.each do |sh|
17   - sh.async_execute data
18   - end
19   - end
20   -
21 15 def async_execute(data)
22 16 Sidekiq::Client.enqueue(SystemHookWorker, id, data)
23 17 end
... ...
app/observers/system_hook_observer.rb
... ... @@ -2,65 +2,10 @@ class SystemHookObserver &lt; ActiveRecord::Observer
2 2 observe :user, :project, :users_project
3 3  
4 4 def after_create(model)
5   - case model
6   - when Project
7   - SystemHook.all_hooks_fire({
8   - event_name: "project_create",
9   - name: model.name,
10   - path: model.path,
11   - project_id: model.id,
12   - owner_name: model.owner.name,
13   - owner_email: model.owner.email,
14   - created_at: model.created_at
15   - })
16   - when User
17   - SystemHook.all_hooks_fire({
18   - event_name: "user_create",
19   - name: model.name,
20   - email: model.email,
21   - created_at: model.created_at
22   - })
23   - when 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   - end
  5 + SystemHooksService.execute_hooks_for(model, :create)
35 6 end
36 7  
37 8 def after_destroy(model)
38   - case model
39   - when 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   - when User
49   - SystemHook.all_hooks_fire({
50   - event_name: "user_destroy",
51   - name: model.name,
52   - email: model.email
53   - })
54   - when UsersProject
55   - SystemHook.all_hooks_fire({
56   - event_name: "user_remove_from_team",
57   - project_name: model.project.name,
58   - project_path: model.project.path,
59   - project_id: model.project_id,
60   - user_name: model.user.name,
61   - user_email: model.user.email,
62   - project_access: model.repo_access_human
63   - })
64   - end
  9 + SystemHooksService.execute_hooks_for(model, :destroy)
65 10 end
66 11 end
... ...
app/services/system_hooks_service.rb 0 → 100644
... ... @@ -0,0 +1,55 @@
  1 +class SystemHooksService
  2 + def self.execute_hooks_for(model, event)
  3 + execute_hooks(build_event_data(model, event))
  4 + end
  5 +
  6 + private
  7 +
  8 + def self.execute_hooks(data)
  9 + SystemHook.all.each do |sh|
  10 + sh.async_execute data
  11 + end
  12 + end
  13 +
  14 + def self.build_event_data(model, event)
  15 + data = {
  16 + event_name: build_event_name(model, event),
  17 + created_at: model.created_at
  18 + }
  19 +
  20 + case model
  21 + when Project
  22 + data.merge!({
  23 + name: model.name,
  24 + path: model.path,
  25 + project_id: model.id,
  26 + owner_name: model.owner.name,
  27 + owner_email: model.owner.email
  28 + })
  29 + when User
  30 + data.merge!({
  31 + name: model.name,
  32 + email: model.email
  33 + })
  34 + when UsersProject
  35 + data.merge!({
  36 + project_name: model.project.name,
  37 + project_path: model.project.path,
  38 + project_id: model.project_id,
  39 + user_name: model.user.name,
  40 + user_email: model.user.email,
  41 + project_access: model.repo_access_human
  42 + })
  43 + end
  44 + end
  45 +
  46 + def self.build_event_name(model, event)
  47 + case model
  48 + when UsersProject
  49 + return "user_add_to_team" if event == :create
  50 + return "user_remove_from_team" if event == :destroy
  51 + else
  52 + "#{model.class.name.downcase}_#{event.to_s}"
  53 + end
  54 + end
  55 +end
... ...
spec/services/system_hooks_service_spec.rb 0 → 100644
... ... @@ -0,0 +1,41 @@
  1 +require 'spec_helper'
  2 +
  3 +describe SystemHooksService do
  4 + let (:user) { create :user }
  5 + let (:project) { create :project }
  6 + let (:users_project) { create :users_project }
  7 +
  8 + context 'it should build event data' do
  9 + it 'should build event data for user' do
  10 + SystemHooksService.build_event_data(user, :create).should include(:event_name, :name, :created_at, :email)
  11 + end
  12 +
  13 + it 'should build event data for project' do
  14 + SystemHooksService.build_event_data(project, :create).should include(:event_name, :name, :created_at, :path, :project_id, :owner_name, :owner_email)
  15 + end
  16 +
  17 + it 'should build event data for users project' do
  18 + 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)
  19 + end
  20 + end
  21 +
  22 + context 'it should build event names' do
  23 + it 'should build event names for user' do
  24 + SystemHooksService.build_event_name(user, :create).should eq "user_create"
  25 +
  26 + SystemHooksService.build_event_name(user, :destroy).should eq "user_destroy"
  27 + end
  28 +
  29 + it 'should build event names for project' do
  30 + SystemHooksService.build_event_name(project, :create).should eq "project_create"
  31 +
  32 + SystemHooksService.build_event_name(project, :destroy).should eq "project_destroy"
  33 + end
  34 +
  35 + it 'should build event names for users project' do
  36 + SystemHooksService.build_event_name(users_project, :create).should eq "user_add_to_team"
  37 +
  38 + SystemHooksService.build_event_name(users_project, :destroy).should eq "user_remove_from_team"
  39 + end
  40 + end
  41 +end
... ...