refactor: change addPointsToTrack -> parseTrackPoints generator

This commit is contained in:
Paul Bienkowski 2020-11-21 23:07:44 +01:00
parent b31d3e0e7d
commit 6b98655c92
4 changed files with 11 additions and 27 deletions

View file

@ -1,8 +0,0 @@
class TrackInfo {
constructor(track, trackData) {
this.track = track;
this.trackData = trackData;
}
}
module.exports = TrackInfo;

View file

@ -61,7 +61,7 @@ function replaceDollarNewlinesHack(body) {
return body; return body;
} }
function addPointsToTrack(trackInfo, body, format = null) { function* parseTrackPoints(body, format = null) {
body = replaceDollarNewlinesHack(body); body = replaceDollarNewlinesHack(body);
const detectedFormat = format != null ? format : detectFormat(body); const detectedFormat = format != null ? format : detectFormat(body);
@ -80,10 +80,7 @@ function addPointsToTrack(trackInfo, body, format = null) {
break; break;
} }
const points = trackInfo.trackData.points; yield* parser(body);
for (const newPoint of parser(body)) {
points.push(newPoint);
}
} }
function detectFormat(body) { function detectFormat(body) {
@ -257,4 +254,4 @@ function* parseObsver2(body) {
} }
} }
module.exports = { addPointsToTrack, detectFormat, parseObsver1, parseObsver2, replaceDollarNewlinesHack }; module.exports = { parseTrackPoints, detectFormat, parseObsver1, parseObsver2, replaceDollarNewlinesHack };

View file

@ -1,17 +1,14 @@
const { addPointsToTrack, parseObsver1, detectFormat, parseObsver2, replaceDollarNewlinesHack } = require('./tracks'); const { parseTrackPoints, parseObsver1, detectFormat, parseObsver2, replaceDollarNewlinesHack } = require('./tracks');
const TrackInfo = require('./TrackInfo');
const { test1, test2, test3 } = require('./_tracks_testdata'); const { test1, test2, test3 } = require('./_tracks_testdata');
describe('addPointsToTrack', () => { describe('parseTrackPoints', () => {
it('is a function', () => { it('is a function', () => {
expect(typeof addPointsToTrack).toBe('function'); expect(typeof parseTrackPoints).toBe('function');
}); });
it('works on the sample data with an empty track', () => { it('works on the sample data with an empty track', () => {
const trackInfo = new TrackInfo({}, { points: [] }); const points = Array.from(parseTrackPoints(test1));
addPointsToTrack(trackInfo, test1);
const points = trackInfo.trackData.points;
expect(points).toHaveLength(324); expect(points).toHaveLength(324);
expect(points[0]).toEqual({ expect(points[0]).toEqual({
date: '12.07.2020', date: '12.07.2020',

View file

@ -6,7 +6,7 @@ const Comment = mongoose.model('Comment');
const User = mongoose.model('User'); const User = mongoose.model('User');
const auth = require('../auth'); const auth = require('../auth');
const currentTracks = new Map(); const currentTracks = new Map();
const { addPointsToTrack } = require('../../logic/tracks'); const { parseTrackPoints } = require('../../logic/tracks');
const wrapRoute = require('../../_helpers/wrapRoute'); const wrapRoute = require('../../_helpers/wrapRoute');
// Preload track objects on routes with ':track' // Preload track objects on routes with ':track'
@ -155,8 +155,7 @@ router.post(
track.trackData = trackData._id; track.trackData = trackData._id;
if (req.body.track.body && req.body.track.body.trim()) { if (req.body.track.body && req.body.track.body.trim()) {
trackData.points = []; trackData.points = Array.from(parseTrackPoints(track.body));
addPointsToTrack({ trackData }, track.body);
} }
track.author = user; track.author = user;
@ -242,7 +241,7 @@ router.post(
} }
const trackData = await TrackData.findById(track.trackData); const trackData = await TrackData.findById(track.trackData);
addPointsToTrack({ trackData }, track.body); trackData.points = Array.from(parseTrackPoints(track.body));
await trackData.save(); await trackData.save();
// We are done with this track, it is complete. // We are done with this track, it is complete.
@ -292,8 +291,7 @@ router.put(
trackData = new TrackData(); trackData = new TrackData();
req.track.trackData = trackData._id; req.track.trackData = trackData._id;
} }
trackData.points = []; trackData.points = Array.from(parseTrackPoints(req.track.body));
addPointsToTrack({ trackData }, req.track.body);
await trackData.save(); await trackData.save();
} }