From 8e5e2a030a677d08acdc03da715198be6ac1fd42 Mon Sep 17 00:00:00 2001 From: rebuilt Date: Tue, 15 Apr 2025 10:05:49 -0700 Subject: [PATCH] feat: Add language filter for parent analysis --- app/services/cleaner.rb | 2 +- app/services/demographic_loader.rb | 2 ++ app/services/survey_item_values.rb | 2 +- app/services/survey_responses_data_loader.rb | 3 ++- db/migrate/20250408212201_add_housing_to_parent.rb | 7 +++++++ db/migrate/20250411213850_create_languages.rb | 10 ++++++++++ spec/models/language_spec.rb | 5 +++++ spec/services/survey_responses_data_loader_spec.rb | 7 +++++++ 8 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 db/migrate/20250408212201_add_housing_to_parent.rb create mode 100644 db/migrate/20250411213850_create_languages.rb create mode 100644 spec/models/language_spec.rb diff --git a/app/services/cleaner.rb b/app/services/cleaner.rb index 8ebe2efa..6133da74 100644 --- a/app/services/cleaner.rb +++ b/app/services/cleaner.rb @@ -79,7 +79,7 @@ class Cleaner headers = headers.to_set headers = headers.merge(Set.new(["Raw Income", "Income", "Raw ELL", "ELL", "Raw SpEd", "SpEd", "Progress Count", - "Race", "Gender"])).to_a + "Race", "Gender", "Raw Housing Status", "Housing Status", "Home Language"])).to_a filtered_headers = include_all_headers(headers:) filtered_headers = remove_unwanted_headers(headers: filtered_headers) log_headers = (filtered_headers + ["Valid Duration?", "Valid Progress?", "Valid Grade?", diff --git a/app/services/demographic_loader.rb b/app/services/demographic_loader.rb index 7ca47886..18148591 100644 --- a/app/services/demographic_loader.rb +++ b/app/services/demographic_loader.rb @@ -10,6 +10,8 @@ class DemographicLoader create_from_column(column: "Income", row:, model: Income) create_from_column(column: "ELL", row:, model: Ell) create_from_column(column: "Special Ed Status", row:, model: Sped) + create_from_column(column: "Housing", row:, model: Housing) + create_from_column(column: "Language", row:, model: Language) end end diff --git a/app/services/survey_item_values.rb b/app/services/survey_item_values.rb index be4833bc..dab65992 100644 --- a/app/services/survey_item_values.rb +++ b/app/services/survey_item_values.rb @@ -162,7 +162,7 @@ class SurveyItemValues # Only check the secondary hispanic column if we don't have self reported data and are relying on SIS data if self_report.nil? && sis.present? hispanic = value_from(pattern: /Hispanic\s*Latino/i)&.downcase - race_codes = race_codes.reject { |code| code == 5 } if hispanic == "true" && race_codes.count == 1 + race_codes = race_codes.reject { |code| code == 5 } if ["true", "1"].include?(hispanic) || race_codes.count == 1 race_codes = race_codes.push(4) if %w[true 1].include?(hispanic) end diff --git a/app/services/survey_responses_data_loader.rb b/app/services/survey_responses_data_loader.rb index 9c653aaf..5e663050 100644 --- a/app/services/survey_responses_data_loader.rb +++ b/app/services/survey_responses_data_loader.rb @@ -110,7 +110,8 @@ class SurveyResponsesDataLoader end if row.respondent_type == :parent - parent = Parent.find_or_create_by(response_id: row.response_id) + unknown_housing = Housing.find_by(designation: row.housing).id + parent = Parent.find_or_create_by(response_id: row.response_id, housing_id: unknown_housing) parent.number_of_children = row.number_of_children tmp_languages = row.languages.map { |language| languages[language] } parent.languages.concat(tmp_languages) diff --git a/db/migrate/20250408212201_add_housing_to_parent.rb b/db/migrate/20250408212201_add_housing_to_parent.rb new file mode 100644 index 00000000..0f4261f1 --- /dev/null +++ b/db/migrate/20250408212201_add_housing_to_parent.rb @@ -0,0 +1,7 @@ +class AddHousingToParent < ActiveRecord::Migration[8.0] + def change + add_reference :parents, :housing, foreign_key: true + Parent.update_all(housing_id: Housing.find_by(designation: 'Unknown').id) + change_column_null :parents, :housing_id, false + end +end diff --git a/db/migrate/20250411213850_create_languages.rb b/db/migrate/20250411213850_create_languages.rb new file mode 100644 index 00000000..65021c7f --- /dev/null +++ b/db/migrate/20250411213850_create_languages.rb @@ -0,0 +1,10 @@ +class CreateLanguages < ActiveRecord::Migration[8.0] + def change + create_table :languages do |t| + t.string :designation + t.string :slug + + t.timestamps + end + end +end diff --git a/spec/models/language_spec.rb b/spec/models/language_spec.rb new file mode 100644 index 00000000..924d9ca5 --- /dev/null +++ b/spec/models/language_spec.rb @@ -0,0 +1,5 @@ +require 'rails_helper' + +RSpec.describe Language, type: :model do + pending "add some examples to (or delete) #{__FILE__}" +end diff --git a/spec/services/survey_responses_data_loader_spec.rb b/spec/services/survey_responses_data_loader_spec.rb index 8baba8a0..7212882e 100644 --- a/spec/services/survey_responses_data_loader_spec.rb +++ b/spec/services/survey_responses_data_loader_spec.rb @@ -91,6 +91,12 @@ describe SurveyResponsesDataLoader do ] end + let(:housings) do + create(:housing, designation: "Own") + create(:housing, designation: "Rent") + create(:housing, designation: "Unknown") + end + let(:t_pcom_q3) { create(:survey_item, survey_item_id: "t-pcom-q3") } let(:t_pcom_q2) { create(:survey_item, survey_item_id: "t-pcom-q2") } let(:t_coll_q1) { create(:survey_item, survey_item_id: "t-coll-q1") } @@ -136,6 +142,7 @@ describe SurveyResponsesDataLoader do school second_school butler_school + housings t_pcom_q3 t_pcom_q2 t_coll_q1