From d2159deaf272de265ba11f16a92d60ea61def19f Mon Sep 17 00:00:00 2001 From: 178inaba Date: Tue, 25 Apr 2017 11:44:43 +0900 Subject: [PATCH] Optimize account search (#2421) --- app/services/account_search_service.rb | 8 +++++--- spec/services/account_search_service_spec.rb | 6 ++++++ 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/app/services/account_search_service.rb b/app/services/account_search_service.rb index 58a23d97..e695d22c 100644 --- a/app/services/account_search_service.rb +++ b/app/services/account_search_service.rb @@ -15,12 +15,12 @@ class AccountSearchService < BaseService private def search_service_results - return [] if query_blank_or_hashtag? + return [] if query_blank_or_hashtag? || limit < 1 if resolving_non_matching_remote_account? [FollowRemoteAccountService.new.call("#{query_username}@#{query_domain}")] else - search_results_and_exact_match.compact.uniq + search_results_and_exact_match.compact.uniq.slice(0, limit) end end @@ -29,7 +29,9 @@ class AccountSearchService < BaseService end def search_results_and_exact_match - [exact_match] + search_results.to_a + exact = [exact_match] + return exact if !exact[0].nil? && limit == 1 + exact + search_results.to_a end def query_blank_or_hashtag? diff --git a/spec/services/account_search_service_spec.rb b/spec/services/account_search_service_spec.rb index 72362383..b7c281a5 100644 --- a/spec/services/account_search_service_spec.rb +++ b/spec/services/account_search_service_spec.rb @@ -11,6 +11,12 @@ describe AccountSearchService do it 'returns empty array for hashtag query' do results = subject.call('#tag', 10) + expect(results).to eq [] + end + it 'returns empty array for limit zero' do + Fabricate(:account, username: 'match') + results = subject.call('match', 0) + expect(results).to eq [] end end