From fa3241da6553b4743510c6e8d8da977c5f58736c Mon Sep 17 00:00:00 2001 From: Alex Basson Date: Fri, 22 Oct 2021 16:39:14 -0400 Subject: [PATCH] Extract SurveyItemResponse.score_for_subcategory method from SubcategoryPresenter --- app/models/survey_item_response.rb | 13 ++++++++++--- app/presenters/subcategory_presenter.rb | 4 +--- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/app/models/survey_item_response.rb b/app/models/survey_item_response.rb index 1cd5e694..a6572203 100644 --- a/app/models/survey_item_response.rb +++ b/app/models/survey_item_response.rb @@ -6,10 +6,13 @@ class SurveyItemResponse < ActiveRecord::Base belongs_to :school belongs_to :survey_item - scope :for_measures, ->(measures) { joins(:survey_item).where('survey_items.measure_id': measures.map(&:id)) } scope :for_measure, ->(measure) { joins(:survey_item).where('survey_items.measure_id': measure.id) } - scope :teacher_responses_for_measure, ->(measure) { for_measure(measure).where("survey_items.survey_item_id LIKE 't-%'") } - scope :student_responses_for_measure, ->(measure) { for_measure(measure).where("survey_items.survey_item_id LIKE 's-%'") } + + def self.score_for_subcategory(subcategory:, school:, academic_year:) + SurveyItemResponse.for_measures(subcategory.measures) + .where(academic_year: academic_year, school: school) + .average(:likert_score) + end def self.score_for_measure(measure:, school:, academic_year:) return nil unless SurveyItemResponse.sufficient_data?(measure: measure, school: school, academic_year: academic_year) @@ -21,6 +24,10 @@ class SurveyItemResponse < ActiveRecord::Base private + scope :for_measures, ->(measures) { joins(:survey_item).where('survey_items.measure_id': measures.map(&:id)) } + scope :teacher_responses_for_measure, ->(measure) { for_measure(measure).where("survey_items.survey_item_id LIKE 't-%'") } + scope :student_responses_for_measure, ->(measure) { for_measure(measure).where("survey_items.survey_item_id LIKE 's-%'") } + def self.sufficient_data?(measure:, school:, academic_year:) meets_teacher_threshold = true meets_student_threshold = true diff --git a/app/presenters/subcategory_presenter.rb b/app/presenters/subcategory_presenter.rb index a124bfd0..d09e0225 100644 --- a/app/presenters/subcategory_presenter.rb +++ b/app/presenters/subcategory_presenter.rb @@ -22,9 +22,7 @@ class SubcategoryPresenter end def average_score - SurveyItemResponse.for_measures(measures) - .where(academic_year: @academic_year, school: @school) - .average(:likert_score) + @average_score ||= SurveyItemResponse.score_for_subcategory(subcategory: @subcategory, school: @school, academic_year: @academic_year) end def measure_presenters