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