Refactored score methods

pull/1/head
rebuilt 3 years ago
parent be715e117e
commit 01d4448fde

@ -80,7 +80,7 @@ class Measure < ActiveRecord::Base
end end
scores << collect_admin_scale_average(admin_data_items:, school:, academic_year:) if includes_admin_data_items? scores << collect_admin_scale_average(admin_data_items:, school:, academic_year:) if includes_admin_data_items?
average = scores.flatten.compact.remove_zeros.average average = scores.flatten.compact.remove_blanks.average
next Score.new(nil, false, false, false) if average.nan? next Score.new(nil, false, false, false) if average.nan?
@ -94,14 +94,11 @@ class Measure < ActiveRecord::Base
def student_score(school:, academic_year:) def student_score(school:, academic_year:)
@student_score ||= Hash.new do |memo, (school, academic_year)| @student_score ||= Hash.new do |memo, (school, academic_year)|
meets_student_threshold = sufficient_student_data?(school:, academic_year:) meets_student_threshold = sufficient_student_data?(school:, academic_year:)
meets_teacher_threshold = sufficient_teacher_data?(school:, academic_year:)
meets_admin_data_threshold = all_admin_data_collected?(school:, academic_year:)
if meets_student_threshold if meets_student_threshold
average = collect_survey_item_average(survey_items: student_survey_items_by_survey_type(school:, academic_year:), school:, average = collect_survey_item_average(survey_items: student_survey_items_by_survey_type(school:, academic_year:), school:,
academic_year:) academic_year:)
end end
memo[[school, academic_year]] = memo[[school, academic_year]] = scorify(average:, school:, academic_year:)
Score.new(average, meets_teacher_threshold, meets_student_threshold, meets_admin_data_threshold)
end end
@student_score[[school, academic_year]] @student_score[[school, academic_year]]
@ -109,15 +106,12 @@ class Measure < ActiveRecord::Base
def teacher_score(school:, academic_year:) def teacher_score(school:, academic_year:)
@teacher_score ||= Hash.new do |memo, (school, academic_year)| @teacher_score ||= Hash.new do |memo, (school, academic_year)|
meets_student_threshold = sufficient_student_data?(school:, academic_year:)
meets_teacher_threshold = sufficient_teacher_data?(school:, academic_year:) meets_teacher_threshold = sufficient_teacher_data?(school:, academic_year:)
meets_admin_data_threshold = all_admin_data_collected?(school:, academic_year:)
if meets_teacher_threshold if meets_teacher_threshold
average = collect_survey_item_average(survey_items: teacher_survey_items, school:, average = collect_survey_item_average(survey_items: teacher_survey_items, school:,
academic_year:) academic_year:)
end end
memo[[school, academic_year]] = memo[[school, academic_year]] = scorify(average:, school:, academic_year:)
Score.new(average, meets_teacher_threshold, meets_student_threshold, meets_admin_data_threshold)
end end
@teacher_score[[school, academic_year]] @teacher_score[[school, academic_year]]
@ -166,11 +160,18 @@ class Measure < ActiveRecord::Base
private private
def scorify(average:, school:, academic_year:)
meets_student_threshold = sufficient_student_data?(school:, academic_year:)
meets_teacher_threshold = sufficient_teacher_data?(school:, academic_year:)
meets_admin_data_threshold = all_admin_data_collected?(school:, academic_year:)
Score.new(average, meets_teacher_threshold, meets_student_threshold, meets_admin_data_threshold)
end
def collect_survey_item_average(survey_items:, school:, academic_year:) def collect_survey_item_average(survey_items:, school:, academic_year:)
@collect_survey_item_average ||= Hash.new do |memo, (survey_items, school, academic_year)| @collect_survey_item_average ||= Hash.new do |memo, (survey_items, school, academic_year)|
averages = survey_items.map do |survey_item| averages = survey_items.map do |survey_item|
grouped_responses(school:, academic_year:)[survey_item] || 0 grouped_responses(school:, academic_year:)[survey_item] || 0
end.remove_zeros end.remove_blanks
memo[[survey_items, school, academic_year]] = averages.any? ? averages.average : 0 memo[[survey_items, school, academic_year]] = averages.any? ? averages.average : 0
end end
@collect_survey_item_average[[survey_items, school, academic_year]] @collect_survey_item_average[[survey_items, school, academic_year]]

Loading…
Cancel
Save