You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
32 lines
776 B
32 lines
776 B
# frozen_string_literal: true
|
|
|
|
require 'csv'
|
|
|
|
class DemographicLoader
|
|
def self.load_data(filepath:)
|
|
CSV.parse(File.read(filepath), headers: true) do |row|
|
|
qualtrics_code = row['Race Qualtrics Code'].to_i
|
|
designation = row['Race/Ethnicity']
|
|
next unless qualtrics_code && designation
|
|
|
|
if qualtrics_code.between?(6, 7)
|
|
UnknownRace.new(qualtrics_code:, designation:)
|
|
else
|
|
KnownRace.new(qualtrics_code:, designation:)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
class KnownRace
|
|
def initialize(qualtrics_code:, designation:)
|
|
Race.find_or_create_by!(qualtrics_code:, designation:)
|
|
end
|
|
end
|
|
|
|
class UnknownRace
|
|
def initialize(qualtrics_code:, designation:)
|
|
Race.find_or_create_by!(qualtrics_code: 99, designation: 'Unknown')
|
|
end
|
|
end
|