From 194f7bca9a286942bcd764c836180964e33a1e92 Mon Sep 17 00:00:00 2001 From: Francisco Lopez Date: Thu, 30 Nov 2017 12:52:38 +0100 Subject: Comments from code review applied. Also switched forked_from_project and ForkedProjectLinks to ForkNetworkMember --- app/services/projects/batch_count_service.rb | 21 ++++++--------------- app/services/projects/batch_forks_count_service.rb | 8 +++++--- .../projects/batch_open_issues_count_service.rb | 7 +++---- app/services/projects/count_service.rb | 2 -- app/services/projects/forks_count_service.rb | 6 +++++- app/services/projects/open_issues_count_service.rb | 10 +++++++--- 6 files changed, 26 insertions(+), 28 deletions(-) (limited to 'app/services') diff --git a/app/services/projects/batch_count_service.rb b/app/services/projects/batch_count_service.rb index b8a030e7bc5..a79fdb62d69 100644 --- a/app/services/projects/batch_count_service.rb +++ b/app/services/projects/batch_count_service.rb @@ -4,28 +4,19 @@ module Projects @projects = projects end - def count - @projects.map do |project| - [project.id, current_count_service(project).count] - end.to_h - end - def refresh_cache @projects.each do |project| - unless current_count_service(project).count_stored? - current_count_service(project).refresh_cache { global_count[project.id].to_i } + service = count_service.new(project) + unless service.count_stored? + service.refresh_cache { global_count[project.id].to_i } end end end - def current_count_service(project) - if defined? @service - @service.project = project - else - @service = count_service.new(project) - end + def project_ids + return @projects if @projects.is_a?(ActiveRecord::Relation) - @service + @projects.map(&:id) end def global_count(project) diff --git a/app/services/projects/batch_forks_count_service.rb b/app/services/projects/batch_forks_count_service.rb index 51fad1c12a4..b9ed0b3cf4f 100644 --- a/app/services/projects/batch_forks_count_service.rb +++ b/app/services/projects/batch_forks_count_service.rb @@ -2,9 +2,11 @@ module Projects # Service class for getting and caching the number of forks of several projects class BatchForksCountService < Projects::BatchCountService def global_count - @global_count ||= ForkedProjectLink.where(forked_from_project: @projects.map(&:id)) - .group(:forked_from_project_id) - .count + @global_count ||= begin + count_service.query(project_ids) + .group(:forked_from_project_id) + .count + end end def count_service diff --git a/app/services/projects/batch_open_issues_count_service.rb b/app/services/projects/batch_open_issues_count_service.rb index a0d9120487c..5087684863b 100644 --- a/app/services/projects/batch_open_issues_count_service.rb +++ b/app/services/projects/batch_open_issues_count_service.rb @@ -2,10 +2,9 @@ module Projects # Service class for getting and caching the number of forks of several projects class BatchOpenIssuesCountService < Projects::BatchCountService def global_count - @global_count ||= Issue.opened.public_only - .where(project: @projects.map(&:id)) - .group(:project_id) - .count + @global_count ||= begin + count_service.query(project_ids).group(:project_id).count + end end def count_service diff --git a/app/services/projects/count_service.rb b/app/services/projects/count_service.rb index a3ec52232dd..7e575b2d6f3 100644 --- a/app/services/projects/count_service.rb +++ b/app/services/projects/count_service.rb @@ -7,8 +7,6 @@ module Projects # all caches. VERSION = 1 - attr_accessor :project - def initialize(project) @project = project end diff --git a/app/services/projects/forks_count_service.rb b/app/services/projects/forks_count_service.rb index d9bdf3a8ad7..d67ae78b268 100644 --- a/app/services/projects/forks_count_service.rb +++ b/app/services/projects/forks_count_service.rb @@ -2,11 +2,15 @@ module Projects # Service class for getting and caching the number of forks of a project. class ForksCountService < Projects::CountService def relation_for_count - @project.forks + self.class.query(@project.id) end def cache_key_name 'forks_count' end + + def self.query(project_ids) + ForkNetworkMember.where(forked_from_project: project_ids) + end end end diff --git a/app/services/projects/open_issues_count_service.rb b/app/services/projects/open_issues_count_service.rb index 25de97325e2..ab1c477936a 100644 --- a/app/services/projects/open_issues_count_service.rb +++ b/app/services/projects/open_issues_count_service.rb @@ -3,13 +3,17 @@ module Projects # project. class OpenIssuesCountService < Projects::CountService def relation_for_count - # We don't include confidential issues in this number since this would - # expose the number of confidential issues to non project members. - @project.issues.opened.public_only + self.class.query(@project.id) end def cache_key_name 'open_issues_count' end + + def self.query(project_ids) + # We don't include confidential issues in this number since this would + # expose the number of confidential issues to non project members. + Issue.opened.public_only.where(project: project_ids) + end end end -- cgit v1.2.3