File: project_details.rb

package info (click to toggle)
gitlab 17.6.5-19
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 629,368 kB
  • sloc: ruby: 1,915,304; javascript: 557,307; sql: 60,639; xml: 6,509; sh: 4,567; makefile: 1,239; python: 406
file content (35 lines) | stat: -rw-r--r-- 1,376 bytes parent folder | download
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
34
35
# frozen_string_literal: true

module API
  module Entities
    class ProjectDetails < BasicProjectDetails
      expose :forked_from_project, using: Entities::BasicProjectDetails, if: ->(project, options) do
        project.forked? && Ability.allowed?(options[:current_user], :read_project, project.forked_from_project)
      end

      # rubocop: disable CodeReuse/ActiveRecord
      def self.preload_relation(projects_relation, _options = {})
        super(projects_relation).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
      # rubocop: enable CodeReuse/ActiveRecord

      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.filter_map(&:forked_from_project).each(&:forks_count)

        super
      end

      def self.repositories_for_preload(projects_relation)
        super + projects_relation.filter_map(&:forked_from_project).map(&:repository)
      end
    end
  end
end

API::Entities::ProjectDetails.prepend_mod_with('API::Entities::ProjectDetails', with_descendants: true)