# frozen_string_literal: true require 'csv' class DemographicLoader def self.load_data(filepath:) CSV.parse(File.read(filepath), headers: true) do |row| process_race(row:) process_gender(row:) process_income(row:) process_ell(row:) end end def self.process_race(row:) qualtrics_code = row["Race Qualtrics Code"].to_i designation = row["Race/Ethnicity"] return unless qualtrics_code && designation if qualtrics_code.between?(6, 7) UnknownRace.new(qualtrics_code:, designation:) else KnownRace.new(qualtrics_code:, designation:) end end def self.process_gender(row:) qualtrics_code = row["Gender Qualtrics Code"].to_i designation = row["Sex/Gender"] return unless qualtrics_code && designation gender = ::Gender.find_or_create_by!(qualtrics_code:, designation:) gender.save end def self.process_income(row:) designation = row["Income"] return unless designation Income.find_or_create_by!(designation:) end def self.process_ell(row:) designation = row["ELL"] return unless designation Ell.find_or_create_by!(designation:) end end class KnownRace def initialize(qualtrics_code:, designation:) known = Race.find_or_create_by!(qualtrics_code:) known.designation = designation known.slug = designation.parameterize known.save end end class UnknownRace def initialize(qualtrics_code:, designation:) unknown = Race.find_or_create_by!(qualtrics_code: 99) unknown.designation = "Race/Ethnicity Not Listed" unknown.slug = designation.parameterize unknown.save end end