2017-03-22 12:32:27 +11:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
class FetchRemoteResourceService < BaseService
|
2017-05-06 01:26:04 +10:00
|
|
|
attr_reader :url
|
2017-03-22 12:32:27 +11:00
|
|
|
|
2017-05-06 01:26:04 +10:00
|
|
|
def call(url)
|
|
|
|
@url = url
|
2017-06-07 00:44:48 +10:00
|
|
|
process_url unless fetched_atom_feed.nil?
|
2017-05-06 01:26:04 +10:00
|
|
|
end
|
2017-03-22 12:32:27 +11:00
|
|
|
|
2017-05-06 01:26:04 +10:00
|
|
|
private
|
2017-03-22 12:32:27 +11:00
|
|
|
|
2017-05-06 01:26:04 +10:00
|
|
|
def process_url
|
|
|
|
case xml_root
|
|
|
|
when 'feed'
|
2017-03-23 03:36:34 +11:00
|
|
|
FetchRemoteAccountService.new.call(atom_url, body)
|
2017-05-06 01:26:04 +10:00
|
|
|
when 'entry'
|
2017-03-23 03:36:34 +11:00
|
|
|
FetchRemoteStatusService.new.call(atom_url, body)
|
2017-03-22 12:32:27 +11:00
|
|
|
end
|
|
|
|
end
|
2017-05-06 01:26:04 +10:00
|
|
|
|
|
|
|
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.last
|
|
|
|
end
|
|
|
|
|
|
|
|
def xml_root
|
|
|
|
xml_data.root.name
|
|
|
|
end
|
|
|
|
|
|
|
|
def xml_data
|
|
|
|
@_xml_data ||= Nokogiri::XML(body, nil, 'utf-8')
|
|
|
|
end
|
2017-03-22 12:32:27 +11:00
|
|
|
end
|