diff --git a/app/models/concerns/issuable.rb b/app/models/concerns/issuable.rb index 7f820f950b0..58bf621f91b 100644 --- a/app/models/concerns/issuable.rb +++ b/app/models/concerns/issuable.rb @@ -111,4 +111,11 @@ module Issuable end users.concat(mentions.reduce([], :|)).uniq end + + def to_hook_data + { + object_kind: self.class.name.underscore, + object_attributes: self.attributes + } + end end diff --git a/app/models/project.rb b/app/models/project.rb index 0edc0746fb9..ed30b5ea892 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -298,8 +298,10 @@ class Project < ActiveRecord::Base ProjectTransferService.new.transfer(self, new_namespace) end - def execute_hooks(data) - hooks.each { |hook| hook.async_execute(data) } + def execute_hooks(data, hooks_scope = :push_hooks) + hooks.send(hooks_scope).each do |hook| + hook.async_execute(data) + end end def execute_services(data) diff --git a/app/models/project_hook.rb b/app/models/project_hook.rb index 4edb38d3bf5..c5ef13a2b8d 100644 --- a/app/models/project_hook.rb +++ b/app/models/project_hook.rb @@ -15,4 +15,8 @@ class ProjectHook < WebHook belongs_to :project attr_accessible :push_events, :issues_events, :merge_requests_events + + scope :push_hooks, -> { where(push_events: true) } + scope :issue_hooks, -> { where(issues_events: true) } + scope :merge_request_hooks, -> { where(merge_requests_events: true) } end