OSDN Git Service

Prepare ProjectHooks to work with issues and merge_requests
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Tue, 3 Dec 2013 09:31:56 +0000 (11:31 +0200)
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Wed, 4 Dec 2013 11:37:17 +0000 (13:37 +0200)
* Add event scopes to ProjectHook
* Added Issuable#to_hook_data
* Project#execute_hooks now accept hook filter as argument

Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
app/models/concerns/issuable.rb
app/models/project.rb
app/models/project_hook.rb

index 7f820f9..58bf621 100644 (file)
@@ -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
index 0edc074..ed30b5e 100644 (file)
@@ -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)
index 4edb38d..c5ef13a 100644 (file)
@@ -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