System Hooks: move callback to observer
This commit is contained in:
parent
86bd11cbd8
commit
d9cd6269e9
5 changed files with 69 additions and 74 deletions
|
@ -107,32 +107,6 @@ class Project < ActiveRecord::Base
|
||||||
validate :check_limit
|
validate :check_limit
|
||||||
validate :repo_name
|
validate :repo_name
|
||||||
|
|
||||||
after_create :create_hooks
|
|
||||||
after_destroy :destroy_hooks
|
|
||||||
|
|
||||||
def create_hooks
|
|
||||||
SystemHook.all_hooks_fire({
|
|
||||||
event_name: "project_create",
|
|
||||||
name: self.name,
|
|
||||||
path: self.path,
|
|
||||||
project_id: self.id,
|
|
||||||
owner_name: self.owner.name,
|
|
||||||
owner_email: self.owner.email,
|
|
||||||
created_at: self.created_at
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
def destroy_hooks
|
|
||||||
SystemHook.all_hooks_fire({
|
|
||||||
event_name: "project_destroy",
|
|
||||||
name: self.name,
|
|
||||||
path: self.path,
|
|
||||||
project_id: self.id,
|
|
||||||
owner_name: self.owner.name,
|
|
||||||
owner_email: self.owner.email,
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
def check_limit
|
def check_limit
|
||||||
unless owner.can_create_project?
|
unless owner.can_create_project?
|
||||||
errors[:base] << ("Your own projects limit is #{owner.projects_limit}! Please contact administrator to increase it")
|
errors[:base] << ("Your own projects limit is #{owner.projects_limit}! Please contact administrator to increase it")
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
class User < ActiveRecord::Base
|
class User < ActiveRecord::Base
|
||||||
|
|
||||||
include Account
|
include Account
|
||||||
|
|
||||||
devise :database_authenticatable, :token_authenticatable, :lockable,
|
devise :database_authenticatable, :token_authenticatable, :lockable,
|
||||||
|
@ -57,25 +58,6 @@ class User < ActiveRecord::Base
|
||||||
scope :active, where(:blocked => false)
|
scope :active, where(:blocked => false)
|
||||||
|
|
||||||
before_validation :generate_password, :on => :create
|
before_validation :generate_password, :on => :create
|
||||||
after_create :create_hooks
|
|
||||||
after_destroy :destroy_hooks
|
|
||||||
|
|
||||||
def create_hooks
|
|
||||||
SystemHook.all_hooks_fire({
|
|
||||||
event_name: "user_create",
|
|
||||||
name: self.name,
|
|
||||||
email: self.email,
|
|
||||||
created_at: self.created_at
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
def destroy_hooks
|
|
||||||
SystemHook.all_hooks_fire({
|
|
||||||
event_name: "user_destroy",
|
|
||||||
name: self.name,
|
|
||||||
email: self.email
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
def generate_password
|
def generate_password
|
||||||
if self.force_random_password
|
if self.force_random_password
|
||||||
|
|
|
@ -11,9 +11,6 @@ class UsersProject < ActiveRecord::Base
|
||||||
|
|
||||||
after_save :update_repository
|
after_save :update_repository
|
||||||
after_destroy :update_repository
|
after_destroy :update_repository
|
||||||
after_create :add_to_team_hooks
|
|
||||||
after_destroy :remove_from_team_hooks
|
|
||||||
|
|
||||||
|
|
||||||
validates_uniqueness_of :user_id, :scope => [:project_id]
|
validates_uniqueness_of :user_id, :scope => [:project_id]
|
||||||
validates_presence_of :user_id
|
validates_presence_of :user_id
|
||||||
|
@ -21,31 +18,6 @@ class UsersProject < ActiveRecord::Base
|
||||||
|
|
||||||
delegate :name, :email, :to => :user, :prefix => true
|
delegate :name, :email, :to => :user, :prefix => true
|
||||||
|
|
||||||
def add_to_team_hooks
|
|
||||||
SystemHook.all_hooks_fire({
|
|
||||||
event_name: "user_add_to_team",
|
|
||||||
project_name: self.project.name,
|
|
||||||
project_path: self.project.path,
|
|
||||||
project_id: self.project_id,
|
|
||||||
user_name: self.user.name,
|
|
||||||
user_email: self.user.email,
|
|
||||||
project_access: self.repo_access_human,
|
|
||||||
created_at: self.created_at
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
def remove_from_team_hooks
|
|
||||||
SystemHook.all_hooks_fire({
|
|
||||||
event_name: "user_remove_from_team",
|
|
||||||
project_name: self.project.name,
|
|
||||||
project_path: self.project.path,
|
|
||||||
project_id: self.project_id,
|
|
||||||
user_name: self.user.name,
|
|
||||||
user_email: self.user.email,
|
|
||||||
project_access: self.repo_access_human
|
|
||||||
})
|
|
||||||
end
|
|
||||||
|
|
||||||
def self.bulk_import(project, user_ids, project_access)
|
def self.bulk_import(project, user_ids, project_access)
|
||||||
UsersProject.transaction do
|
UsersProject.transaction do
|
||||||
user_ids.each do |user_id|
|
user_ids.each do |user_id|
|
||||||
|
|
67
app/observers/system_hook_observer.rb
Normal file
67
app/observers/system_hook_observer.rb
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
class SystemHookObserver < ActiveRecord::Observer
|
||||||
|
observe :user, :project, :users_project
|
||||||
|
|
||||||
|
def after_create(model)
|
||||||
|
if model.kind_of? 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
|
||||||
|
})
|
||||||
|
elsif model.kind_of? User
|
||||||
|
SystemHook.all_hooks_fire({
|
||||||
|
event_name: "user_create",
|
||||||
|
name: model.name,
|
||||||
|
email: model.email,
|
||||||
|
created_at: model.created_at
|
||||||
|
})
|
||||||
|
|
||||||
|
elsif model.kind_of? 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
|
||||||
|
end
|
||||||
|
|
||||||
|
def after_destroy(model)
|
||||||
|
if model.kind_of? 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,
|
||||||
|
})
|
||||||
|
elsif model.kind_of? User
|
||||||
|
SystemHook.all_hooks_fire({
|
||||||
|
event_name: "user_destroy",
|
||||||
|
name: model.name,
|
||||||
|
email: model.email
|
||||||
|
})
|
||||||
|
|
||||||
|
elsif model.kind_of? 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
|
||||||
|
end
|
||||||
|
end
|
|
@ -23,7 +23,7 @@ module Gitlab
|
||||||
# config.plugins = [ :exception_notification, :ssl_requirement, :all ]
|
# config.plugins = [ :exception_notification, :ssl_requirement, :all ]
|
||||||
|
|
||||||
# Activate observers that should always be running.
|
# Activate observers that should always be running.
|
||||||
config.active_record.observers = :mailer_observer, :activity_observer, :project_observer, :key_observer, :issue_observer, :user_observer
|
config.active_record.observers = :mailer_observer, :activity_observer, :project_observer, :key_observer, :issue_observer, :user_observer, :system_hook_observer
|
||||||
|
|
||||||
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
|
# Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
|
||||||
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
|
# Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
|
||||||
|
|
Loading…
Add table
Reference in a new issue