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 | ||||
|   TRIGGERS = { | ||||
|     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 | ||||
|   include TriggerableHooks | ||||
| 
 | ||||
|   TRIGGERS.each do |trigger, event| | ||||
|     scope trigger, -> { where(event => true) } | ||||
|   end | ||||
|   triggerable_hooks only: [ | ||||
|     :push_hooks, | ||||
|     :tag_push_hooks, | ||||
|     :issue_hooks, | ||||
|     :confidential_issue_hooks, | ||||
|     :note_hooks, | ||||
|     :merge_request_hooks, | ||||
|     :job_hooks, | ||||
|     :pipeline_hooks, | ||||
|     :wiki_page_hooks | ||||
|   ] | ||||
| 
 | ||||
|   belongs_to :project | ||||
|   validates :project, presence: true | ||||
|  |  | |||
|  | @ -1,14 +1,12 @@ | |||
| class SystemHook < WebHook | ||||
|   TRIGGERS = { | ||||
|     repository_update_hooks: :repository_update_events, | ||||
|     push_hooks:              :push_events, | ||||
|     tag_push_hooks:          :tag_push_events, | ||||
|     merge_request_hooks:     :merge_requests_events | ||||
|   }.freeze | ||||
|   include TriggerableHooks | ||||
| 
 | ||||
|   TRIGGERS.each do |trigger, event| | ||||
|     scope trigger, -> { where(event => true) } | ||||
|   end | ||||
|   triggerable_hooks only: [ | ||||
|     :repository_update_hooks, | ||||
|     :push_hooks, | ||||
|     :tag_push_hooks, | ||||
|     :merge_request_hooks | ||||
|   ] | ||||
| 
 | ||||
|   default_value_for :push_events, false | ||||
|   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