- # frozen_string_literal: true
-
- class SearchService < BaseService
- attr_accessor :query
-
- def call(query, limit, resolve = false, account = nil)
- @query = query
-
- default_results.tap do |results|
- if url_query?
- results.merge!(url_resource_results) unless url_resource.nil?
- elsif query.present?
- results[:accounts] = AccountSearchService.new.call(query, limit, account, resolve: resolve)
- results[:hashtags] = Tag.search_for(query.gsub(/\A#/, ''), limit) unless query.start_with?('@')
- end
- end
- end
-
- def default_results
- { accounts: [], hashtags: [], statuses: [] }
- end
-
- def url_query?
- query =~ /\Ahttps?:\/\//
- end
-
- def url_resource_results
- { url_resource_symbol => [url_resource] }
- end
-
- def url_resource
- @_url_resource ||= ResolveURLService.new.call(query)
- end
-
- def url_resource_symbol
- url_resource.class.name.downcase.pluralize.to_sym
- end
- end
|