Class: API::Entities::Project
- Inherits:
-
BasicProjectDetails
- Object
- Grape::Entity
- ProjectIdentity
- BasicProjectDetails
- API::Entities::Project
- Includes:
- Helpers::RelatedResourcesHelpers
- Defined in:
- lib/api/entities/project.rb
Direct Known Subclasses
Class Method Summary collapse
-
.execute_batch_counting(projects_relation) ⇒ Object
rubocop: enable CodeReuse/ActiveRecord.
- .preload_relation(projects_relation, options = {}) ⇒ Object
-
.preload_resource(project) ⇒ Object
rubocop: disable CodeReuse/ActiveRecord.
- .repositories_for_preload(projects_relation) ⇒ Object
Methods included from Helpers::RelatedResourcesHelpers
#expose_path, #expose_url, #issues_available?, #mrs_available?, #project_feature_string_access_level
Methods inherited from BasicProjectDetails
Class Method Details
.execute_batch_counting(projects_relation) ⇒ Object
rubocop: enable CodeReuse/ActiveRecord
189 190 191 192 193 194 195 196 |
# File 'lib/api/entities/project.rb', line 189 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(&:open_issues_count) projects_relation.map(&:forked_from_project).compact.each(&:forks_count) super end |
.preload_relation(projects_relation, options = {}) ⇒ Object
171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 |
# File 'lib/api/entities/project.rb', line 171 def self.preload_relation(projects_relation, = {}) # 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 super(projects_relation).preload(group: :namespace_settings) .preload(:ci_cd_settings) .preload(:project_setting) .preload(:container_expiration_policy) .preload(:auto_devops) .preload(:service_desk_setting) .preload(project_group_links: { group: :route }, fork_network: :root_project, fork_network_member: :forked_from_project, forked_from_project: [:route, :topics, :group, :project_feature, namespace: [:route, :owner]]) end |
.preload_resource(project) ⇒ Object
rubocop: disable CodeReuse/ActiveRecord
167 168 169 |
# File 'lib/api/entities/project.rb', line 167 def self.preload_resource(project) ActiveRecord::Associations::Preloader.new(records: [project], associations: { project_group_links: { group: :route } }).call end |
.repositories_for_preload(projects_relation) ⇒ Object
198 199 200 |
# File 'lib/api/entities/project.rb', line 198 def self.repositories_for_preload(projects_relation) super + projects_relation.map(&:forked_from_project).compact.map(&:repository) end |