class TrumpcareTracker::Reporters

Rake tasks to generate audit reports in CSV format

require 'trumpcare_tracker/reporters' TrumpcareTracker::Reporters.new

$ rake tracker:export:senate_democrats $ rake tracker:export:house_democrats $ rake tracker:export:senate_republicans $ rake tracker:export:house_republicans $ rake tracker:export:all

$ rake tracker:homepage_scraper:senate_democrats $ rake tracker:homepage_scraper:house_democrats $ rake tracker:homepage_scraper:senate_republicans $ rake tracker:homepage_scraper:house_republicans $ rake tracker:homepage_scraper:all

Public Class Methods

new() click to toggle source
# File lib/trumpcare_tracker/reporters.rb, line 25
def initialize
  export_task
  homepage_scraper_task
end

Public Instance Methods

all_tasks() click to toggle source
# File lib/trumpcare_tracker/reporters.rb, line 119
def all_tasks
  desc 'Run for each caucus'
  task(all: [:senate_democrats, :house_democrats, :senate_republicans, :house_republicans])
end
export(caucus) click to toggle source
# File lib/trumpcare_tracker/reporters.rb, line 50
def export(caucus)
  csv_tweet_report = CSV.generate do |csv|
    csv << %w[
      senator
      official_user_name
      alt_user_name
      tweets_in_last_seven_days
      trumpcare_tweets
      tct_percentage
      russia_tweets
      rt_percentage
      tct_to_rt_ratio
      trumpcare_tweet_urls
      russia_tweet_urls
    ]
    audit_tweets(send(caucus)) { |tracker| csv << tracker.to_h.values }
  end

  File.open("trumpcare_tweet_report_#{caucus}.csv", 'w') do |file|
    file.write csv_tweet_report
  end
end
export_task() click to toggle source
# File lib/trumpcare_tracker/reporters.rb, line 30
def export_task
  namespace(:tracker) do
    namespace(:export) do
      desc 'Output a report of Senate Democrats Trumpcare tweets'
      task(:senate_democrats) { export(:senate_democrats) }

      desc 'Output a report of House Democrats Trumpcare tweets'
      task(:house_democrats) { export(:house_democrats) }

      desc 'Output a report of Senate Republicans Trumpcare tweets'
      task(:senate_republicans) { export(:senate_republicans) }

      desc 'Output a report of House Republicans Trumpcare tweets'
      task(:house_republicans) { export(:house_republicans) }

      all_tasks
    end
  end
end
homepage_scraper(caucus) click to toggle source
# File lib/trumpcare_tracker/reporters.rb, line 96
def homepage_scraper(caucus)
  csv_homepage_report = CSV.generate do |csv|
    csv << %w[senator url trumpcare_mentions russia_mentions trumpcare_to_russia_ratio]
    send(caucus).each do |rep|
      doc = Nokogiri::HTML(open(rep.url))
      trumpcare_mentions_count = mentions_mapper(doc, TrumpcareTracker.trumpcare_keyword_regex).count
      russia_mentions_count = mentions_mapper(doc, TrumpcareTracker.russia_keyword_regex).count
      csv << [
        rep.official_full,
        rep.url,
        trumpcare_mentions_count,
        russia_mentions_count,
        TrumpcareTracker.ratio(trumpcare_mentions_count, russia_mentions_count)
      ]
      puts "Scraped #{rep.official_full}'s homepage"
    end
  end

  File.open("trumpcare_homepage_report_#{caucus}.csv", 'w') do |file|
    file.write csv_homepage_report
  end
end
homepage_scraper_task() click to toggle source
# File lib/trumpcare_tracker/reporters.rb, line 75
def homepage_scraper_task
  namespace(:tracker) do
    desc 'Search Senators\' official homepage for TrumpCare and Russia Mentions'
    namespace(:homepage_scraper) do
      desc 'Search Senate Democrat\'s homepages'
      task(:senate_democrats) { homepage_scraper(:senate_democrats) }

      desc 'Search House Democrat\'s homepages'
      task(:house_democrats) { homepage_scraper(:house_democrats) }

      desc 'Search Senate Republican\'s homepages'
      task(:senate_republicans) { homepage_scraper(:senate_republicans) }

      desc 'Search House Republican\'s homepages'
      task(:house_republicans) { homepage_scraper(:house_republicans) }

      all_tasks
    end
  end
end