You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
698 B
42 lines
698 B
# frozen_string_literal: true
|
|
|
|
class FetchRemoteResourceService < BaseService
|
|
attr_reader :url
|
|
|
|
def call(url)
|
|
@url = url
|
|
process_url unless fetched_atom_feed.nil?
|
|
end
|
|
|
|
private
|
|
|
|
def process_url
|
|
case xml_root
|
|
when 'feed'
|
|
FetchRemoteAccountService.new.call(atom_url, body)
|
|
when 'entry'
|
|
FetchRemoteStatusService.new.call(atom_url, body)
|
|
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.last
|
|
end
|
|
|
|
def xml_root
|
|
xml_data.root.name
|
|
end
|
|
|
|
def xml_data
|
|
@_xml_data ||= Nokogiri::XML(body, nil, 'utf-8')
|
|
end
|
|
end
|