diff --git a/app/helpers/services_helper.rb b/app/helpers/services_helper.rb index 790ea446e673ef003d6a7a85521f147cadd21584..715e5893a2cd917723e377c7854362c6e93a66b8 100644 --- a/app/helpers/services_helper.rb +++ b/app/helpers/services_helper.rb @@ -26,4 +26,6 @@ module ServicesHelper event = event.pluralize if %w[merge_request issue confidential_issue].include?(event) "#{event}_events" end + + extend self end diff --git a/app/models/project_services/asana_service.rb b/app/models/project_services/asana_service.rb index 20cf7dc4632d55084e8168dc4a13888ba0050a17..3728f5642e432253a1276d1f289580718a08bc61 100644 --- a/app/models/project_services/asana_service.rb +++ b/app/models/project_services/asana_service.rb @@ -48,10 +48,6 @@ http://app.asana.com/-/account_api' %w(push) end - def self.event_names - self.supported_events.map { |event| "#{event}_events" } - end - def client @_client ||= begin Asana::Client.new do |c| diff --git a/app/models/project_services/assembla_service.rb b/app/models/project_services/assembla_service.rb index f18d2204e0e1b3a80eda94f46247b62b74c36483..aeeff8917bf58e2b58fa74db3b54b06432ad6bb0 100644 --- a/app/models/project_services/assembla_service.rb +++ b/app/models/project_services/assembla_service.rb @@ -27,10 +27,6 @@ class AssemblaService < Service %w(push) end - def self.event_names - self.supported_events.map { |event| "#{event}_events" } - end - def execute(data) return unless supported_events.include?(data[:object_kind]) diff --git a/app/models/project_services/bamboo_service.rb b/app/models/project_services/bamboo_service.rb index fe95fc14525e9096754f558c8e619701a0bc53af..400020ee04aa8ebd87a50159e84b433a106faf94 100644 --- a/app/models/project_services/bamboo_service.rb +++ b/app/models/project_services/bamboo_service.rb @@ -56,10 +56,6 @@ class BambooService < CiService ] end - def self.supported_events - %w(push) - end - def build_page(sha, ref) with_reactive_cache(sha, ref) {|cached| cached[:build_page] } end diff --git a/app/models/project_services/bugzilla_service.rb b/app/models/project_services/bugzilla_service.rb index 18c0cdf2db80eb8f80578bfc98a38a555e21c1b3..046e2809f454ffacf99ec63fd9b8e794a6147758 100644 --- a/app/models/project_services/bugzilla_service.rb +++ b/app/models/project_services/bugzilla_service.rb @@ -22,12 +22,4 @@ class BugzillaService < IssueTrackerService def self.to_param 'bugzilla' end - - def self.supported_events - %w() - end - - def self.event_names - self.supported_events.map { |event| "#{event}_events" } - end end diff --git a/app/models/project_services/buildkite_service.rb b/app/models/project_services/buildkite_service.rb index 94bc179decaecdc400efb7bef28e2bd16acd335f..0956c4a4ede143a41930732633962ee2505941c6 100644 --- a/app/models/project_services/buildkite_service.rb +++ b/app/models/project_services/buildkite_service.rb @@ -24,14 +24,6 @@ class BuildkiteService < CiService hook.save end - def self.supported_events - %w(push) - end - - def self.event_names - self.supported_events.map { |event| "#{event}_events" } - end - def execute(data) return unless supported_events.include?(data[:object_kind]) diff --git a/app/models/project_services/builds_email_service.rb b/app/models/project_services/builds_email_service.rb index 51c07f731ffe25f6d923ee01fccfb0f85c30045a..ebd21e3718910bcb25076fbff710d7b97e93c4d3 100644 --- a/app/models/project_services/builds_email_service.rb +++ b/app/models/project_services/builds_email_service.rb @@ -27,10 +27,6 @@ class BuildsEmailService < Service %w(build) end - def self.event_names - self.supported_events.map { |event| "#{event}_events" } - end - def execute(push_data) return unless supported_events.include?(push_data[:object_kind]) return unless should_build_be_notified?(push_data) diff --git a/app/models/project_services/campfire_service.rb b/app/models/project_services/campfire_service.rb index 52371cde20152b26c548b8b52b4aa8dcb9ae2015..0de59af5652de6997f04aa189081107ca0e91e1f 100644 --- a/app/models/project_services/campfire_service.rb +++ b/app/models/project_services/campfire_service.rb @@ -28,10 +28,6 @@ class CampfireService < Service %w(push) end - def self.event_names - self.supported_events.map { |event| "#{event}_events" } - end - def execute(data) return unless supported_events.include?(data[:object_kind]) diff --git a/app/models/project_services/ci_service.rb b/app/models/project_services/ci_service.rb index 9b470c3a07811b2f83a8a56102a8d861e352ed18..82979c8bd34ed76a60563b04113f24f8b5db0d46 100644 --- a/app/models/project_services/ci_service.rb +++ b/app/models/project_services/ci_service.rb @@ -12,9 +12,6 @@ class CiService < Service %w(push) end - def self.event_names - self.supported_events.map { |event| "#{event}_events" } - end # Return complete url to build page # # Ex. diff --git a/app/models/project_services/custom_issue_tracker_service.rb b/app/models/project_services/custom_issue_tracker_service.rb index 9c5c86b1cc931815781fff2ce664c3cdeabc51b4..dea915a4d056c11dab5fa06ab0010094465ced7e 100644 --- a/app/models/project_services/custom_issue_tracker_service.rb +++ b/app/models/project_services/custom_issue_tracker_service.rb @@ -36,12 +36,4 @@ class CustomIssueTrackerService < IssueTrackerService { type: 'text', name: 'new_issue_url', placeholder: 'New Issue url' } ] end - - def self.supported_events - %w() - end - - def self.event_names - self.supported_events.map { |event| "#{event}_events" } - end end diff --git a/app/models/project_services/emails_on_push_service.rb b/app/models/project_services/emails_on_push_service.rb index 23dc0bc3790f70217c2fb6549c3168a19d47266c..f4f913ee0b60518488ee735d2cad40cfefe0b6d2 100644 --- a/app/models/project_services/emails_on_push_service.rb +++ b/app/models/project_services/emails_on_push_service.rb @@ -20,10 +20,6 @@ class EmailsOnPushService < Service %w(push tag_push) end - def self.event_names - self.supported_events.map { |event| "#{event}_events" } - end - def execute(push_data) return unless supported_events.include?(push_data[:object_kind]) diff --git a/app/models/project_services/external_wiki_service.rb b/app/models/project_services/external_wiki_service.rb index 961b1c19a33b93ed2bfabe60970abf1846aa055f..bdf6fa6a5860eba9b017a39d57cdae8745deb7e2 100644 --- a/app/models/project_services/external_wiki_service.rb +++ b/app/models/project_services/external_wiki_service.rb @@ -33,8 +33,4 @@ class ExternalWikiService < Service def self.supported_events %w() end - - def self.event_names - self.supported_events.map { |event| "#{event}_events" } - end end diff --git a/app/models/project_services/flowdock_service.rb b/app/models/project_services/flowdock_service.rb index 00a15d12efa30f4c45f2ec356b4e0a22e96076ff..10a13c3fbdcb57962dd6ebe0f71bddefe819b5ed 100644 --- a/app/models/project_services/flowdock_service.rb +++ b/app/models/project_services/flowdock_service.rb @@ -26,10 +26,6 @@ class FlowdockService < Service %w(push) end - def self.event_names - self.supported_events.map { |event| "#{event}_events" } - end - def execute(data) return unless supported_events.include?(data[:object_kind]) diff --git a/app/models/project_services/gemnasium_service.rb b/app/models/project_services/gemnasium_service.rb index b70d74e75c1a5782e39a8c55c540767d32fe1654..f271e1f1739c9186b4e8a946553dde56f14da48b 100644 --- a/app/models/project_services/gemnasium_service.rb +++ b/app/models/project_services/gemnasium_service.rb @@ -27,10 +27,6 @@ class GemnasiumService < Service %w(push) end - def self.event_names - self.supported_events.map { |event| "#{event}_events" } - end - def execute(data) return unless supported_events.include?(data[:object_kind]) diff --git a/app/models/project_services/hipchat_service.rb b/app/models/project_services/hipchat_service.rb index a675a857b06c121788ecb46c595d63817857310f..72da219df28bf2ca8aea5569f02c5617f96dd029 100644 --- a/app/models/project_services/hipchat_service.rb +++ b/app/models/project_services/hipchat_service.rb @@ -49,10 +49,6 @@ class HipchatService < Service %w(push issue confidential_issue merge_request note tag_push build) end - def self.event_names - self.supported_events.map { |event| "#{event}_events" } - end - def execute(data) return unless supported_events.include?(data[:object_kind]) message = create_message(data) diff --git a/app/models/project_services/irker_service.rb b/app/models/project_services/irker_service.rb index 9a0cbcbca2d3607189f29fb63c369fc50fdc9001..5d93064f9b311af129db78d44cce4b4efa250114 100644 --- a/app/models/project_services/irker_service.rb +++ b/app/models/project_services/irker_service.rb @@ -25,10 +25,6 @@ class IrkerService < Service %w(push) end - def self.event_names - self.supported_events.map { |event| "#{event}_events" } - end - def execute(data) return unless supported_events.include?(data[:object_kind]) diff --git a/app/models/project_services/jira_service.rb b/app/models/project_services/jira_service.rb index 46291f2dcc0d975e742bb9fda0f7d90ad85955b0..2ac76e97de00d0dccc26f4b1258016fc99d9fb14 100644 --- a/app/models/project_services/jira_service.rb +++ b/app/models/project_services/jira_service.rb @@ -16,10 +16,6 @@ class JiraService < IssueTrackerService %w(commit merge_request) end - def self.event_names - self.supported_events.map { |event| "#{event}_events" } - end - # {PROJECT-KEY}-{NUMBER} Examples: JIRA-1, PROJECT-1 def reference_pattern @reference_pattern ||= %r{(?<issue>\b([A-Z][A-Z0-9_]+-)\d+)} diff --git a/app/models/project_services/kubernetes_service.rb b/app/models/project_services/kubernetes_service.rb index e4d5f04d1fdacc20640a4370cde8a68156a32f18..fa3cedc4354bbdfcaab1e9f4a43683b97079d6e2 100644 --- a/app/models/project_services/kubernetes_service.rb +++ b/app/models/project_services/kubernetes_service.rb @@ -158,14 +158,6 @@ class KubernetesService < DeploymentService opts end - def self.supported_events - %w() - end - - def self.event_names - self.supported_events.map { |event| "#{event}_events" } - end - def kubeclient_auth_options { bearer_token: token } end diff --git a/app/models/project_services/mattermost_service.rb b/app/models/project_services/mattermost_service.rb index 939dfea0988fd30252844d96ec8419eb699d7cf3..c5c551b3ef58cbfac1e4139752cb2a74e826362b 100644 --- a/app/models/project_services/mattermost_service.rb +++ b/app/models/project_services/mattermost_service.rb @@ -38,12 +38,4 @@ class MattermostService < ChatNotificationService def default_channel_placeholder "#town-square" end - - def self.supported_events - %w() - end - - def self.event_names - self.supported_events.map { |event| "#{event}_events" } - end end diff --git a/app/models/project_services/mattermost_slash_commands_service.rb b/app/models/project_services/mattermost_slash_commands_service.rb index f25de22e67f18b12a9f30bbac2b64a3b0a569624..50a011db74ed17af82060c6b81bbc33cbecef6eb 100644 --- a/app/models/project_services/mattermost_slash_commands_service.rb +++ b/app/models/project_services/mattermost_slash_commands_service.rb @@ -48,12 +48,4 @@ class MattermostSlashCommandsService < ChatSlashCommandsService method: 'P', username: 'GitLab') end - - def self.supported_events - %w() - end - - def self.event_names - self.supported_events.map { |event| "#{event}_events" } - end end diff --git a/app/models/project_services/pipelines_email_service.rb b/app/models/project_services/pipelines_email_service.rb index fdfd01192289bc538f7e3398e22c89bf19f0d124..ac617f409d9417bbf4cbdce6e37c27d1ada590ef 100644 --- a/app/models/project_services/pipelines_email_service.rb +++ b/app/models/project_services/pipelines_email_service.rb @@ -23,10 +23,6 @@ class PipelinesEmailService < Service %w[pipeline] end - def self.event_names - self.supported_events.map { |event| "#{event}_events" } - end - def execute(data, force: false) return unless supported_events.include?(data[:object_kind]) return unless force || should_pipeline_be_notified?(data) diff --git a/app/models/project_services/pivotaltracker_service.rb b/app/models/project_services/pivotaltracker_service.rb index 6e19cd8ddd38f500e45ff1543f232090dcbb7342..9cc642591f4364104ad77e5ac253fe5dbaf10761 100644 --- a/app/models/project_services/pivotaltracker_service.rb +++ b/app/models/project_services/pivotaltracker_service.rb @@ -38,10 +38,6 @@ class PivotaltrackerService < Service %w(push) end - def self.event_names - self.supported_events.map { |event| "#{event}_events" } - end - def execute(data) return unless supported_events.include?(data[:object_kind]) return unless allowed_branch?(data[:ref]) diff --git a/app/models/project_services/pushover_service.rb b/app/models/project_services/pushover_service.rb index 223054c1d55954055f78cb9aa031e0e8f2865c7b..a963d27a37652e491cd712115364babbc52f942d 100644 --- a/app/models/project_services/pushover_service.rb +++ b/app/models/project_services/pushover_service.rb @@ -65,10 +65,6 @@ class PushoverService < Service %w(push) end - def self.event_names - self.supported_events.map { |event| "#{event}_events" } - end - def execute(data) return unless supported_events.include?(data[:object_kind]) diff --git a/app/models/project_services/redmine_service.rb b/app/models/project_services/redmine_service.rb index 1b835afc67805e6d6501b03f4fe23f1acea04b8e..6acf611eba581c9a9e4322b3232db46553f8639c 100644 --- a/app/models/project_services/redmine_service.rb +++ b/app/models/project_services/redmine_service.rb @@ -22,12 +22,4 @@ class RedmineService < IssueTrackerService def self.to_param 'redmine' end - - def self.supported_events - %w() - end - - def self.event_names - self.supported_events.map { |event| "#{event}_events" } - end end diff --git a/app/models/project_services/slack_service.rb b/app/models/project_services/slack_service.rb index a7a7390ac93a838ff8d9068e35d8069ab5e4b0d8..f77d2d7c60ba925c6eaba1ce41e777b85dc9f03d 100644 --- a/app/models/project_services/slack_service.rb +++ b/app/models/project_services/slack_service.rb @@ -37,12 +37,4 @@ class SlackService < ChatNotificationService def default_channel_placeholder "#general" end - - def self.supported_events - %w() - end - - def self.event_names - self.supported_events.map { |event| "#{event}_events" } - end end diff --git a/app/models/project_services/slack_slash_commands_service.rb b/app/models/project_services/slack_slash_commands_service.rb index b66570c2ece369db97c694b3c416dc2261b01860..c34991e426287da2b74ae9ae296d5f2c5dfe2e2c 100644 --- a/app/models/project_services/slack_slash_commands_service.rb +++ b/app/models/project_services/slack_slash_commands_service.rb @@ -25,12 +25,4 @@ class SlackSlashCommandsService < ChatSlashCommandsService def format(text) Slack::Notifier::LinkFormatter.format(text) if text end - - def self.supported_events - %w() - end - - def self.event_names - self.supported_events.map { |event| "#{event}_events" } - end end diff --git a/app/models/project_services/teamcity_service.rb b/app/models/project_services/teamcity_service.rb index b958333ca458e9a4a537d6084736c3db3391c367..cbaffb8ce48558370314be5056c0c94b9ec6ceb2 100644 --- a/app/models/project_services/teamcity_service.rb +++ b/app/models/project_services/teamcity_service.rb @@ -47,14 +47,6 @@ class TeamcityService < CiService 'teamcity' end - def self.supported_events - %w(push) - end - - def self.event_names - self.supported_events.map { |event| "#{event}_events" } - end - def fields [ { type: 'text', name: 'teamcity_url', diff --git a/app/models/service.rb b/app/models/service.rb index df8d9a850411cc62566ba5a8bdcb58d50c890c04..043be222f3a40155b291da53b4a575d3f325e4b3 100644 --- a/app/models/service.rb +++ b/app/models/service.rb @@ -79,6 +79,10 @@ class Service < ActiveRecord::Base self.class.to_param end + def self.to_param + raise NotImplementedError + end + def fields # implement inside child [] @@ -93,10 +97,13 @@ class Service < ActiveRecord::Base end def event_names - # implement inside child self.class.event_names end + def self.event_names + self.supported_events.map { |event| "#{event}_events" } + end + def event_field(event) nil end @@ -109,6 +116,10 @@ class Service < ActiveRecord::Base self.class.supported_events end + def self.supported_events + %w(push tag_push issue confidential_issue merge_request wiki_page) + end + def execute(data) # implement inside child end diff --git a/lib/api/services.rb b/lib/api/services.rb index 907f80db4387ad03c20ffa08c0d6f4d624972862..a0abec494385c3751e9323965de518cefff478e1 100644 --- a/lib/api/services.rb +++ b/lib/api/services.rb @@ -600,12 +600,11 @@ module API service_classes.each do |service| event_names = service.try(:event_names) || [] event_names.each do |event_name| - services[service.to_param.gsub("_", "-")] << { + services[service.to_param.tr("_", "-")] << { required: false, name: event_name.to_sym, type: String, - desc: ServicesHelper.instance_method(:service_event_description) - .bind(self).call(event_name) + desc: ServicesHelper.service_event_description(event_name) } end end diff --git a/spec/controllers/projects/services_controller_spec.rb b/spec/controllers/projects/services_controller_spec.rb index 2e44b5128b421dcbf4527167112b614eeb484fcf..a6e708c01e4a08910173d3abaae449440ac02d35 100644 --- a/spec/controllers/projects/services_controller_spec.rb +++ b/spec/controllers/projects/services_controller_spec.rb @@ -54,6 +54,7 @@ describe Projects::ServicesController do context 'on successful update' do it 'sets the flash' do expect(service).to receive(:to_param).and_return('hipchat') + expect(service).to receive(:event_names).and_return(HipchatService.event_names) put :update, namespace_id: project.namespace.id,