Skip to content

Instantly share code, notes, and snippets.

@Pitbi
Created September 17, 2012 19:54

Revisions

  1. Pitbi revised this gist Sep 17, 2012. 2 changed files with 1 addition and 2 deletions.
    1 change: 0 additions & 1 deletion qualifications.js
    Original file line number Diff line number Diff line change
    @@ -1,4 +1,3 @@

    var mongoose = require('mongoose');
    var Schema = mongoose.Schema;

    2 changes: 1 addition & 1 deletion server.js
    Original file line number Diff line number Diff line change
    @@ -71,7 +71,7 @@ server.get('/parseXML2', function (req, res) {
    lap.attrs().forEach(function (lapAttribute) {
    var name = lapAttribute.name();
    var value = lapAttribute.value();
    qualification.entrys.push({laps: {name: value}});
    qualification.entrys.laps.push({name: value});
    });
    var lapTime = parseDriveTime(lap.text());
    });
  2. Pitbi revised this gist Sep 17, 2012. 4 changed files with 157 additions and 36 deletions.
    22 changes: 0 additions & 22 deletions ERROR
    Original file line number Diff line number Diff line change
    @@ -1,22 +0,0 @@
    TypeError: Object function () {
    if (arguments.length === 1) {
    var arg = arguments[0];
    if (typeof arg === 'object') {
    // object setter
    // iterate keys/value to set attributes
    for (var k in arg) {
    this._attr(k, arg[k]);
    };
    return this;
    } else if (typeof arg === 'string') {
    // getter
    return this._attr(arg);
    }
    } else if (arguments.length === 2) {
    // 2 arg setter
    var name = arguments[0];
    var value = arguments[1];
    this._attr(name, value);
    return this;
    }
    } has no method 'forEach'
    14 changes: 0 additions & 14 deletions gistfile1.js
    Original file line number Diff line number Diff line change
    @@ -1,14 +0,0 @@
    var drivers = xml.find("//Driver");


    drivers.forEach(function (driver) {
    var driverName = "" + driver.get("Name").text();
    var laps = driver.find("Lap");
    Driver.findOne({name : driverName}).exec(function (err, driverFound) {
    if (driverFound != null) {
    laps.forEach(function (lap) {
    console.log(lap.attr);
    lap.attr.forEach(function (lapAttribute) {
    console.log(lapAttribute.value());

    });
    35 changes: 35 additions & 0 deletions qualifications.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,35 @@

    var mongoose = require('mongoose');
    var Schema = mongoose.Schema;

    var qualificationSchema = new mongoose.Schema ({
    date : Date,
    track : {type: Schema.ObjectId, ref : 'Track'},
    mod : {type: Schema.ObjectId, ref : 'Mod'},
    entrys : [entrySchema]
    });
    var Qualification = mongoose.model('Qualification', qualificationSchema);

    var entrySchema = new mongoose.Schema ({
    driver : {type : Schema.ObjectId, ref : 'Driver'},
    car : String,
    position : Number,
    laps : [lapSchema],
    bestlap : Number
    });

    var lapSchema = new mongoose.Schema ({
    number : Number,
    s1 : Number,
    s2 : Number,
    s3 : Number,
    s4 : Number,
    s5 : Number,
    time : Number,
    et : Number,
    fuel : Number,
    });

    //sx : s for sector

    module.exports = Qualification;
    122 changes: 122 additions & 0 deletions server.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,122 @@
    server.get('/parseXML2', function (req, res) {
    fs.readFile('./export/2012_09_13_22_14_10-63Q1.xml', function (err, file) {
    var xml = libxmljs.parseXml(file);
    var dateText = xml.get("/rFactorXML/RaceResults/TimeString").text();
    var dateMatches = /^(\d{4})\/(\d{2})\/(\d{2}) (\d\d):(\d\d):(\d\d)/.exec(dateText);
    var date = new Date(dateMatches[1], dateMatches[2], dateMatches[3], dateMatches[4], dateMatches[5], dateMatches[6]);
    var track = xml.get("/rFactorXML/RaceResults/TrackEvent").text();
    var trackLength = xml.get("/rFactorXML/RaceResults/TrackLength").text();
    var modName = xml.get("/rFactorXML/RaceResults/Mod").text();
    var drivers = xml.find("//Driver");

    Track.findOne({name: track}).exec(function (err, existingTrack) {
    if(!existingTrack) {
    var newTrack = new Track ({name : track, length : trackLength, downloadLink: "#", location: "Need Edit", description: "Need Edit"});
    newTrack.save(function (err) {
    if (err)
    throw err;
    });
    }
    });

    Mod.findOne({name: modName}).exec(function (err, mod) {
    if (err)
    throw err;

    function addVehiclesToMod() {
    var vehicleNames = [];
    mod.vehicles.forEach(function (vehicle) {
    vehicleNames.push(vehicle.name);
    });
    console.log(vehicleNames);
    drivers.forEach(function (driver) {
    var vehicleName = driver.get("CarType").text();
    var vehicleClass = driver.get("CarClass").text();
    if (vehicleNames.indexOf(vehicleName) == -1) {
    mod.vehicles.push({name: vehicleName, group: vehicleClass});
    vehicleNames.push(vehicleName);
    }
    });
    mod.save(function (err) {
    if (err)
    throw err;
    });
    }

    if (!mod) {
    mod = new Mod ({name: modName});
    mod.save(function (err) {
    if (err)
    throw err;
    addVehiclesToMod();
    });
    } else {
    addVehiclesToMod();
    }
    });

    if (/Q/.exec(file)) {
    Qualification.findOne({date: date}).exec(function (err, existingQualification) {
    Mod.findOne({name: modName}).exec(function (err, mod) {
    if(!existingQualification) {
    Track.findOne({name: track}).exec(function (err, foundTrack) {
    var qualification = new Qualification ({date: date, track: foundTrack.id, mod: mod.id});
    drivers.forEach(function (driver) {
    var driverName = "" + driver.get("Name").text();
    var laps = driver.find("Lap");
    Driver.findOne({name : driverName}).exec(function (err, driverFound) {
    if (driverFound) {
    qualification.entrys.push({driver: driverFound.id});
    laps.forEach(function (lap) {
    lap.attrs().forEach(function (lapAttribute) {
    var name = lapAttribute.name();
    var value = lapAttribute.value();
    qualification.entrys.push({laps: {name: value}});
    });
    var lapTime = parseDriveTime(lap.text());
    });
    qualification.save(function (err) {
    if (err)
    throw err;
    else
    res.end("Qualification Added");
    });
    }
    });
    });
    });
    } else {
    res.end("Existing Qualification");
    }
    });
    });
    } else if (/R/.exec(file)) {
    Race.findOne({date: date}).exec(function (err, existingRace) {
    if(!existingRace) {
    var race = new Race ({date: date, track: track});
    drivers.forEach(function (driver) {
    var driverName = "" + driver.get("Name").text();
    var laps = driver.find("Lap");
    Driver.findOne({name : driverName}).exec(function (err, driverFound) {
    if (driverFound != null) {
    laps.forEach(function (lap) {
    var lapTime = parseDriveTime(lap.text());
    race.laps.push({driver: driverFound.id, time: lapTime});
    });
    race.save(function (err) {
    if (err)
    throw err;
    else
    res.end("Race Added");
    });
    }
    });
    });
    } else {
    res.end("Existing Race");
    }
    });
    }
    });
    });

  3. Pitbi revised this gist Sep 17, 2012. 1 changed file with 22 additions and 0 deletions.
    22 changes: 22 additions & 0 deletions ERROR
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,22 @@
    TypeError: Object function () {
    if (arguments.length === 1) {
    var arg = arguments[0];
    if (typeof arg === 'object') {
    // object setter
    // iterate keys/value to set attributes
    for (var k in arg) {
    this._attr(k, arg[k]);
    };
    return this;
    } else if (typeof arg === 'string') {
    // getter
    return this._attr(arg);
    }
    } else if (arguments.length === 2) {
    // 2 arg setter
    var name = arguments[0];
    var value = arguments[1];
    this._attr(name, value);
    return this;
    }
    } has no method 'forEach'
  4. Pitbi created this gist Sep 17, 2012.
    14 changes: 14 additions & 0 deletions gistfile1.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,14 @@
    var drivers = xml.find("//Driver");


    drivers.forEach(function (driver) {
    var driverName = "" + driver.get("Name").text();
    var laps = driver.find("Lap");
    Driver.findOne({name : driverName}).exec(function (err, driverFound) {
    if (driverFound != null) {
    laps.forEach(function (lap) {
    console.log(lap.attr);
    lap.attr.forEach(function (lapAttribute) {
    console.log(lapAttribute.value());

    });