Home Identifier Source Repository

src/lib/parse-sis.js

import cleanThePage from './clean-the-page'
import nameTheTables from './name-the-tables'
import processCoursesTable from './process-courses-table'
import processInfoTable from './process-info-table'
import processAreaTable from './process-area-table'
import map from 'lodash/collection/map'
import groupBy from 'lodash/collection/groupBy'
import parseInt from 'lodash/string/parseInt'

function expandDegreeType(type) {
	if (type === 'B.A.') {
		return 'Bachelor of Arts'
	}
	else if (type === 'B.M.') {
		return 'Bachelor of Music'
	}
	return type
}

function coallateSchedules(courses) {
	let byTerm = groupBy(courses, 'term')
	return map(byTerm, (courses, term) => {
		console.log('courses', courses)
		return {
			year: parseInt(term.substr(0, 4)),
			semester: parseInt(term[4]),
			clbids: map(courses, c => c.clbid),
		}
	})
}

export default function parseSIS(html) {
	const [rawTables, degreeType] = cleanThePage(html)
	const tables = nameTheTables(rawTables)

	const courses = processCoursesTable(tables.courses)

	const areas = processAreaTable(tables.areas)
	const degree = {type: 'degree', name: expandDegreeType(degreeType)}

	const cleanedTables = {
		...processInfoTable(tables.info),
		studies: [degree, ...areas],
		schedules: coallateSchedules(courses),
	}

	return cleanedTables
}