app/jobs/fetch_tv_shows_news_job.rb

Summary

Maintainability
A
1 hr
Test Coverage
A
100%
class FetchTvShowsNewsJob < ActiveJob::Base
  queue_as :reddit

  def perform
    ActiveRecord::Base.connection_pool.with_connection do
      client = Faraday.new(:url => "https://www.reddit.com") do |builder|
        builder.request :json
        builder.response :json
        builder.adapter Faraday.default_adapter
      end

      client.get("/r/television/top.json").body["data"]["children"].each do |item|
        listing = item["data"]
        next if listing["is_self"]
        NewsItem.find_or_create_by(title: listing["title"]) do |news_item|
          news_item.attributes = {url: listing["url"], score: listing["ups"], category: "tv_shows" }
        end
      end

      TvShow.watching.or(TvShow.on_waitlist).find_each do |tv_show|
        tv_show.fetch_news
        sleep rand(10) unless Rails.env.test?
      end
    end
  end
end