discourse/lib/feed_item_accessor.rb
Bianca Nenciu a0c040060a
FIX: Select best link from Atom feed (#15663)
Some Atom feeds can contain more than one link and it used to return
only the first link.
2022-01-21 17:54:18 +02:00

33 lines
771 B
Ruby

# frozen_string_literal: true
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
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
try_attribute_or_self(element(:link), :href)
end
private
def element(element_name)
rss_item.respond_to?(element_name) ? rss_item.public_send(element_name) : nil
end
def try_attribute_or_self(element, attribute_name)
element.respond_to?(attribute_name) ? element.public_send(attribute_name) : element
end
end