Refactor survey response loader to use functional style

pull/1/head
Alex Basson 4 years ago
parent 587cbbdd3d
commit 16734f9ce7

@ -1,10 +1,8 @@
require 'csv' require 'csv'
class SurveyResponsesDataLoader class SurveyResponsesDataLoader
@@survey_item_responses = []
def self.load_data(filepath:) def self.load_data(filepath:)
@@survey_item_responses = []
csv_file = File.read(filepath) csv_file = File.read(filepath)
parsed_csv_file = CSV.parse(csv_file, headers: true) parsed_csv_file = CSV.parse(csv_file, headers: true)
@ -13,11 +11,11 @@ class SurveyResponsesDataLoader
.filter { |header| header.start_with? 't-' or header.start_with? 's-' } .filter { |header| header.start_with? 't-' or header.start_with? 's-' }
.map { |survey_item_id| SurveyItem.find_by_survey_item_id survey_item_id } .map { |survey_item_id| SurveyItem.find_by_survey_item_id survey_item_id }
parsed_csv_file.each do |row| survey_item_responses = parsed_csv_file.map do |row|
process_row row: row, survey_items: survey_items process_row row: row, survey_items: survey_items
end end
SurveyItemResponse.import @@survey_item_responses SurveyItemResponse.import survey_item_responses.compact.flatten
end end
private private
@ -35,20 +33,20 @@ class SurveyResponsesDataLoader
school = School.find_by_district_code_and_school_code(district_code, school_code) school = School.find_by_district_code_and_school_code(district_code, school_code)
return if school.nil? return if school.nil?
survey_items.each do |survey_item| survey_items.map do |survey_item|
return unless SurveyItemResponse.find_by(response_id: response_id, survey_item: survey_item).nil? next unless SurveyItemResponse.find_by(response_id: response_id, survey_item: survey_item).nil?
likert_score = row[survey_item.survey_item_id] likert_score = row[survey_item.survey_item_id]
next if likert_score.nil? next if likert_score.nil?
@@survey_item_responses << SurveyItemResponse.new(
SurveyItemResponse.new(
response_id: response_id, response_id: response_id,
academic_year: academic_year, academic_year: academic_year,
school: school, school: school,
survey_item: survey_item, survey_item: survey_item,
likert_score: likert_score likert_score: likert_score
) )
end end.compact
end end
end end

Loading…
Cancel
Save