From d15eec64604d68093d8f01711c1847ee240eb0d2 Mon Sep 17 00:00:00 2001 From: Yorick Peterse Date: Tue, 6 Oct 2015 13:52:19 +0200 Subject: Use >= instead of > in TrendingProjectsFinder By using >= we can ensure we actually get all comments of the past month, instead of the comments of the past month minus the first day in the range. --- app/finders/trending_projects_finder.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app/finders') diff --git a/app/finders/trending_projects_finder.rb b/app/finders/trending_projects_finder.rb index 9ea342cb26d..9b710f0751f 100644 --- a/app/finders/trending_projects_finder.rb +++ b/app/finders/trending_projects_finder.rb @@ -6,7 +6,7 @@ class TrendingProjectsFinder # Determine trending projects based on comments count # for period of time - ex. month - projects.joins(:notes).where('notes.created_at > ?', start_date). + projects.joins(:notes).where('notes.created_at >= ?', start_date). group("projects.id").reorder("count(notes.id) DESC") end -- cgit v1.2.3 From b7abba0ca0a4629a854eee0488f94f160452e2f6 Mon Sep 17 00:00:00 2001 From: Yorick Peterse Date: Tue, 6 Oct 2015 16:35:51 +0200 Subject: Revamp trending projects query This changes the query to use a COUNT nested in an INNER JOIN, instead of a COUNT plus a GROUP BY. There are two reasons for this: 1. Using a COUNT in an INNER JOIN can be quite a bit faster. 2. The use of a GROUP BY means that method calls such as "any?" (and everything else that calls "count") operate on a Hash that counts the amount of notes on a per project basis, instead of just counting the total amount of projects. The query has been moved into Project.trending as its logic is simple enough. As a result of this testing the TrendingProjectsFinder class simply involves testing if the right methods are called, removing the need for setting up database records. --- app/finders/trending_projects_finder.rb | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) (limited to 'app/finders') diff --git a/app/finders/trending_projects_finder.rb b/app/finders/trending_projects_finder.rb index 9b710f0751f..81a12403801 100644 --- a/app/finders/trending_projects_finder.rb +++ b/app/finders/trending_projects_finder.rb @@ -1,13 +1,6 @@ class TrendingProjectsFinder - def execute(current_user, start_date = nil) - start_date ||= Date.today - 1.month - - projects = projects_for(current_user) - - # Determine trending projects based on comments count - # for period of time - ex. month - projects.joins(:notes).where('notes.created_at >= ?', start_date). - group("projects.id").reorder("count(notes.id) DESC") + def execute(current_user, start_date = 1.month.ago) + projects_for(current_user).trending(start_date) end private -- cgit v1.2.3