blob: f3f8933b81f92b2977d6514c4e077fc058cc2b5b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
# frozen_string_literal: true
module Gitlab
module NoteableMetadata
def noteable_meta_data(noteable_collection, collection_type)
# ActiveRecord uses Object#extend for null relations.
if !(noteable_collection.singleton_class < ActiveRecord::NullRelation) &&
noteable_collection.respond_to?(:limit_value) &&
noteable_collection.limit_value.nil?
raise 'Collection must have a limit applied for preloading meta-data'
end
# map has to be used here since using pluck or select will
# throw an error when ordering noteables which inserts
# a new order into the collection.
# We cannot use reorder to not mess up the paginated collection.
noteable_ids = noteable_collection.map(&:id)
return {} if noteable_ids.empty?
noteable_notes_count = ::Note.count_for_collection(noteable_ids, collection_type)
noteable_ids.each_with_object({}) do |id, noteable_meta|
notes = noteable_notes_count.find { |notes| notes.noteable_id == id }
noteable_meta[id] = ::Noteable::NoteableMeta.new(
notes.try(:count).to_i
)
end
end
end
end
|