2019-05-03 06:17:27 +08:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2017-12-06 07:45:09 +08:00
|
|
|
class FeedItemAccessor
|
|
|
|
attr_accessor :rss_item
|
|
|
|
|
|
|
|
def initialize(rss_item)
|
|
|
|
@rss_item = rss_item
|
|
|
|
end
|
|
|
|
|
|
|
|
def element_content(element_name)
|
|
|
|
try_attribute_or_self(element(element_name), :content)
|
|
|
|
end
|
|
|
|
|
|
|
|
def link
|
2022-01-21 23:54:18 +08:00
|
|
|
if rss_item.respond_to?(:links)
|
|
|
|
link = rss_item.links&.find { |l| l.rel == "alternate" && l.type == "text/html" }
|
|
|
|
return link.href if link.respond_to?(:href)
|
|
|
|
end
|
|
|
|
|
2017-12-06 07:45:09 +08:00
|
|
|
try_attribute_or_self(element(:link), :href)
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def element(element_name)
|
2019-05-07 09:27:05 +08:00
|
|
|
rss_item.respond_to?(element_name) ? rss_item.public_send(element_name) : nil
|
2017-12-06 07:45:09 +08:00
|
|
|
end
|
|
|
|
|
|
|
|
def try_attribute_or_self(element, attribute_name)
|
2019-05-07 09:27:05 +08:00
|
|
|
element.respond_to?(attribute_name) ? element.public_send(attribute_name) : element
|
2017-12-06 07:45:09 +08:00
|
|
|
end
|
|
|
|
end
|