diff options
| author | Douwe Maan <douwe@gitlab.com> | 2018-01-18 11:37:16 +0000 |
|---|---|---|
| committer | Douwe Maan <douwe@gitlab.com> | 2018-01-18 11:37:16 +0000 |
| commit | 8e9c073a146f655cea2fd13f259bd68dc2c37259 (patch) | |
| tree | 01bd2ec14fd6406b1deb1947935b36463a7e4529 /app/models/concerns | |
| parent | d617c24f59f9cc1c068301ec755caa2de6cd6b73 (diff) | |
| parent | 6ef1b94ccf9eb60d5cff43d7e1302129d1b43cc3 (diff) | |
| download | gitlab-ce-8e9c073a146f655cea2fd13f259bd68dc2c37259.tar.gz | |
Merge branch 'feature/merge-request-system-hook' into 'master'
System hooks for Merge Requests
See merge request gitlab-org/gitlab-ce!14387
Diffstat (limited to 'app/models/concerns')
| -rw-r--r-- | app/models/concerns/triggerable_hooks.rb | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/app/models/concerns/triggerable_hooks.rb b/app/models/concerns/triggerable_hooks.rb new file mode 100644 index 00000000000..ec0ed3b795a --- /dev/null +++ b/app/models/concerns/triggerable_hooks.rb @@ -0,0 +1,40 @@ +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 + + attr_reader :triggers + + def hooks_for(trigger) + callable_scopes = triggers.keys + [:all] + return none unless callable_scopes.include?(trigger) + + public_send(trigger) # rubocop:disable GitlabSecurity/PublicSend + end + + private + + def triggerable_hooks(hooks) + triggers = AVAILABLE_TRIGGERS.slice(*hooks) + @triggers = triggers + + triggers.each do |trigger, event| + scope trigger, -> { where(event => true) } + end + end + end +end |
