Skip to content

Commit

Permalink
Merge pull request #65 from Trott/add
Browse files Browse the repository at this point in the history
write()
  • Loading branch information
Trott committed Dec 28, 2013
2 parents db0fc69 + bee4fb2 commit d11b8e0
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 14 deletions.
16 changes: 12 additions & 4 deletions lib/data.js
Expand Up @@ -3,16 +3,18 @@ var fs = require('fs');
function Data(options) {
options = options || {};
var dataDir = options.dataDir || __dirname + '/../data';
var outputDir = options.outputDir || dataDir;
var data = {};
var collections = ['tracks','artists','individuals','releases','artist_track', 'individual_artist', 'individual_track', 'track_release'];
data.tracks = JSON.parse(fs.readFileSync(dataDir + '/tracks.json'));
data.artists = JSON.parse(fs.readFileSync(dataDir + '/artists.json'));
data.individuals = JSON.parse(fs.readFileSync(dataDir + '/individuals.json'));
data.releases = JSON.parse(fs.readFileSync(dataDir + '/releases.json'));

data.at = JSON.parse(fs.readFileSync(dataDir + '/artist_track.json'));
data.ia = JSON.parse(fs.readFileSync(dataDir + '/individual_artist.json'));
data.it = JSON.parse(fs.readFileSync(dataDir + '/individual_track.json'));
data.tr = JSON.parse(fs.readFileSync(dataDir + '/track_release.json'));
data.artist_track = JSON.parse(fs.readFileSync(dataDir + '/artist_track.json'));
data.individual_artist = JSON.parse(fs.readFileSync(dataDir + '/individual_artist.json'));
data.individual_track = JSON.parse(fs.readFileSync(dataDir + '/individual_track.json'));
data.track_release = JSON.parse(fs.readFileSync(dataDir + '/track_release.json'));

this.getTracks = function () {
return data.tracks.slice();
Expand Down Expand Up @@ -65,6 +67,12 @@ function Data(options) {

return rc;
};

this.write = function () {
collections.forEach(function (collection) {
fs.writeFileSync(outputDir + '/' + collection + '.json', JSON.stringify(data[collection], null, 2));
});
};
}

module.exports = Data;
3 changes: 2 additions & 1 deletion package.json
Expand Up @@ -25,6 +25,7 @@
"grunt": "~0.4.2",
"grunt-exec": "~0.4.2",
"grunt-contrib-jshint": "~0.7.2",
"grunt-jasmine-node": "~0.1.0"
"grunt-jasmine-node": "~0.1.0",
"glob": "~3.2.7"
}
}
43 changes: 34 additions & 9 deletions spec/data.spec.js
@@ -1,24 +1,27 @@
// Specs are run via Grunt: grunt jasmine_node

var Data = require('../lib/Data.js');
var fs = require("fs");
var glob = require("glob");

describe('Constructor', function () {
var Data = require("../lib/Data.js");

it('should load from specified directory', function () {
var dataDir = __dirname + '/fixture/data';
describe("Constructor", function () {

it("should load from specified directory", function () {
var dataDir = __dirname + "/fixture/data";
var data = new Data({dataDir: dataDir});
var tracks = data.getTracks();
expect(tracks).toContain({_id:"1", titles:["That's All Right"]});
expect(tracks).toContain({_id:"2", titles:["Blue Moon of Kentucky"]});
});

it('should throw an exception if data directory does not exist', function () {
var dataDir = __dirname + 'bad/path';
it("should throw an exception if data directory does not exist", function () {
var dataDir = __dirname + "bad/path";
expect(function () {var data = new Data({dataDir: dataDir});}).toThrow();
});

it('should load from the data directory if no directory is specified', function () {
var dataDir = __dirname + '/../data';
it("should load from the data directory if no directory is specified", function () {
var dataDir = __dirname + "/../data";
var dataWithArgument = new Data({dataDir: dataDir});
var dataWithoutArgument = new Data();
expect(dataWithArgument.getTracks()).toEqual(dataWithoutArgument.getTracks());
Expand All @@ -29,9 +32,13 @@ describe('Constructor', function () {
describe ("non-Constructor", function () {

var data;
var fixtureDir = __dirname + "/fixture/data";
var outputDir = __dirname + "/../tmp";

beforeEach(function () {
data = new Data({dataDir: __dirname + "/fixture/data"});
data = new Data({dataDir: fixtureDir, outputDir: outputDir});
console.dir(outputDir);
glob.sync(outputDir+"/*.json").forEach(function (fileName) { fs.unlinkSync(fileName); });
});

describe("createTrack(entry)", function () {
Expand Down Expand Up @@ -127,4 +134,22 @@ describe ("non-Constructor", function () {
});
});

describe("write()", function () {
it("should duplicate the track collection if no changes have been made", function () {
data.write();
var newData = new Data({dataDir: outputDir});
expect(newData.getTracks()).toEqual(data.getTracks());
});

it("should reflect a newly-created track in the output", function () {
var newTrack = {_id: "3", titles:["Count It Higher"]};
data.createTrack(newTrack);
data.write();
var newData = new Data({dataDir: outputDir});
expect(newData.getTracks()).toContain(newTrack);
var oldData = new Data({dataDir: fixtureDir});
expect(oldData.getTracks()).not.toContain(newTrack);
});
});

});
2 changes: 2 additions & 0 deletions tmp/.gitignore
@@ -0,0 +1,2 @@
*
!.gitignore

0 comments on commit d11b8e0

Please sign in to comment.