fix: start fixing problem with variants not getting added to the cleaned csv

pull/2/head
rebuilt 2 years ago
parent 4e33c8e173
commit 2321897283

@ -3,13 +3,25 @@ class SurveyItemValues
def initialize(row:, headers:, genders:, survey_items:, schools:, disaggregation_data: nil)
@row = row
@headers = headers
@headers = include_all_headers(headers:)
@genders = genders
@survey_items = survey_items
@schools = schools
@disaggregation_data = disaggregation_data
end
# Some survey items have variants, i.e. a survey item with an id of s-tint-q1 might have a variant that looks like s-tint-q1-1. We must ensure that all variants in the form of s-tint-q1-1 have a matching pair.
# We don't ensure that ids in the form of s-tint-q1 have a matching pair because not all questions have variants
def include_all_headers(headers:)
alternates = headers.filter(&:present?)
.filter { |header| header.end_with? "-1" }
alternates.each do |header|
main = header.sub(/-1\z/, "")
headers.push(main) unless headers.include?(main)
end
headers
end
def dese_id?
dese_id.present?
end
@ -110,19 +122,19 @@ class SurveyItemValues
@raw_income ||= disaggregation.income
end
# TODO - rename these cases
# TODO: - rename these cases
def income
@income ||= value_from(pattern: /^Income$/i)
return @income if @income.present?
@income ||= case raw_income
in /Free\s*Lunch|Reduced\s*Lunch|Low\s*Income/i
"Economically Disadvantaged - Y"
in /Not\s*Eligible/i
"Economically Disadvantaged - N"
else
"Unknown"
end
in /Free\s*Lunch|Reduced\s*Lunch|Low\s*Income/i
"Economically Disadvantaged - Y"
in /Not\s*Eligible/i
"Economically Disadvantaged - N"
else
"Unknown"
end
end
def value_from(pattern:)
@ -141,9 +153,9 @@ class SurveyItemValues
row["Income"] = income
row["Raw Income"] = raw_income
headers.select(&:present?)
.reject { |key, _value| key.start_with? "Q" }
.reject { |key, _value| key.end_with? "-1" }
.map { |header| row[header] }
.reject { |key, _value| key.start_with? "Q" }
.reject { |key, _value| key.end_with? "-1" }
.map { |header| row[header] }
end
def duration
@ -156,17 +168,17 @@ class SurveyItemValues
def respondent_type
return :teacher if headers
.filter(&:present?)
.filter { |header| header.start_with? "t-" }.count > 0
.filter(&:present?)
.filter { |header| header.start_with? "t-" }.count > 0
:student
end
def survey_type
survey_item_ids = headers
.filter(&:present?)
.reject { |header| header.end_with?("-1") }
.filter { |header| header.start_with?("t-", "s-") }
.filter(&:present?)
.reject { |header| header.end_with?("-1") }
.filter { |header| header.start_with?("t-", "s-") }
SurveyItem.survey_type(survey_item_ids:)
end

Loading…
Cancel
Save