Fix regression in student loader

pull/1/head
rebuilt 3 years ago
parent b915c61476
commit d6b2521883

@ -4,11 +4,12 @@ class StudentLoader
def self.load_data(filepath:, rules: []) def self.load_data(filepath:, rules: [])
File.open(filepath) do |file| File.open(filepath) do |file|
headers = file.first headers = file.first
headers_array = headers.split(',')
file.lazy.each_slice(1_000) do |lines| file.lazy.each_slice(1_000) do |lines|
CSV.parse(lines.join, headers:).map do |row| CSV.parse(lines.join, headers:).map do |row|
next if rules.any? do |rule| next if rules.any? do |rule|
rule.new(row: SurveyItemValues.new(row:, headers:, genders: nil, survey_items: nil, rule.new(row: SurveyItemValues.new(row:, headers: headers_array, genders: nil, survey_items: nil,
schools:)).skip_row? schools:)).skip_row?
end end
@ -20,6 +21,7 @@ class StudentLoader
def self.from_file(file:, rules: []) def self.from_file(file:, rules: [])
headers = file.gets headers = file.gets
headers_array = headers.split(',')
survey_item_responses = [] survey_item_responses = []
until file.eof? until file.eof?
@ -28,7 +30,7 @@ class StudentLoader
CSV.parse(line, headers:).map do |row| CSV.parse(line, headers:).map do |row|
next if rules.any? do |rule| next if rules.any? do |rule|
rule.new(row: SurveyItemValues.new(row:, headers:, genders: nil, survey_items: nil, rule.new(row: SurveyItemValues.new(row:, headers: headers_array, genders: nil, survey_items: nil,
schools:)).skip_row? schools:)).skip_row?
end end

@ -4,12 +4,13 @@ class SurveyResponsesDataLoader
def self.load_data(filepath:, rules: [Rule::NoRule]) def self.load_data(filepath:, rules: [Rule::NoRule])
File.open(filepath) do |file| File.open(filepath) do |file|
headers = file.first headers = file.first
headers_array = headers.split(',')
genders_hash = genders genders_hash = genders
all_survey_items = survey_items(headers:) all_survey_items = survey_items(headers:)
file.lazy.each_slice(500) do |lines| file.lazy.each_slice(500) do |lines|
survey_item_responses = CSV.parse(lines.join, headers:).map do |row| survey_item_responses = CSV.parse(lines.join, headers:).map do |row|
process_row(row: SurveyItemValues.new(row:, headers: headers.split(','), genders: genders_hash, survey_items: all_survey_items, schools:), process_row(row: SurveyItemValues.new(row:, headers: headers_array, genders: genders_hash, survey_items: all_survey_items, schools:),
rules:) rules:)
end end
SurveyItemResponse.import survey_item_responses.compact.flatten, batch_size: 500 SurveyItemResponse.import survey_item_responses.compact.flatten, batch_size: 500
@ -19,6 +20,7 @@ class SurveyResponsesDataLoader
def self.from_file(file:, rules: []) def self.from_file(file:, rules: [])
headers = file.gets headers = file.gets
headers_array = headers.split(',')
genders_hash = genders genders_hash = genders
all_survey_items = survey_items(headers:) all_survey_items = survey_items(headers:)
@ -29,7 +31,7 @@ class SurveyResponsesDataLoader
next unless line.present? next unless line.present?
CSV.parse(line, headers:).map do |row| CSV.parse(line, headers:).map do |row|
survey_item_responses << process_row(row: SurveyItemValues.new(row:, headers: headers.split(','), genders: genders_hash, survey_items: all_survey_items, schools:), survey_item_responses << process_row(row: SurveyItemValues.new(row:, headers: headers_array, genders: genders_hash, survey_items: all_survey_items, schools:),
rules:) rules:)
end end

Loading…
Cancel
Save