Skip to content
Snippets Groups Projects
Commit 35017655 authored by Jarka Kadlecova's avatar Jarka Kadlecova
Browse files

Prepare banzai for extracting epics in EE

parent 6ea674d1
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -18,7 +18,7 @@ module Banzai
issuables = extractor.extract([doc])
 
issuables.each do |node, issuable|
next if !can_read_cross_project? && issuable.project != project
next if !can_read_cross_project? && cross_reference?(issuable)
 
if VISIBLE_STATES.include?(issuable.state) && issuable_reference?(node.inner_html, issuable)
node.content += " (#{issuable.state})"
Loading
Loading
@@ -31,7 +31,11 @@ module Banzai
private
 
def issuable_reference?(text, issuable)
text == issuable.reference_link_text(project || group)
CGI.unescapeHTML(text) == issuable.reference_link_text(project || group)
end
def cross_reference?(issuable)
issuable.project != project || (issuable.respond_to?(:group) && issuable.group != group)
end
 
def can_read_cross_project?
Loading
Loading
Loading
Loading
@@ -9,10 +9,7 @@ module Banzai
# so we can avoid N+1 queries problem
 
class IssuableExtractor
QUERY = %q(
descendant-or-self::a[contains(concat(" ", @class, " "), " gfm ")]
[@data-reference-type="issue" or @data-reference-type="merge_request"]
).freeze
prepend EE::Banzai::IssuableExtractor
 
attr_reader :context
 
Loading
Loading
@@ -24,21 +21,41 @@ module Banzai
# Returns Hash in the form { node => issuable_instance }
def extract(documents)
nodes = documents.flat_map do |document|
document.xpath(QUERY)
document.xpath(query)
end
 
issue_parser = Banzai::ReferenceParser::IssueParser.new(context)
# The project or group for the issuable might be pending for deletion!
# Filter them out because we don't care about them.
issuables_for_nodes(nodes).select { |node, issuable| issuable.project || issuable.group }
end
private
def issuables_for_nodes(nodes)
result = {}
parsers.each do |parser|
result.merge!(parser.records_for_nodes(nodes))
end
 
merge_request_parser =
result
end
def parsers
[
Banzai::ReferenceParser::IssueParser.new(context),
Banzai::ReferenceParser::MergeRequestParser.new(context)
]
end
 
issuables_for_nodes = issue_parser.records_for_nodes(nodes).merge(
merge_request_parser.records_for_nodes(nodes)
def query
%Q(
descendant-or-self::a[contains(concat(" ", @class, " "), " gfm ")]
[#{reference_types}]
)
end
 
# The project for the issue/MR might be pending for deletion!
# Filter them out because we don't care about them.
issuables_for_nodes.select { |node, issuable| issuable.project }
def reference_types
'@data-reference-type="issue" or @data-reference-type="merge_request"'
end
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment