From 45e1941fb3acf8fdc0544842ce503de007e3c706 Mon Sep 17 00:00:00 2001 From: Jeroen van Baarsen Date: Fri, 23 May 2014 15:16:03 +0200 Subject: [PATCH 1/3] Return a little more information in Issue webhook When a webhook for issues is triggered, it should also return the resource URL, and the action that was performed (ie: Was it reopened, updated, opened or closed) --- app/services/issues/base_service.rb | 10 ++++++++-- app/services/issues/close_service.rb | 2 +- app/services/issues/create_service.rb | 2 +- app/services/issues/reopen_service.rb | 2 +- app/services/issues/update_service.rb | 2 +- 5 files changed, 12 insertions(+), 6 deletions(-) diff --git a/app/services/issues/base_service.rb b/app/services/issues/base_service.rb index eac774210ae..41fbe1ae08f 100644 --- a/app/services/issues/base_service.rb +++ b/app/services/issues/base_service.rb @@ -1,5 +1,6 @@ module Issues class BaseService < ::BaseService + include Rails.application.routes.url_helpers private @@ -7,8 +8,13 @@ module Issues Note.create_assignee_change_note(issue, issue.project, current_user, issue.assignee) end - def execute_hooks(issue) - issue.project.execute_hooks(issue.to_hook_data, :issue_hooks) + def execute_hooks(issue, action = 'open') + issue_data = issue.to_hook_data + issue_url = project_issue_url(id: issue.iid, + project_id: issue.project, + host: Settings.gitlab['url']) + issue_data[:object_attributes].merge!(url: issue_url, action: action) + issue.project.execute_hooks(issue_data, :issue_hooks) end def create_milestone_note(issue) diff --git a/app/services/issues/close_service.rb b/app/services/issues/close_service.rb index 85c0226ccab..ffed13a12e1 100644 --- a/app/services/issues/close_service.rb +++ b/app/services/issues/close_service.rb @@ -5,7 +5,7 @@ module Issues notification_service.close_issue(issue, current_user) event_service.close_issue(issue, current_user) create_note(issue, commit) - execute_hooks(issue) + execute_hooks(issue, 'close') end issue diff --git a/app/services/issues/create_service.rb b/app/services/issues/create_service.rb index d6137833bb9..6d05d417f1b 100644 --- a/app/services/issues/create_service.rb +++ b/app/services/issues/create_service.rb @@ -8,7 +8,7 @@ module Issues notification_service.new_issue(issue, current_user) event_service.open_issue(issue, current_user) issue.create_cross_references!(issue.project, current_user) - execute_hooks(issue) + execute_hooks(issue, 'open') end issue diff --git a/app/services/issues/reopen_service.rb b/app/services/issues/reopen_service.rb index a931398aff6..b23d56258a8 100644 --- a/app/services/issues/reopen_service.rb +++ b/app/services/issues/reopen_service.rb @@ -4,7 +4,7 @@ module Issues if issue.reopen event_service.reopen_issue(issue, current_user) create_note(issue) - execute_hooks(issue) + execute_hooks(issue, 'reopen') end issue diff --git a/app/services/issues/update_service.rb b/app/services/issues/update_service.rb index b4a742b0037..169e1e95b4b 100644 --- a/app/services/issues/update_service.rb +++ b/app/services/issues/update_service.rb @@ -23,7 +23,7 @@ module Issues end issue.notice_added_references(issue.project, current_user) - execute_hooks(issue) + execute_hooks(issue, 'update') end issue From 87760a290eddbc35f4e89b129da6ec842a70f609 Mon Sep 17 00:00:00 2001 From: Jeroen van Baarsen Date: Fri, 13 Jun 2014 12:34:15 +0200 Subject: [PATCH 2/3] Added an UrlBuilder for building rails named routes Signed-off-by: Jeroen van Baarsen --- app/services/issues/base_service.rb | 5 +---- lib/gitlab/url_builder.rb | 25 +++++++++++++++++++++++++ spec/lib/gitlab/url_builder_spec.rb | 11 +++++++++++ 3 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 lib/gitlab/url_builder.rb create mode 100644 spec/lib/gitlab/url_builder_spec.rb diff --git a/app/services/issues/base_service.rb b/app/services/issues/base_service.rb index 41fbe1ae08f..71b9ffc3489 100644 --- a/app/services/issues/base_service.rb +++ b/app/services/issues/base_service.rb @@ -1,6 +1,5 @@ module Issues class BaseService < ::BaseService - include Rails.application.routes.url_helpers private @@ -10,9 +9,7 @@ module Issues def execute_hooks(issue, action = 'open') issue_data = issue.to_hook_data - issue_url = project_issue_url(id: issue.iid, - project_id: issue.project, - host: Settings.gitlab['url']) + issue_url = Gitlab::UrlBuilder.new(:issue).build(issue.id) issue_data[:object_attributes].merge!(url: issue_url, action: action) issue.project.execute_hooks(issue_data, :issue_hooks) end diff --git a/lib/gitlab/url_builder.rb b/lib/gitlab/url_builder.rb new file mode 100644 index 00000000000..de7e0404086 --- /dev/null +++ b/lib/gitlab/url_builder.rb @@ -0,0 +1,25 @@ +module Gitlab + class UrlBuilder + include Rails.application.routes.url_helpers + + def initialize(type) + @type = type + end + + def build(id) + case @type + when :issue + issue_url(id) + end + end + + private + + def issue_url(id) + issue = Issue.find(id) + project_issue_url(id: issue.iid, + project_id: issue.project, + host: Settings.gitlab['url']) + end + end +end diff --git a/spec/lib/gitlab/url_builder_spec.rb b/spec/lib/gitlab/url_builder_spec.rb new file mode 100644 index 00000000000..1bc77e3d424 --- /dev/null +++ b/spec/lib/gitlab/url_builder_spec.rb @@ -0,0 +1,11 @@ +require 'spec_helper' + +describe Gitlab::UrlBuilder do + describe 'When asking for an issue' do + it 'returns the issue url' do + issue = create(:issue) + url = Gitlab::UrlBuilder.new(:issue).build(issue.id) + expect(url).to eq "#{Settings.gitlab['url']}/namespace1/gitlabhq/issues/#{issue.iid}" + end + end +end From 8880c55a1ee35877abd7229e65b359116e33b5d1 Mon Sep 17 00:00:00 2001 From: Jeroen van Baarsen Date: Sat, 14 Jun 2014 09:27:11 +0200 Subject: [PATCH 3/3] Fixed the spec Signed-off-by: Jeroen van Baarsen --- spec/lib/gitlab/url_builder_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/lib/gitlab/url_builder_spec.rb b/spec/lib/gitlab/url_builder_spec.rb index 1bc77e3d424..eb47bee8336 100644 --- a/spec/lib/gitlab/url_builder_spec.rb +++ b/spec/lib/gitlab/url_builder_spec.rb @@ -5,7 +5,7 @@ describe Gitlab::UrlBuilder do it 'returns the issue url' do issue = create(:issue) url = Gitlab::UrlBuilder.new(:issue).build(issue.id) - expect(url).to eq "#{Settings.gitlab['url']}/namespace1/gitlabhq/issues/#{issue.iid}" + expect(url).to eq "#{Settings.gitlab['url']}/#{issue.project.to_param}/issues/#{issue.iid}" end end end