Commit 47c8d62ee7348358406c81b67ddf07f5ffcbd60b
1 parent
237ad20f
Exists in
master
and in
1 other branch
re-arrange rake tasks
Showing
2 changed files
with
77 additions
and
76 deletions
Show diff stats
lib/tasks/prune_db.rake
... | ... | @@ -140,4 +140,80 @@ namespace :prune_db do |
140 | 140 | |
141 | 141 | end |
142 | 142 | |
143 | + desc "Searches questions for orphaned votes (votes with no appearance) and marks them as invalid" | |
144 | + task :invalidate_orphaned_votes => :environment do | |
145 | + question_ids = ENV["question_ids"].split(/[\s,]+/) | |
146 | + question_ids.each do |question_id| | |
147 | + question = Question.find(question_id) | |
148 | + | |
149 | + orphaned_votes = Vote.find(:all, | |
150 | + :select => "votes.id", | |
151 | + :joins => "LEFT JOIN appearances ON (votes.id = appearances.answerable_id AND answerable_type <> 'Skip')", | |
152 | + :conditions => ["answerable_id IS NULL AND votes.valid_record = 1 AND votes.question_id = ?", question.id]) | |
153 | + puts "Question ##{question.id} has #{orphaned_votes.count} orphaned votes" | |
154 | + orphaned_votes.each do |orphaned_vote_id| | |
155 | + orphaned_vote = Vote.find(orphaned_vote_id.id) | |
156 | + | |
157 | + # attempt to find sibling vote | |
158 | + # sibling vote is one that is valid has the same voter and prompt, | |
159 | + # is associated with an appearance, and created within 10 seconds | |
160 | + sibling_vote = nil | |
161 | + votes = Vote.find(:all, :conditions => {:voter_id => orphaned_vote.voter_id, :prompt_id => orphaned_vote.prompt_id}) | |
162 | + votes.each do |vote| | |
163 | + next if vote.id == orphaned_vote.id | |
164 | + next if vote.created_at > orphaned_vote.created_at + 5.seconds | |
165 | + next if vote.created_at < orphaned_vote.created_at - 5.seconds | |
166 | + next if vote.appearance == nil | |
167 | + sibling_vote = vote | |
168 | + break | |
169 | + end | |
170 | + info = "Appearance XXXX already answered" | |
171 | + if sibling_vote | |
172 | + info = "Appearance #{sibling_vote.appearance.id} already answered" | |
173 | + end | |
174 | + orphaned_vote.update_attributes!(:valid_record => false, :validity_information => info) | |
175 | + end | |
176 | + end | |
177 | + end | |
178 | + | |
179 | + desc "Updates cached values for losses and wins for choices." | |
180 | + task :update_cached_losses_wins => :environment do | |
181 | + Question.all.each do |question| | |
182 | + question.choices.each do |choice| | |
183 | + choice.reload | |
184 | + true_losses = question.votes.count(:conditions => {:loser_choice_id => choice.id}) | |
185 | + true_wins = choice.votes.count | |
186 | + Choice.update_counters choice.id, | |
187 | + :losses => (true_losses - choice.losses), | |
188 | + :wins => (true_wins - choice.wins) | |
189 | + choice.reload | |
190 | + choice.score = choice.compute_score | |
191 | + choice.save(false) | |
192 | + end | |
193 | + end | |
194 | + end | |
195 | + | |
196 | + desc "Update cached values for prompts on left and right for choices." | |
197 | + task :update_cached_prompts_on_left_right => :environment do | |
198 | + Question.all.each do |question| | |
199 | + question.choices.each do |choice| | |
200 | + choice.reload | |
201 | + choice.prompts_on_the_left | |
202 | + choice.prompts_on_the_right | |
203 | + Choice.update_counters choice.id, | |
204 | + :prompts_on_the_left_count => choice.prompts_on_the_left.count, | |
205 | + :prompts_on_the_right_count => choice.prompts_on_the_right.count | |
206 | + end | |
207 | + end | |
208 | + end | |
209 | + | |
210 | + desc "Recomputes scores for all choices." | |
211 | + task :recompute_scores => :environment do | |
212 | + Choice.find_each do |choice| | |
213 | + choice.reload | |
214 | + choice.score = choice.compute_score | |
215 | + choice.save(false) | |
216 | + end | |
217 | + end | |
218 | + | |
143 | 219 | end | ... | ... |
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 | - | |
39 | - desc "Updates cached values for losses and wins for choices." | |
40 | - task :update_cached_losses_wins => :environment do | |
41 | - Question.all.each do |question| | |
42 | - question.choices.each do |choice| | |
43 | - choice.reload | |
44 | - true_losses = question.votes.count(:conditions => {:loser_choice_id => choice.id}) | |
45 | - true_wins = choice.votes.count | |
46 | - Choice.update_counters choice.id, | |
47 | - :losses => (true_losses - choice.losses), | |
48 | - :wins => (true_wins - choice.wins) | |
49 | - choice.reload | |
50 | - choice.score = choice.compute_score | |
51 | - choice.save(false) | |
52 | - end | |
53 | - end | |
54 | - end | |
55 | - | |
56 | - desc "Update cached values for prompts on left and right for choices." | |
57 | - task :update_cahced_prompts_on_left_right => :environment do | |
58 | - Question.all.each do |question| | |
59 | - question.choices.each do |choice| | |
60 | - choice.reload | |
61 | - choice.prompts_on_the_left | |
62 | - choice.prompts_on_the_right | |
63 | - Choice.update_counters choice.id, | |
64 | - :prompts_on_the_left_count => choice.prompts_on_the_left.count, | |
65 | - :prompts_on_the_right_count => choice.prompts_on_the_right.count | |
66 | - end | |
67 | - end | |
68 | - end | |
69 | - | |
70 | - desc "Recomputes scores for all choices." | |
71 | - task :recompute_scores => :environment do | |
72 | - Choice.find_each do |choice| | |
73 | - choice.reload | |
74 | - choice.score = choice.compute_score | |
75 | - choice.save(false) | |
76 | - end | |
77 | - end | |
78 | - | |
3 | + desc "Run all API tests" | |
79 | 4 | task :all => [:question_vote_consistency,:generate_density_information] |
80 | 5 | |
81 | 6 | desc "Ensure that all choices have 0 <= score <= 100" | ... | ... |