Module: API::ProjectsRelationBuilder
- Included in:
- Entities::BasicProjectDetails
- Defined in:
- lib/api/projects_relation_builder.rb
Instance Method Summary collapse
-
#execute_batch_counting(projects_relation) ⇒ Object
This is overridden by the specific Entity class to batch load certain counts.
-
#preload_groups(projects_relation) ⇒ Object
For all projects except those in a user namespace, the
namespaceandgroupare identical. - #preload_member_roles(projects_relation, user) ⇒ Object
-
#preload_relation(projects_relation, _options = {}) ⇒ Object
This is overridden by the specific Entity class to preload assocations that it needs.
- #preload_repository_cache(projects_relation) ⇒ Object
- #prepare_relation(projects_relation, options = {}) ⇒ Object
- #projects_for_group_preload(projects_relation) ⇒ Object
- #repositories_for_preload(projects_relation) ⇒ Object
Instance Method Details
#execute_batch_counting(projects_relation) ⇒ Object
This is overridden by the specific Entity class to batch load certain counts
32 |
# File 'lib/api/projects_relation_builder.rb', line 32 def execute_batch_counting(projects_relation); end |
#preload_groups(projects_relation) ⇒ Object
For all projects except those in a user namespace, the namespace and group are identical. Preload the group when it’s not a user namespace.
48 49 50 51 52 53 54 55 56 57 |
# File 'lib/api/projects_relation_builder.rb', line 48 def preload_groups(projects_relation) group_projects = projects_for_group_preload(projects_relation) groups = group_projects.map(&:namespace) ::Namespaces::Preloaders::GroupRootAncestorPreloader.new(groups).execute group_projects.each do |project| project.group = project.namespace end end |
#preload_member_roles(projects_relation, user) ⇒ Object
63 64 65 |
# File 'lib/api/projects_relation_builder.rb', line 63 def preload_member_roles(projects_relation, user) # overridden in EE end |
#preload_relation(projects_relation, _options = {}) ⇒ Object
This is overridden by the specific Entity class to preload assocations that it needs
26 27 28 |
# File 'lib/api/projects_relation_builder.rb', line 26 def preload_relation(projects_relation, = {}) projects_relation end |
#preload_repository_cache(projects_relation) ⇒ Object
34 35 36 37 38 39 40 |
# File 'lib/api/projects_relation_builder.rb', line 34 def preload_repository_cache(projects_relation) repositories = repositories_for_preload(projects_relation) Gitlab::RepositoryCache::Preloader.new(repositories).preload( # rubocop:disable CodeReuse/ActiveRecord %i[exists? root_ref has_visible_content? avatar readme_path] ) end |
#prepare_relation(projects_relation, options = {}) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/api/projects_relation_builder.rb', line 5 def prepare_relation(projects_relation, = {}) projects_relation = preload_relation(projects_relation, ) execute_batch_counting(projects_relation) postload_relation(projects_relation, ) preload_repository_cache(projects_relation) if [:current_user] Preloaders::UserMaxAccessLevelInProjectsPreloader.new(projects_relation, [:current_user]).execute end preload_member_roles(projects_relation, [:current_user]) if [:current_user] preload_groups(projects_relation) if [:with] == Entities::Project projects_relation end |
#projects_for_group_preload(projects_relation) ⇒ Object
59 60 61 |
# File 'lib/api/projects_relation_builder.rb', line 59 def projects_for_group_preload(projects_relation) projects_relation.select { |project| project.namespace.type == Group.sti_name } end |
#repositories_for_preload(projects_relation) ⇒ Object
42 43 44 |
# File 'lib/api/projects_relation_builder.rb', line 42 def repositories_for_preload(projects_relation) projects_relation.map(&:repository) end |