2017-03-21 18:32:27 -07:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
class FetchRemoteResourceService < BaseService
|
2017-05-05 08:26:04 -07:00
|
|
|
attr_reader :url
|
2017-03-21 18:32:27 -07:00
|
|
|
|
2017-05-05 08:26:04 -07:00
|
|
|
def call(url)
|
|
|
|
@url = url
|
|
|
|
process_url unless atom_url.nil?
|
|
|
|
end
|
2017-03-21 18:32:27 -07:00
|
|
|
|
2017-05-05 08:26:04 -07:00
|
|
|
private
|
2017-03-21 18:32:27 -07:00
|
|
|
|
2017-05-05 08:26:04 -07:00
|
|
|
def process_url
|
|
|
|
case xml_root
|
|
|
|
when 'feed'
|
2017-03-22 09:36:34 -07:00
|
|
|
FetchRemoteAccountService.new.call(atom_url, body)
|
2017-05-05 08:26:04 -07:00
|
|
|
when 'entry'
|
2017-03-22 09:36:34 -07:00
|
|
|
FetchRemoteStatusService.new.call(atom_url, body)
|
2017-03-21 18:32:27 -07:00
|
|
|
end
|
|
|
|
end
|
2017-05-05 08:26:04 -07: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-21 18:32:27 -07:00
|
|
|
end
|