From 17cecd75cadfd9914ffc233de01d41204ef7802c Mon Sep 17 00:00:00 2001 From: Akihiko Odaki Date: Mon, 22 Jan 2018 22:24:22 +0900 Subject: Rename FetchRemoteResourceService to ResolveURLService (#6328) The service used to be named FetchRemoteResourceService resolves local URL as well. --- app/services/fetch_remote_resource_service.rb | 90 --------------------------- app/services/resolve_url_service.rb | 90 +++++++++++++++++++++++++++ app/services/search_service.rb | 14 ++--- 3 files changed, 97 insertions(+), 97 deletions(-) delete mode 100644 app/services/fetch_remote_resource_service.rb create mode 100644 app/services/resolve_url_service.rb (limited to 'app') diff --git a/app/services/fetch_remote_resource_service.rb b/app/services/fetch_remote_resource_service.rb deleted file mode 100644 index 6d40796f2..000000000 --- a/app/services/fetch_remote_resource_service.rb +++ /dev/null @@ -1,90 +0,0 @@ -# frozen_string_literal: true - -class FetchRemoteResourceService < BaseService - include JsonLdHelper - - attr_reader :url - - def call(url) - @url = url - - return process_local_url if local_url? - - process_url unless fetched_atom_feed.nil? - end - - private - - def process_url - case type - when 'Person' - FetchRemoteAccountService.new.call(atom_url, body, protocol) - when 'Note' - FetchRemoteStatusService.new.call(atom_url, body, protocol) - end - end - - def fetched_atom_feed - @_fetched_atom_feed ||= FetchAtomService.new.call(url) - end - - def atom_url - fetched_atom_feed.first - end - - def body - fetched_atom_feed.second[:prefetched_body] - end - - def protocol - fetched_atom_feed.third - end - - def type - return json_data['type'] if protocol == :activitypub - - case xml_root - when 'feed' - 'Person' - when 'entry' - 'Note' - end - end - - def json_data - @_json_data ||= body_to_json(body) - end - - def xml_root - xml_data.root.name - end - - def xml_data - @_xml_data ||= Nokogiri::XML(body, nil, 'utf-8') - end - - def local_url? - TagManager.instance.local_url?(@url) - end - - def process_local_url - recognized_params = Rails.application.routes.recognize_path(@url) - - return unless recognized_params[:action] == 'show' - - if recognized_params[:controller] == 'stream_entries' - status = StreamEntry.find_by(id: recognized_params[:id])&.status - check_local_status(status) - elsif recognized_params[:controller] == 'statuses' - status = Status.find_by(id: recognized_params[:id]) - check_local_status(status) - elsif recognized_params[:controller] == 'accounts' - Account.find_local(recognized_params[:username]) - end - end - - def check_local_status(status) - return if status.nil? - status if status.public_visibility? || status.unlisted_visibility? - end -end diff --git a/app/services/resolve_url_service.rb b/app/services/resolve_url_service.rb new file mode 100644 index 000000000..1f2b24524 --- /dev/null +++ b/app/services/resolve_url_service.rb @@ -0,0 +1,90 @@ +# frozen_string_literal: true + +class ResolveURLService < BaseService + include JsonLdHelper + + attr_reader :url + + def call(url) + @url = url + + return process_local_url if local_url? + + process_url unless fetched_atom_feed.nil? + end + + private + + def process_url + case type + when 'Person' + FetchRemoteAccountService.new.call(atom_url, body, protocol) + when 'Note' + FetchRemoteStatusService.new.call(atom_url, body, protocol) + end + end + + def fetched_atom_feed + @_fetched_atom_feed ||= FetchAtomService.new.call(url) + end + + def atom_url + fetched_atom_feed.first + end + + def body + fetched_atom_feed.second[:prefetched_body] + end + + def protocol + fetched_atom_feed.third + end + + def type + return json_data['type'] if protocol == :activitypub + + case xml_root + when 'feed' + 'Person' + when 'entry' + 'Note' + end + end + + def json_data + @_json_data ||= body_to_json(body) + end + + def xml_root + xml_data.root.name + end + + def xml_data + @_xml_data ||= Nokogiri::XML(body, nil, 'utf-8') + end + + def local_url? + TagManager.instance.local_url?(@url) + end + + def process_local_url + recognized_params = Rails.application.routes.recognize_path(@url) + + return unless recognized_params[:action] == 'show' + + if recognized_params[:controller] == 'stream_entries' + status = StreamEntry.find_by(id: recognized_params[:id])&.status + check_local_status(status) + elsif recognized_params[:controller] == 'statuses' + status = Status.find_by(id: recognized_params[:id]) + check_local_status(status) + elsif recognized_params[:controller] == 'accounts' + Account.find_local(recognized_params[:username]) + end + end + + def check_local_status(status) + return if status.nil? + status if status.public_visibility? || status.unlisted_visibility? + end +end diff --git a/app/services/search_service.rb b/app/services/search_service.rb index 85ad94463..5f763b8f7 100644 --- a/app/services/search_service.rb +++ b/app/services/search_service.rb @@ -8,7 +8,7 @@ class SearchService < BaseService default_results.tap do |results| if url_query? - results.merge!(remote_resource_results) unless remote_resource.nil? + 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?('@') @@ -24,15 +24,15 @@ class SearchService < BaseService query =~ /\Ahttps?:\/\// end - def remote_resource_results - { remote_resource_symbol => [remote_resource] } + def url_resource_results + { url_resource_symbol => [url_resource] } end - def remote_resource - @_remote_resource ||= FetchRemoteResourceService.new.call(query) + def url_resource + @_url_resource ||= ResolveURLService.new.call(query) end - def remote_resource_symbol - remote_resource.class.name.downcase.pluralize.to_sym + def url_resource_symbol + url_resource.class.name.downcase.pluralize.to_sym end end -- cgit