extract concern for hook triggers

This commit is contained in:
Alexis Reigel 2017-12-04 11:18:54 +01:00
parent 88832ba939
commit ac92d70d90
4 changed files with 67 additions and 23 deletions

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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