extract concern for hook triggers
This commit is contained in:
		
							parent
							
								
									88832ba939
								
							
						
					
					
						commit
						ac92d70d90
					
				| 
						 | 
					@ -0,0 +1,31 @@
 | 
				
			||||||
 | 
					module TriggerableHooks
 | 
				
			||||||
 | 
					  AVAILABLE_TRIGGERS = {
 | 
				
			||||||
 | 
					    repository_update_hooks:  :repository_update_events,
 | 
				
			||||||
 | 
					    push_hooks:               :push_events,
 | 
				
			||||||
 | 
					    tag_push_hooks:           :tag_push_events,
 | 
				
			||||||
 | 
					    issue_hooks:              :issues_events,
 | 
				
			||||||
 | 
					    confidential_issue_hooks: :confidential_issues_events,
 | 
				
			||||||
 | 
					    note_hooks:               :note_events,
 | 
				
			||||||
 | 
					    merge_request_hooks:      :merge_requests_events,
 | 
				
			||||||
 | 
					    job_hooks:                :job_events,
 | 
				
			||||||
 | 
					    pipeline_hooks:           :pipeline_events,
 | 
				
			||||||
 | 
					    wiki_page_hooks:          :wiki_page_events
 | 
				
			||||||
 | 
					  }.freeze
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  extend ActiveSupport::Concern
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  class_methods do
 | 
				
			||||||
 | 
					    attr_reader :triggerable_hooks
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def triggerable_hooks(hooks)
 | 
				
			||||||
 | 
					      triggers = AVAILABLE_TRIGGERS.slice(*hooks)
 | 
				
			||||||
 | 
					      const_set('TRIGGERS', triggers)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      self::TRIGGERS.each do |trigger, event|
 | 
				
			||||||
 | 
					        scope trigger, -> { where(event => true) }
 | 
				
			||||||
 | 
					      end
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
| 
						 | 
					@ -1,19 +1,17 @@
 | 
				
			||||||
class ProjectHook < WebHook
 | 
					class ProjectHook < WebHook
 | 
				
			||||||
  TRIGGERS = {
 | 
					  include TriggerableHooks
 | 
				
			||||||
    push_hooks:               :push_events,
 | 
					 | 
				
			||||||
    tag_push_hooks:           :tag_push_events,
 | 
					 | 
				
			||||||
    issue_hooks:              :issues_events,
 | 
					 | 
				
			||||||
    confidential_issue_hooks: :confidential_issues_events,
 | 
					 | 
				
			||||||
    note_hooks:               :note_events,
 | 
					 | 
				
			||||||
    merge_request_hooks:      :merge_requests_events,
 | 
					 | 
				
			||||||
    job_hooks:                :job_events,
 | 
					 | 
				
			||||||
    pipeline_hooks:           :pipeline_events,
 | 
					 | 
				
			||||||
    wiki_page_hooks:          :wiki_page_events
 | 
					 | 
				
			||||||
  }.freeze
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  TRIGGERS.each do |trigger, event|
 | 
					  triggerable_hooks only: [
 | 
				
			||||||
    scope trigger, -> { where(event => true) }
 | 
					    :push_hooks,
 | 
				
			||||||
  end
 | 
					    :tag_push_hooks,
 | 
				
			||||||
 | 
					    :issue_hooks,
 | 
				
			||||||
 | 
					    :confidential_issue_hooks,
 | 
				
			||||||
 | 
					    :note_hooks,
 | 
				
			||||||
 | 
					    :merge_request_hooks,
 | 
				
			||||||
 | 
					    :job_hooks,
 | 
				
			||||||
 | 
					    :pipeline_hooks,
 | 
				
			||||||
 | 
					    :wiki_page_hooks
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  belongs_to :project
 | 
					  belongs_to :project
 | 
				
			||||||
  validates :project, presence: true
 | 
					  validates :project, presence: true
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,14 +1,12 @@
 | 
				
			||||||
class SystemHook < WebHook
 | 
					class SystemHook < WebHook
 | 
				
			||||||
  TRIGGERS = {
 | 
					  include TriggerableHooks
 | 
				
			||||||
    repository_update_hooks: :repository_update_events,
 | 
					 | 
				
			||||||
    push_hooks:              :push_events,
 | 
					 | 
				
			||||||
    tag_push_hooks:          :tag_push_events,
 | 
					 | 
				
			||||||
    merge_request_hooks:     :merge_requests_events
 | 
					 | 
				
			||||||
  }.freeze
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  TRIGGERS.each do |trigger, event|
 | 
					  triggerable_hooks only: [
 | 
				
			||||||
    scope trigger, -> { where(event => true) }
 | 
					    :repository_update_hooks,
 | 
				
			||||||
  end
 | 
					    :push_hooks,
 | 
				
			||||||
 | 
					    :tag_push_hooks,
 | 
				
			||||||
 | 
					    :merge_request_hooks
 | 
				
			||||||
 | 
					  ]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  default_value_for :push_events, false
 | 
					  default_value_for :push_events, false
 | 
				
			||||||
  default_value_for :repository_update_events, true
 | 
					  default_value_for :repository_update_events, true
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,17 @@
 | 
				
			||||||
 | 
					require 'rails_helper'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					RSpec.describe TriggerableHooks do
 | 
				
			||||||
 | 
					  before do
 | 
				
			||||||
 | 
					    class TestableHook < WebHook
 | 
				
			||||||
 | 
					      include TriggerableHooks
 | 
				
			||||||
 | 
					      triggerable_hooks only: [:push_hooks]
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  describe 'scopes' do
 | 
				
			||||||
 | 
					    it 'defines a scope for each of the requested triggers' do
 | 
				
			||||||
 | 
					      expect(TestableHook).to respond_to :push_hooks
 | 
				
			||||||
 | 
					      expect(TestableHook).not_to respond_to :tag_push_hooks
 | 
				
			||||||
 | 
					    end
 | 
				
			||||||
 | 
					  end
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
		Loading…
	
		Reference in New Issue