chore: refactor Gender out out of survey_item_values row

This commit is contained in:
Nelson Jovel 2023-12-20 11:08:23 -08:00
parent 8a3c6d9821
commit e7fb009425
5 changed files with 140 additions and 142 deletions

View file

@ -76,7 +76,7 @@ class Cleaner
file.lazy.each_slice(1000) do |lines|
CSV.parse(lines.join, headers:).map do |row|
values = SurveyItemValues.new(row:, headers:, genders:,
values = SurveyItemValues.new(row:, headers:,
survey_items: all_survey_items, schools:)
next unless values.valid_school?

View file

@ -1,12 +1,11 @@
class SurveyItemValues
attr_reader :row, :headers, :genders, :survey_items, :schools
attr_reader :row, :headers, :survey_items, :schools
def initialize(row:, headers:, genders:, survey_items:, schools:)
def initialize(row:, headers:, survey_items:, schools:)
@row = row
# Remove any newlines in headers
headers = headers.map { |item| item.delete("\n") if item.present? }
@headers = include_all_headers(headers:)
@genders = genders
@survey_items = survey_items
@schools = schools
@ -19,7 +18,7 @@ class SurveyItemValues
row["SpEd"] = sped
row["Progress Count"] = progress
row["Race"] ||= races.map { |race| race&.qualtrics_code }.join(",")
row["Gender"] ||= gender&.qualtrics_code
row["Gender"] ||= gender
copy_data_to_main_column(main: /Race/i, secondary: /Race Secondary|Race-1/i)
copy_data_to_main_column(main: /Gender/i, secondary: /Gender Secondary|Gender-1/i)
@ -122,8 +121,7 @@ class SurveyItemValues
gender_code ||= value_from(pattern: /Gender-\s*Qcode/i)
gender_code ||= value_from(pattern: /Gender - do not use/i)
gender_code ||= value_from(pattern: /Gender/i)
gender_code = Gender.qualtrics_code_from(gender_code)
genders[gender_code] if genders
Gender.qualtrics_code_from(gender_code)
end
end

View file

@ -9,7 +9,7 @@ class SurveyResponsesDataLoader
file.lazy.each_slice(500) do |lines|
survey_item_responses = CSV.parse(lines.join, headers:).map do |row|
process_row(row: SurveyItemValues.new(row:, headers: headers_array, genders:, survey_items: all_survey_items, schools:),
process_row(row: SurveyItemValues.new(row:, headers: headers_array, survey_items: all_survey_items, schools:),
rules:)
end
SurveyItemResponse.import survey_item_responses.compact.flatten, batch_size: 500, on_duplicate_key_update: :all
@ -29,7 +29,7 @@ class SurveyResponsesDataLoader
next unless line.present?
CSV.parse(line, headers:).map do |row|
survey_item_responses << process_row(row: SurveyItemValues.new(row:, headers: headers_array, genders:, survey_items: all_survey_items, schools:),
survey_item_responses << process_row(row: SurveyItemValues.new(row:, headers: headers_array, survey_items: all_survey_items, schools:),
rules:)
end
@ -98,7 +98,7 @@ class SurveyResponsesDataLoader
end
def create_or_update_response(survey_item_response:, likert_score:, row:, survey_item:, student:)
gender = row.gender
gender = genders[row.gender]
grade = row.grade
income = incomes[row.income.parameterize]
ell = ells[row.ell]