Class: Preloaders::GroupRootAncestorPreloader

Inherits:
Object
  • Object
show all
Defined in:
app/models/preloaders/group_root_ancestor_preloader.rb

Instance Method Summary collapse

Constructor Details

#initialize(groups, root_ancestor_preloads = []) ⇒ GroupRootAncestorPreloader

Returns a new instance of GroupRootAncestorPreloader.



5
6
7
8
# File 'app/models/preloaders/group_root_ancestor_preloader.rb', line 5

def initialize(groups, root_ancestor_preloads = [])
  @groups = groups
  @root_ancestor_preloads = root_ancestor_preloads
end

Instance Method Details

#executeObject



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'app/models/preloaders/group_root_ancestor_preloader.rb', line 10

def execute
  return unless ::Feature.enabled?(:use_traversal_ids)

  # type == 'Group' condition located on subquery to prevent a filter in the query
  root_query = Namespace.joins("INNER JOIN (#{join_sql}) as root_query ON root_query.root_id = namespaces.id")
                    .select('namespaces.*, root_query.id as source_id')

  root_query = root_query.preload(*@root_ancestor_preloads) if @root_ancestor_preloads.any?

  root_ancestors_by_id = root_query.group_by(&:source_id)

  @groups.each do |group|
    group.root_ancestor = root_ancestors_by_id[group.id].first
  end
end