Skip to content
Snippets Groups Projects
Commit b492f0f8 authored by Douwe Maan's avatar Douwe Maan
Browse files

Refactor ReferenceExtractor.

parent 9d647197
No related branches found
No related tags found
No related merge requests found
Loading
@@ -8,8 +8,6 @@ module Gitlab
Loading
@@ -8,8 +8,6 @@ module Gitlab
def initialize(project, current_user = nil) def initialize(project, current_user = nil)
@project = project @project = project
@current_user = current_user @current_user = current_user
@references = Hash.new { [] }
end end
   
def can?(user, action, subject) def can?(user, action, subject)
Loading
@@ -23,6 +21,7 @@ module Gitlab
Loading
@@ -23,6 +21,7 @@ module Gitlab
text.gsub!(%r{<pre>.*?</pre>|<code>.*?</code>}m) { |match| '' } text.gsub!(%r{<pre>.*?</pre>|<code>.*?</code>}m) { |match| '' }
text.gsub!(%r{^```.*?^```}m) { |match| '' } text.gsub!(%r{^```.*?^```}m) { |match| '' }
   
@references = Hash.new { |hash, type| hash[type] = [] }
parse_references(text) parse_references(text)
end end
   
Loading
@@ -30,66 +29,66 @@ module Gitlab
Loading
@@ -30,66 +29,66 @@ module Gitlab
# model objects. # model objects.
   
def users def users
references[:users].map do |entry| references[:user].uniq.map do |project, identifier|
if entry[:id] == "all" if identifier == "all"
project.team.members.flatten project.team.members.flatten
elsif namespace = Namespace.find_by(path: entry[:id]) elsif namespace = Namespace.find_by(path: identifier)
if namespace.is_a?(Group) if namespace.is_a?(Group)
namespace.users namespace.users
else else
namespace.owner namespace.owner
end end
end end
end.flatten.compact end.flatten.compact.uniq
end end
   
def labels def labels
references[:labels].map do |entry| references[:label].uniq.map do |project, identifier|
project.labels.where(id: entry[:id]).first project.labels.where(id: identifier).first
end.compact end.compact.uniq
end end
   
def issues def issues
references[:issues].map do |entry| references[:issue].uniq.map do |project, identifier|
if entry[:project].default_issues_tracker? if project.default_issues_tracker?
entry[:project].issues.where(iid: entry[:id]).first project.issues.where(iid: identifier).first
end end
end.compact end.compact.uniq
end end
   
def merge_requests def merge_requests
references[:merge_requests].map do |entry| references[:merge_request].uniq.map do |project, identifier|
entry[:project].merge_requests.where(iid: entry[:id]).first project.merge_requests.where(iid: identifier).first
end.compact end.compact.uniq
end end
   
def snippets def snippets
references[:snippets].map do |entry| references[:snippet].uniq.map do |project, identifier|
project.snippets.where(id: entry[:id]).first project.snippets.where(id: identifier).first
end.compact end.compact.uniq
end end
   
def commits def commits
references[:commits].map do |entry| references[:commit].uniq.map do |project, identifier|
repo = entry[:project].repository repo = project.repository
repo.commit(entry[:id]) if repo repo.commit(identifier) if repo
end.compact end.compact.uniq
end end
   
def commit_ranges def commit_ranges
references[:commit_ranges].map do |entry| references[:commit_range].uniq.map do |project, identifier|
repo = entry[:project].repository if entry[:project] repo = project.repository
if repo if repo
from_id, to_id = entry[:id].split(/\.{2,3}/, 2) from_id, to_id = identifier.split(/\.{2,3}/, 2)
[repo.commit(from_id), repo.commit(to_id)] [repo.commit(from_id), repo.commit(to_id)]
end end
end.compact end.compact.uniq
end end
   
private private
   
def reference_link(type, identifier, project, user, _) def reference_link(type, identifier, project, _)
references[type] << { project: project, id: identifier } references[type] << [project, identifier]
end end
end end
end end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment