diff options
Diffstat (limited to 'app/services/search_service.rb')
-rw-r--r-- | app/services/search_service.rb | 39 |
1 files changed, 28 insertions, 11 deletions
diff --git a/app/services/search_service.rb b/app/services/search_service.rb index e9745010b..1ed3f0032 100644 --- a/app/services/search_service.rb +++ b/app/services/search_service.rb @@ -1,21 +1,38 @@ # frozen_string_literal: true class SearchService < BaseService + attr_accessor :query + def call(query, limit, resolve = false, account = nil) - results = { accounts: [], hashtags: [], statuses: [] } + @query = query - return results if query.blank? + default_results.tap do |results| + if url_query? + results.merge!(remote_resource_results) unless remote_resource.nil? + elsif query.present? + results[:accounts] = AccountSearchService.new.call(query, limit, resolve, account) + results[:hashtags] = Tag.search_for(query.gsub(/\A#/, ''), limit) unless query.start_with?('@') + end + end + end - if query =~ /\Ahttps?:\/\// - resource = FetchRemoteResourceService.new.call(query) + def default_results + { accounts: [], hashtags: [], statuses: [] } + end - results[:accounts] << resource if resource.is_a?(Account) - results[:statuses] << resource if resource.is_a?(Status) - else - results[:accounts] = AccountSearchService.new.call(query, limit, resolve, account) - results[:hashtags] = Tag.search_for(query.gsub(/\A#/, ''), limit) unless query.start_with?('@') - end + def url_query? + query =~ /\Ahttps?:\/\// + end + + def remote_resource_results + { remote_resource_symbol => [remote_resource] } + end + + def remote_resource + @_remote_resource ||= FetchRemoteResourceService.new.call(query) + end - results + def remote_resource_symbol + remote_resource.class.name.downcase.pluralize.to_sym end end |