From 71a78a2dfa9cb02bac400ee5ef0303b4811df548 Mon Sep 17 00:00:00 2001 From: Maximilian Grundke Date: Tue, 10 Jul 2018 12:43:13 +0200 Subject: [PATCH] Fix average working time for nil values and empty filtered collections --- lib/tasks/detect_exercise_anomalies.rake | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/lib/tasks/detect_exercise_anomalies.rake b/lib/tasks/detect_exercise_anomalies.rake index 3436b87a..9ea6f706 100644 --- a/lib/tasks/detect_exercise_anomalies.rake +++ b/lib/tasks/detect_exercise_anomalies.rake @@ -61,16 +61,25 @@ namespace :detect_exercise_anomalies do .having('count(exercises_with_submissions.id) > ?', number_of_exercises) end - def find_anomalies(collection) + def collect_working_times(collection) working_times = {} collection.exercises.each do |exercise| puts "\t\t> #{exercise.title}" working_times[exercise.id] = get_average_working_time(exercise) end - average = working_times.values.reduce(:+) / working_times.size - working_times.select do |exercise_id, working_time| - working_time > average * MAX_TIME_FACTOR or working_time < average * MIN_TIME_FACTOR + working_times + end + + def find_anomalies(collection) + working_times = collect_working_times(collection) + values = working_times.values.reject {|value| value.nil?} + if working_times.size > 0 + average = values.reduce(:+) / working_times.size + return working_times.select do |_, working_time| + working_time > average * MAX_TIME_FACTOR or working_time < average * MIN_TIME_FACTOR + end end + {} end def get_average_working_time(exercise)