From b401b3025b878d87a58cf22cee4b5be8fdfa762a Mon Sep 17 00:00:00 2001 From: Yorick Peterse Date: Tue, 15 Aug 2017 12:33:07 +0200 Subject: [PATCH] Allow usage of any_projects? with an Array In some cases we pass an Array to this method which would previously fail since Array does not respond to "limit_value". Fixes https://gitlab.com/gitlab-org/gitlab-ce/issues/3646 --- app/helpers/projects_helper.rb | 2 ++ spec/helpers/projects_helper_spec.rb | 12 +++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index 09cfd06dad3..278d394bc03 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -234,6 +234,8 @@ module ProjectsHelper # If no limit is applied we'll just issue a COUNT since the result set could # be too large to load into memory. def any_projects?(projects) + return projects.any? if projects.is_a?(Array) + if projects.limit_value projects.to_a.any? else diff --git a/spec/helpers/projects_helper_spec.rb b/spec/helpers/projects_helper_spec.rb index 37a5e6b474e..d1efa318d14 100644 --- a/spec/helpers/projects_helper_spec.rb +++ b/spec/helpers/projects_helper_spec.rb @@ -432,9 +432,7 @@ describe ProjectsHelper do end describe '#any_projects?' do - before do - create(:project) - end + let!(:project) { create(:project) } it 'returns true when projects will be returned' do expect(helper.any_projects?(Project.all)).to eq(true) @@ -444,6 +442,14 @@ describe ProjectsHelper do expect(helper.any_projects?(Project.none)).to eq(false) end + it 'returns true when using a non-empty Array' do + expect(helper.any_projects?([project])).to eq(true) + end + + it 'returns false when using an empty Array' do + expect(helper.any_projects?([])).to eq(false) + end + it 'only executes a single query when a LIMIT is applied' do relation = Project.limit(1) recorder = ActiveRecord::QueryRecorder.new do