Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

write() #65

Merged
merged 1 commit into from Dec 28, 2013
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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