summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouwe Maan <douwe@gitlab.com>2015-04-03 18:03:26 +0200
committerDouwe Maan <douwe@gitlab.com>2015-04-03 18:03:26 +0200
commite33ddfebf2248fe31bb27fe1d34048df97ed61b0 (patch)
treef7d5af3d3c48924beaf7c8ce9d67e2c09eee0dde
parentb492f0f86ea0f0b4e954e1b7ed0b84d08d784272 (diff)
downloadgitlab-ce-e33ddfebf2248fe31bb27fe1d34048df97ed61b0.tar.gz
Refactor ClosingIssueExtractor.
-rw-r--r--app/models/commit.rb2
-rw-r--r--app/models/merge_request.rb4
-rw-r--r--lib/gitlab/closing_issue_extractor.rb23
3 files changed, 14 insertions, 15 deletions
diff --git a/app/models/commit.rb b/app/models/commit.rb
index 084cf420079..7a0ad137650 100644
--- a/app/models/commit.rb
+++ b/app/models/commit.rb
@@ -118,7 +118,7 @@ class Commit
# Discover issues should be closed when this commit is pushed to a project's
# default branch.
def closes_issues(project, current_user = self.committer)
- Gitlab::ClosingIssueExtractor.closed_by_message_in_project(safe_message, project, current_user)
+ Gitlab::ClosingIssueExtractor.new(project, current_user).closed_by_message(safe_message)
end
# Mentionable override.
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 167d7f9c71f..35cb920d8bc 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -260,8 +260,8 @@ class MergeRequest < ActiveRecord::Base
def closes_issues(current_user = self.author)
if target_branch == project.default_branch
issues = commits.flat_map { |c| c.closes_issues(project, current_user) }
- issues.push(*Gitlab::ClosingIssueExtractor.
- closed_by_message_in_project(description, project, current_user))
+ issues.push(*Gitlab::ClosingIssueExtractor.new(project, current_user).
+ closed_by_message(description))
issues.uniq.sort_by(&:id)
else
[]
diff --git a/lib/gitlab/closing_issue_extractor.rb b/lib/gitlab/closing_issue_extractor.rb
index 6425193d85f..ab184d95c05 100644
--- a/lib/gitlab/closing_issue_extractor.rb
+++ b/lib/gitlab/closing_issue_extractor.rb
@@ -1,21 +1,20 @@
module Gitlab
- module ClosingIssueExtractor
+ class ClosingIssueExtractor
ISSUE_CLOSING_REGEX = Regexp.new(Gitlab.config.gitlab.issue_closing_pattern)
- def self.closed_by_message_in_project(message, project, current_user = nil)
- issues = []
+ def initialize(project, current_user = nil)
+ @extractor = Gitlab::ReferenceExtractor.new(project, current_user)
+ end
- unless message.nil?
- md = message.scan(ISSUE_CLOSING_REGEX)
+ def closed_by_message(message)
+ return [] if message.nil?
+
+ closing_statements = message.scan(ISSUE_CLOSING_REGEX).
+ map { |ref| ref[0] }.join(" ")
- md.each do |ref|
- extractor = Gitlab::ReferenceExtractor.new(project, current_user)
- extractor.analyze(ref[0])
- issues += extractor.issues
- end
- end
+ @extractor.analyze(closing_statements)
- issues.uniq
+ @extractor.issues
end
end
end