diff options
author | Douwe Maan <douwe@gitlab.com> | 2015-10-13 23:53:05 +0300 |
---|---|---|
committer | Douwe Maan <douwe@gitlab.com> | 2015-10-13 23:53:05 +0300 |
commit | 93fcddd7a7ce4ed259794a4511ae04035ae33be2 (patch) | |
tree | e866959ff93d0e473e993b4bd727f92aad0fac7c /lib/gitlab/markdown | |
parent | 251e13666d04a1c8427401962e3e171e569d9088 (diff) |
Allow ReferenceExtractor to efficiently load references from multiple texts at once
Diffstat (limited to 'lib/gitlab/markdown')
-rw-r--r-- | lib/gitlab/markdown/reference_filter.rb | 9 | ||||
-rw-r--r-- | lib/gitlab/markdown/reference_gatherer_filter.rb | 9 |
2 files changed, 11 insertions, 7 deletions
diff --git a/lib/gitlab/markdown/reference_filter.rb b/lib/gitlab/markdown/reference_filter.rb index 0ae0d93f70d..ede9f8865ff 100644 --- a/lib/gitlab/markdown/reference_filter.rb +++ b/lib/gitlab/markdown/reference_filter.rb @@ -12,7 +12,14 @@ module Gitlab # :project (required) - Current project, ignored if reference is cross-project. # :only_path - Generate path-only links. class ReferenceFilter < HTML::Pipeline::Filter - LazyReference = Struct.new(:klass, :ids) + LazyReference = Struct.new(:klass, :ids) do + def self.load(refs) + refs.group_by(&:klass).flat_map do |klass, refs| + ids = refs.flat_map(&:ids) + klass.where(id: ids) + end + end + end def self.user_can_reference?(user, node, context) if node.has_attribute?('data-project') diff --git a/lib/gitlab/markdown/reference_gatherer_filter.rb b/lib/gitlab/markdown/reference_gatherer_filter.rb index cf9a2303db8..18df5db94d6 100644 --- a/lib/gitlab/markdown/reference_gatherer_filter.rb +++ b/lib/gitlab/markdown/reference_gatherer_filter.rb @@ -21,7 +21,7 @@ module Gitlab gather_references(node) end - load_lazy_references + load_lazy_references unless context[:load_lazy_references] == false doc end @@ -56,11 +56,8 @@ module Gitlab # Will load all references of one type using one query. def load_lazy_references result[:lazy_references].each do |type, refs| - refs.group_by(&:klass).each do |klass, refs| - ids = refs.map(&:ids).flatten - values = klass.find(ids) - result[:references][type].push(*values) - end + values = ReferenceFilter::LazyReference.load(refs) + result[:references][type].concat(values) end end |