prune_db.rake
4.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
namespace :prune_db do
task :all => [:invalidate_votes_with_bad_response_times]
task(:invalidate_votes_with_bad_response_times => :environment) do
badvotes = []
#might want to optimize later to not start from the beginning each time
Vote.find_each(:batch_size => 1000, :include => :appearance) do |v|
server_response_time = v.created_at.to_f - v.appearance.created_at.to_f
if v.time_viewed && v.time_viewed/1000 > server_response_time
badvotes << v
puts "."
end
end
puts "\n"
if badvotes.any?
puts "You are about to change #{badvotes.size} votes. Are you sure you want to proceed? (y/N)"
choice = $stdin.gets
unless choice.chomp.downcase == "y"
return
end
badvotes.each do |v|
v.time_viewed = nil
v.missing_response_time_exp = "invalid"
v.save!
end
else
puts "Could not find any bad votes. Yay."
end
end
task(:associate_skips_with_appearances => :environment) do
skips_to_fix = Skip.find(:all, :conditions => {:appearance_id => nil})
skips_to_fix.each do |skip|
puts "Skip #{skip.id} : "
possible_appearances = skip.skipper.appearances.find(:all, :conditions => {:prompt_id => skip.prompt_id})
if possible_appearances.nil? || possible_appearances.empty?
puts " I couldn't find any matches!"
skip.delete
next
end
if possible_appearances.size > 1
puts " More than one possible appearance"
possible_appearances.delete_if{|a| a.answered?}
if possible_appearances.size > 1 || possible_appearances.size == 0
puts" And I couldn't narrow it down.... moving on"
skip.delete
next
end
end
possible_appearance = possible_appearances.first
if possible_appearance.answered?
puts " This appearance has been answered already! Moving on"
skip.delete
else
puts " MATCH"
skip.appearance_id = possible_appearance.id
skip.save!
end
end
end
task(:move_vote_and_skip_ids_to_appearance => :environment) do
#Vote.find_each do |v|
# @appearance = Appearance.find(v.appearance_id)
# @appearance.answerable = v
# @appearance.save
# if v.id % 1000 == 0
# puts v.id
# end
# end
Skip.find_each do |s|
if s.appearance_id
@appearance = Appearance.find(s.appearance_id)
if @appearance.answerable
puts "Appearance #{@appearance.id} has more than one skip!"
else
@appearance.answerable = s
@appearance.save
end
end
end
end
task(:remove_double_counted_votes_with_same_appearance => :environment) do
votes_with_no_appearance = []
Vote.find_each(:include => :appearance) do |v|
puts v.id if v.id % 1000 == 0
votes_with_no_appearance << v if v.appearance.nil?
end
skips_with_no_appearance = []
Skip.find_each(:include => :appearance) do |s|
puts s.id if s.id % 1000 == 0
skips_with_no_appearance << s if s.appearance.nil?
end
puts "#{votes_with_no_appearance.size} Votes"
puts "#{skips_with_no_appearance.size} Skips"
votes_with_no_appearance.each do |v|
v.valid_record = false
v.validity_information = "No associated appearance object"
v.save!
end
skips_with_no_appearance.each do |s|
s.valid_record = false
s.validity_information = "No associated appearance object"
s.save!
end
end
#call this by doing rake prune_db:populate_seed_ideas['blahblah',questionnum], where blahblah is the filename
task(:populate_seed_ideas, :args1, :args2, :needs => :environment) do | task, arguments|
filename = arguments[:args1]
question_num = arguments[:args2]
puts filename
puts question_num
q = Question.find(question_num)
creator_id = q.creator_id
File.open(filename, "r") do |infile|
while( data= infile.gets)
c = Choice.new(:creator_id => creator_id,
:question_id => q.id,
:active => true,
:data => data.chomp)
c.save
end
end
end
end