Commit 237ad20f7471eef89997898542d2cada37ff3b76
1 parent
e53ce3e5
Exists in
master
and in
1 other branch
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 | namespace :test_api do | 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 | desc "Updates cached values for losses and wins for choices." | 39 | desc "Updates cached values for losses and wins for choices." |
4 | task :update_cached_losses_wins => :environment do | 40 | task :update_cached_losses_wins => :environment do |
5 | Question.all.each do |question| | 41 | Question.all.each do |question| |