@ -12,8 +12,12 @@ class SurveyResponsesDataLoader
survey_item_responses = CSV . parse ( lines . join , headers : ) . map do | row |
process_row ( row : SurveyItemValues . new ( row : , headers : headers_array , survey_items : all_survey_items , schools : ) )
end
SurveyItemResponse . import survey_item_responses . compact . flatten , batch_size : BATCH_SIZE ,
on_duplicate_key_update : :all
SurveyItemResponse . import (
survey_item_responses . compact . flatten ,
batch_size : BATCH_SIZE ,
on_duplicate_key_update : :all
)
end
end
end
@ -30,27 +34,33 @@ 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 ,
survey_items : all_survey_items , schools : ) )
survey_item_responses <<
process_row ( row : SurveyItemValues . new ( row : , headers : headers_array , survey_items : all_survey_items , schools : ) )
end
row_count += 1
next unless row_count == BATCH_SIZE
SurveyItemResponse . import survey_item_responses . compact . flatten , batch_size : BATCH_SIZE ,
on_duplicate_key_update : :all
SurveyItemResponse . import (
survey_item_responses . compact . flatten ,
batch_size : BATCH_SIZE ,
on_duplicate_key_update : :all
)
survey_item_responses = [ ]
row_count = 0
end
SurveyItemResponse . import survey_item_responses . compact . flatten , batch_size : BATCH_SIZE ,
on_duplicate_key_update : :all
SurveyItemResponse . import (
survey_item_responses . compact . flatten ,
batch_size : BATCH_SIZE ,
on_duplicate_key_update : :all
)
end
private
def schools
@schools = School . school_ hash
@schools = School . school_ by_dese_id
end
def genders
@ -83,19 +93,27 @@ class SurveyResponsesDataLoader
def process_survey_items ( row : )
student = Student . find_or_create_by ( response_id : row . response_id , lasid : row . lasid )
student . races . delete_all
tmp_races = row . races . map { | race | races [ race ] }
tmp_races = row . races . map do | race |
races [ race ]
end
student . races += tmp_races
row . survey_items . map do | survey_item |
likert_score = row . likert_score ( survey_item_id : survey_item . survey_item_id ) || next
row
. survey_items
. map do | survey_item |
likert_score = row . likert_score ( survey_item_id : survey_item . survey_item_id ) || next
unless likert_score . valid_likert_score?
puts ( " Response ID: #{ row . response_id } , Likert score: #{ likert_score } rejected " ) unless likert_score == " NA "
next
end
unless likert_score . valid_likert_score?
puts " Response ID: #{ row . response_id } , Likert score: #{ likert_score } rejected " unless likert_score == " NA "
next
response = row . survey_item_response ( survey_item : )
create_or_update_response ( survey_item_response : response , likert_score : , row : , survey_item : , student : )
end
response = row . survey_item_response ( survey_item : )
create_or_update_response ( survey_item_response : response , likert_score : , row : , survey_item : , student : )
end . compact
. compact
end
def create_or_update_response ( survey_item_response : , likert_score : , row : , survey_item : , student : )
@ -116,8 +134,20 @@ class SurveyResponsesDataLoader
survey_item_response . student = student
survey_item_response
else
SurveyItemResponse . new ( response_id : row . response_id , academic_year : row . academic_year , school : row . school , survey_item : ,
likert_score : , grade : , gender : , recorded_date : row . recorded_date , income : , ell : , sped : , student : )
SurveyItemResponse . new (
response_id : row . response_id ,
academic_year : row . academic_year ,
school : row . school ,
survey_item : ,
likert_score : ,
grade : ,
gender : ,
recorded_date : row . recorded_date ,
income : ,
ell : ,
sped : ,
student :
)
end
end
@ -126,16 +156,18 @@ class SurveyResponsesDataLoader
end
def get_survey_item_ids_from_headers ( headers : )
CSV . parse ( headers ) . first
. filter ( & :present? )
. filter { | header | header . start_with? " t- " , " s- " }
CSV
. parse ( headers )
. first
. filter ( & :present? )
. filter { | header | header . start_with? ( " t- " , " s- " ) }
end
end
module StringMonkeyPatches
def valid_likert_score?
to_i . between? 1 , 5
to_i . between? ( 1 , 5 )
end
end
String . include StringMonkeyPatches
String . include ( StringMonkeyPatches )