class Feedigest::FeedFetcher
Constants
- Feed
- USER_AGENT
Attributes
feed_urls[R]
filter_cmd[R]
Public Class Methods
new(feed_urls, filter_cmd = nil)
click to toggle source
# File lib/feedigest/feed_fetcher.rb, line 12 def initialize(feed_urls, filter_cmd = nil) @feed_urls = feed_urls @filter_cmd = filter_cmd end
Public Instance Methods
feeds()
click to toggle source
# File lib/feedigest/feed_fetcher.rb, line 17 def feeds @feeds ||= all_feeds.select { |f| process_feed?(f) } end
Private Instance Methods
all_feeds()
click to toggle source
# File lib/feedigest/feed_fetcher.rb, line 27 def all_feeds feed_urls.map { |url| feed_from_url(url) } end
feed_entries(feed)
click to toggle source
# File lib/feedigest/feed_fetcher.rb, line 57 def feed_entries(feed) feed.entries.select { |e| process_entry?(e) }.sort_by(&:published).reverse end
feed_from_url(url)
click to toggle source
# File lib/feedigest/feed_fetcher.rb, line 31 def feed_from_url(url) feed, error = fetch_and_parse_feed(url) Feed.new( url, feed&.title, error ? [] : feed_entries(feed), error ) end
fetch_and_parse_feed(url)
click to toggle source
# File lib/feedigest/feed_fetcher.rb, line 51 def fetch_and_parse_feed(url) [Feedjira::Feed.parse(fetch_feed(url)), nil] rescue StandardError => e [nil, e.message] end
fetch_feed(url)
click to toggle source
# File lib/feedigest/feed_fetcher.rb, line 41 def fetch_feed(url) feed_fd = OpenURI.open_uri(url, 'User-Agent' => USER_AGENT) if filter_cmd filter_feed(feed_fd) else feed_fd.read end end
filter_feed(feed_fd)
click to toggle source
# File lib/feedigest/feed_fetcher.rb, line 69 def filter_feed(feed_fd) IO.popen(filter_cmd, 'r+') do |io| IO.copy_stream(feed_fd, io) io.close_write io.read end end
process_entry?(entry)
click to toggle source
# File lib/feedigest/feed_fetcher.rb, line 61 def process_entry?(entry) !entry.published.nil? && entry.published >= window_start end
process_feed?(feed)
click to toggle source
# File lib/feedigest/feed_fetcher.rb, line 23 def process_feed?(feed) feed[:error] || feed[:entries].any? end
window_start()
click to toggle source
# File lib/feedigest/feed_fetcher.rb, line 65 def window_start @window_start ||= Time.now - Feedigest.config.fetch(:entry_window) * 3600 end