memoize functions in measure.rb

pull/1/head
rebuilt 4 years ago
parent 8eda232d71
commit ee80867609

@ -7,7 +7,11 @@ class Measure < ActiveRecord::Base
has_many :survey_item_responses, through: :survey_items has_many :survey_item_responses, through: :survey_items
def none_meet_threshold?(school:, academic_year:) def none_meet_threshold?(school:, academic_year:)
!sufficient_survey_responses?(school:, academic_year:) @none_meet_threshold ||= Hash.new do |memo, (school, academic_year)|
memo[[school, academic_year]] = !sufficient_survey_responses?(school:, academic_year:)
end
@none_meet_threshold[[school, academic_year]]
end end
def teacher_survey_items def teacher_survey_items
@ -27,15 +31,15 @@ class Measure < ActiveRecord::Base
end end
def includes_teacher_survey_items? def includes_teacher_survey_items?
teacher_survey_items.any? @includes_teacher_survey_items ||= teacher_survey_items.any?
end end
def includes_student_survey_items? def includes_student_survey_items?
student_survey_items.any? @includes_student_survey_items ||= student_survey_items.any?
end end
def includes_admin_data_items? def includes_admin_data_items?
admin_data_items.any? @includes_admin_data_items ||= admin_data_items.any?
end end
def sources def sources
@ -78,7 +82,8 @@ class Measure < ActiveRecord::Base
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:) meets_admin_data_threshold = all_admin_data_collected?(school:, academic_year:)
average = collect_survey_scale_average(student_scales, school, academic_year) if meets_student_threshold average = collect_survey_scale_average(student_scales, school, academic_year) if meets_student_threshold
memo[[school, academic_year]] = Score.new(average, meets_teacher_threshold, meets_student_threshold, meets_admin_data_threshold) memo[[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]]
@ -90,7 +95,8 @@ class Measure < ActiveRecord::Base
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:) meets_admin_data_threshold = all_admin_data_collected?(school:, academic_year:)
average = collect_survey_scale_average(teacher_scales, school, academic_year) if meets_teacher_threshold average = collect_survey_scale_average(teacher_scales, school, academic_year) if meets_teacher_threshold
memo[[school, academic_year]] = Score.new(average, meets_teacher_threshold, meets_student_threshold, meets_admin_data_threshold) memo[[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]]
@ -140,7 +146,10 @@ class Measure < ActiveRecord::Base
end end
def sufficient_survey_responses?(school:, academic_year:) def sufficient_survey_responses?(school:, academic_year:)
sufficient_student_data?(school:, academic_year:) || sufficient_teacher_data?(school:, academic_year:) @sufficient_survey_responses ||= sufficient_student_data?(school:,
academic_year:) || sufficient_teacher_data?(
school:, academic_year:
)
end end
private private

Loading…
Cancel
Save