Class: API::Entities::BasicProjectDetails

Inherits:
ProjectIdentity show all
Extended by:
ProjectsRelationBuilder
Includes:
Gitlab::Utils::StrongMemoize
Defined in:
lib/api/entities/basic_project_details.rb

Direct Known Subclasses

ProjectDetails

Class Method Summary collapse

Methods included from ProjectsRelationBuilder

execute_batch_counting, preload_groups, preload_member_roles, preload_relation, preload_repository_cache, prepare_relation, projects_for_group_preload, repositories_for_preload

Class Method Details

.execute_batch_counting(projects_relation) ⇒ Object

rubocop: enable CodeReuse/ActiveRecord



61
62
63
64
65
66
67
68
69
# File 'lib/api/entities/basic_project_details.rb', line 61

def self.execute_batch_counting(projects_relation)
  # Call the count methods on every project, so the BatchLoader would load them all at
  # once when the entities are rendered
  projects_relation.each(&:forks_count)

  projects_relation.each(&:self_or_ancestors_archived?)

  super
end

.postload_relation(projects_relation, options = {}) ⇒ Object



71
# File 'lib/api/entities/basic_project_details.rb', line 71

def self.postload_relation(projects_relation, options = {}) end

.preload_relation(projects_relation, options = {}) ⇒ Object

rubocop: disable CodeReuse/ActiveRecord



49
50
51
52
53
54
55
56
57
58
# File 'lib/api/entities/basic_project_details.rb', line 49

def self.preload_relation(projects_relation, options = {})
  # Preloading topics, should be done with using only `:topics`,
  # as `:topics` are defined as: `has_many :topics, through: :project_topics`
  # N+1 is solved then by using `subject.topics.map(&:name)`
  # MR describing the solution: https://gitlab.com/gitlab-org/gitlab-foss/merge_requests/20555
  projects_relation.preload(:project_feature, :route)
                   .preload(:import_state, :topics)
                   .preload(:auto_devops)
                   .preload(namespace: [:route, :owner])
end