class Papercall::RestFetcher

Fetches submissions from Papercall REST API Params:

Constants

SUBMISSIONS_URL

Public Class Methods

new() click to toggle source
# File lib/papercall/rest_fetcher.rb, line 15
def initialize()
  @output = Papercall.configuration.output
  api_key = Papercall.configuration.API_KEY
  raise ArgumentError, 'Missing API_KEY for access to Papercall. Please refer to documentation for instructions on setting this value.' unless api_key
  @auth_hash = { Authorization: api_key }
  @submitted = []
  @accepted = []
  @rejected = []
  @waitlist = []
  @declined = []
end

Public Instance Methods

fetch(*states) click to toggle source
# File lib/papercall/rest_fetcher.rb, line 43
def fetch(*states)
  states = [%i[submitted accepted rejected waitlist declined]] if states == [[:all]]
  states.flatten.each do |state|
    next unless state
    start_time = Time.now
    print "Fetching #{state} submissions from PaperCall API..." if @output
    submissions = papercall(submission_url(state.to_s))
    instance_variable_set("@#{state}_raw", submissions)
    instance_variable_set("@#{state}", submissions.map {|s| Submission.new(s)})
    puts "finished in #{Time.now - start_time} seconds." if @output
  end
  fetch_ratings
  fetch_feedback
end
fetch_feedback() click to toggle source
# File lib/papercall/rest_fetcher.rb, line 73
def fetch_feedback
  start_time = Time.now
  print 'Fetching feedback for all submissions from Papercall API...' if @output
  Parallel.each(analysis, in_threads:  128) do |submission|
    if submission.feedback.empty?
      feedback_url = "#{SUBMISSIONS_URL}/#{submission.id}/feedback"
      submission.feedback = papercall(feedback_url).map {|f| Feedback.new(f)}
    end
    #submission.feedback = [] unless submission.feedback
  end
  puts "finished in #{Time.now - start_time} seconds." if @output
end
fetch_ratings() click to toggle source
# File lib/papercall/rest_fetcher.rb, line 58
def fetch_ratings
  start_time = Time.now
  print 'Fetching ratings for all submissions from Papercall API...' if @output

  Parallel.each(analysis, in_threads: 128) do |submission|
    if submission.ratings.empty?
      ratings_url = "#{SUBMISSIONS_URL}/#{submission.id}/ratings"
      ratings = papercall(ratings_url).map {|r| Rating.new(r)}
      submission.ratings = ratings
    end
    #submission.ratings = [] unless submission.ratings
  end
  puts "finished in #{Time.now - start_time} seconds." if @output
end
papercall(papercall_url) click to toggle source
# File lib/papercall/rest_fetcher.rb, line 31
def papercall(papercall_url)
  raw_results =
    RestClient::Request.execute(method: :get,
                                url: papercall_url,
                                headers: @auth_hash) # :timeout => 120
  if raw_results
    JSON.parse(raw_results).map {|r| r.with_indifferent_access}
  else
    []
  end
end
submission_url(state, per_page: 150) click to toggle source
# File lib/papercall/rest_fetcher.rb, line 27
def submission_url(state, per_page: 150)
  "#{SUBMISSIONS_URL}?state=#{state}&per_page=#{per_page}"
end