commit: 17cecd75cadfd9914ffc233de01d41204ef7802c
parent: 8cc65cde274055a8c6e89a0de2d8811880d4b55d
Author: Akihiko Odaki <akihiko.odaki.4i@stu.hosei.ac.jp>
Date: Mon, 22 Jan 2018 22:24:22 +0900
Rename FetchRemoteResourceService to ResolveURLService (#6328)
The service used to be named FetchRemoteResourceService resolves local
URL as well.
Diffstat:
6 files changed, 153 insertions(+), 153 deletions(-)
diff --git a/app/services/fetch_remote_resource_service.rb b/app/services/fetch_remote_resource_service.rb
@@ -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
@@ -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
@@ -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
diff --git a/spec/services/fetch_remote_resource_service_spec.rb b/spec/services/fetch_remote_resource_service_spec.rb
@@ -1,53 +0,0 @@
-# frozen_string_literal: true
-
-require 'rails_helper'
-
-describe FetchRemoteResourceService do
- subject { described_class.new }
-
- describe '#call' do
- it 'returns nil when there is no atom url' do
- url = 'http://example.com/missing-atom'
- service = double
- allow(FetchAtomService).to receive(:new).and_return service
- allow(service).to receive(:call).with(url).and_return(nil)
-
- result = subject.call(url)
- expect(result).to be_nil
- end
-
- it 'fetches remote accounts for feed types' do
- url = 'http://example.com/atom-feed'
- service = double
- allow(FetchAtomService).to receive(:new).and_return service
- feed_url = 'http://feed-url'
- feed_content = '<feed>contents</feed>'
- allow(service).to receive(:call).with(url).and_return([feed_url, { prefetched_body: feed_content }])
-
- account_service = double
- allow(FetchRemoteAccountService).to receive(:new).and_return(account_service)
- allow(account_service).to receive(:call)
-
- _result = subject.call(url)
-
- expect(account_service).to have_received(:call).with(feed_url, feed_content, nil)
- end
-
- it 'fetches remote statuses for entry types' do
- url = 'http://example.com/atom-entry'
- service = double
- allow(FetchAtomService).to receive(:new).and_return service
- feed_url = 'http://feed-url'
- feed_content = '<entry>contents</entry>'
- allow(service).to receive(:call).with(url).and_return([feed_url, { prefetched_body: feed_content }])
-
- account_service = double
- allow(FetchRemoteStatusService).to receive(:new).and_return(account_service)
- allow(account_service).to receive(:call)
-
- _result = subject.call(url)
-
- expect(account_service).to have_received(:call).with(feed_url, feed_content, nil)
- end
- end
-end
diff --git a/spec/services/resolve_url_service_spec.rb b/spec/services/resolve_url_service_spec.rb
@@ -0,0 +1,53 @@
+# frozen_string_literal: true
+
+require 'rails_helper'
+
+describe ResolveURLService do
+ subject { described_class.new }
+
+ describe '#call' do
+ it 'returns nil when there is no atom url' do
+ url = 'http://example.com/missing-atom'
+ service = double
+ allow(FetchAtomService).to receive(:new).and_return service
+ allow(service).to receive(:call).with(url).and_return(nil)
+
+ result = subject.call(url)
+ expect(result).to be_nil
+ end
+
+ it 'fetches remote accounts for feed types' do
+ url = 'http://example.com/atom-feed'
+ service = double
+ allow(FetchAtomService).to receive(:new).and_return service
+ feed_url = 'http://feed-url'
+ feed_content = '<feed>contents</feed>'
+ allow(service).to receive(:call).with(url).and_return([feed_url, { prefetched_body: feed_content }])
+
+ account_service = double
+ allow(FetchRemoteAccountService).to receive(:new).and_return(account_service)
+ allow(account_service).to receive(:call)
+
+ _result = subject.call(url)
+
+ expect(account_service).to have_received(:call).with(feed_url, feed_content, nil)
+ end
+
+ it 'fetches remote statuses for entry types' do
+ url = 'http://example.com/atom-entry'
+ service = double
+ allow(FetchAtomService).to receive(:new).and_return service
+ feed_url = 'http://feed-url'
+ feed_content = '<entry>contents</entry>'
+ allow(service).to receive(:call).with(url).and_return([feed_url, { prefetched_body: feed_content }])
+
+ account_service = double
+ allow(FetchRemoteStatusService).to receive(:new).and_return(account_service)
+ allow(account_service).to receive(:call)
+
+ _result = subject.call(url)
+
+ expect(account_service).to have_received(:call).with(feed_url, feed_content, nil)
+ end
+ end
+end
diff --git a/spec/services/search_service_spec.rb b/spec/services/search_service_spec.rb
@@ -26,7 +26,7 @@ describe SearchService do
context 'that does not find anything' do
it 'returns the empty results' do
service = double(call: nil)
- allow(FetchRemoteResourceService).to receive(:new).and_return(service)
+ allow(ResolveURLService).to receive(:new).and_return(service)
results = subject.call(@query, 10)
expect(service).to have_received(:call).with(@query)
@@ -38,7 +38,7 @@ describe SearchService do
it 'includes the account in the results' do
account = Account.new
service = double(call: account)
- allow(FetchRemoteResourceService).to receive(:new).and_return(service)
+ allow(ResolveURLService).to receive(:new).and_return(service)
results = subject.call(@query, 10)
expect(service).to have_received(:call).with(@query)
@@ -50,7 +50,7 @@ describe SearchService do
it 'includes the status in the results' do
status = Status.new
service = double(call: status)
- allow(FetchRemoteResourceService).to receive(:new).and_return(service)
+ allow(ResolveURLService).to receive(:new).and_return(service)
results = subject.call(@query, 10)
expect(service).to have_received(:call).with(@query)