Commit 237ad20f7471eef89997898542d2cada37ff3b76

Authored by Luke Baker
1 parent e53ce3e5

add task to invalidate orphaned votes

Showing 1 changed file with 36 additions and 0 deletions   Show diff stats
lib/tasks/test_api.rake
1 1 namespace :test_api do
2 2  
  3 + desc "Searches questions for orphaned votes (votes with no appearance) and marks them as invalid"
  4 + task :invalidate_orphaned_votes => :environment do
  5 + question_ids = ENV["question_ids"].split(/[\s,]+/)
  6 + question_ids.each do |question_id|
  7 + question = Question.find(question_id)
  8 +
  9 + orphaned_votes = Vote.find(:all,
  10 + :select => "votes.id",
  11 + :joins => "LEFT JOIN appearances ON (votes.id = appearances.answerable_id AND answerable_type <> 'Skip')",
  12 + :conditions => ["answerable_id IS NULL AND votes.valid_record = 1 AND votes.question_id = ?", question.id])
  13 + puts "Question ##{question.id} has #{orphaned_votes.count} orphaned votes"
  14 + orphaned_votes.each do |orphaned_vote_id|
  15 + orphaned_vote = Vote.find(orphaned_vote_id.id)
  16 +
  17 + # attempt to find sibling vote
  18 + # sibling vote is one that is valid has the same voter and prompt,
  19 + # is associated with an appearance, and created within 10 seconds
  20 + sibling_vote = nil
  21 + votes = Vote.find(:all, :conditions => {:voter_id => orphaned_vote.voter_id, :prompt_id => orphaned_vote.prompt_id})
  22 + votes.each do |vote|
  23 + next if vote.id == orphaned_vote.id
  24 + next if vote.created_at > orphaned_vote.created_at + 5.seconds
  25 + next if vote.created_at < orphaned_vote.created_at - 5.seconds
  26 + next if vote.appearance == nil
  27 + sibling_vote = vote
  28 + break
  29 + end
  30 + info = "Appearance XXXX already answered"
  31 + if sibling_vote
  32 + info = "Appearance #{sibling_vote.appearance.id} already answered"
  33 + end
  34 + orphaned_vote.update_attributes!(:valid_record => false, :validity_information => info)
  35 + end
  36 + end
  37 + end
  38 +
3 39 desc "Updates cached values for losses and wins for choices."
4 40 task :update_cached_losses_wins => :environment do
5 41 Question.all.each do |question|
... ...