about summary refs log tree commit diff
path: root/app/services/search_service.rb
diff options
context:
space:
mode:
authorMatt Jankowski <mjankowski@thoughtbot.com>2017-05-05 11:26:04 -0400
committerEugen Rochko <eugen@zeonfederated.com>2017-05-05 17:26:04 +0200
commit20c37ed0f988298de75a3c41472222076806d243 (patch)
tree9fd1d3a688483e2fbc26e5ec02586db1ce7602b4 /app/services/search_service.rb
parent9501a877048a34627155b04b75a9c75fdbb25cb9 (diff)
Add specs (and refactor) of FetchRemoteResourceService and SearchService (#2812)
* Coverage for fetch remote resource service

* Refactor fetch remote resource service

* Coverage for search service

* Refactor search service
Diffstat (limited to 'app/services/search_service.rb')
-rw-r--r--app/services/search_service.rb39
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