Skip to content

Commit

Permalink
Merge pull request #21 from doug-martin/master
Browse files Browse the repository at this point in the history
v0.1.2
  • Loading branch information
doug-martin committed Mar 7, 2014
2 parents 6dfb034 + d007203 commit 49d772e
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 20 deletions.
17 changes: 8 additions & 9 deletions lib/formatter.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
var fs = require("fs"),
extended = require("./extended"),
isUndefinedOrNull = extended.isUndefinedOrNull,
hash = extended.hash,
stream = require("stream"),
LINE_BREAK = (process.platform === 'win32' ? '\r\n' : '\n');
Expand Down Expand Up @@ -29,11 +30,13 @@ function createFormatter(options) {
}

return function escapeFields(fields) {
var i = -1, l = fields.length, ret = [];
var i = -1, l = fields.length, ret = [], field;
while (++i < l) {
ret.push(escapeField(fields[i]));
field = fields[i];
field = (isUndefinedOrNull(field) ? "" : field) + "";
ret.push(escapeField(field));
}
return ret.join(delimiter) + LINE_BREAK;
return ret.join(delimiter);
};
}

Expand All @@ -59,7 +62,7 @@ function __write(writer, arr, options) {
item = arr[i];
ret.push(formatter(isHash ? hash.values(item) : item));
}
writer.push(ret.join(""));
writer.push(ret.join("\n"));
}
}

Expand All @@ -71,11 +74,7 @@ function write(arr, options) {
}

function writeToStream(ws, arr, options) {
var writer = new stream.Readable();
__write(writer, arr, options);
writer.push(null);
writer.pipe(ws);
return writer;
return write(arr, options).pipe(ws);
}

function writeToString(arr, options) {
Expand Down
46 changes: 44 additions & 2 deletions lib/parser_stream.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,10 +36,29 @@ function ParserStream(options) {

util.inherits(ParserStream, stream.Transform);

var origOn = ParserStream.prototype.on;
var origOn = ParserStream.prototype.on,
origPause = ParserStream.prototype.pause,
origResume = ParserStream.prototype.resume;

function pause() {
origPause.apply(this, arguments);
this.paused = true;
this.pause = pause;
}

function resume() {
origResume.apply(this, arguments);
this.paused = false;
if (this.__pausedDone) {
this.__pausedDone();
}
this.resume = resume;
}

extended(ParserStream).extend({

__pausedDone: null,

__parseLine: function __parseLineData(data, index, ignore) {
var ignoreEmpty = this._ignoreEmpty;
if (extended.isBoolean(ignoreEmpty) && ignoreEmpty && EMPTY.test(data)) {
Expand Down Expand Up @@ -111,7 +130,11 @@ extended(ParserStream).extend({
} else {
this.lines += data;
}
done();
if (!this.paused) {
done();
} else {
this.__pausedDone = done;
}
},

_flush: function (callback) {
Expand All @@ -127,6 +150,25 @@ extended(ParserStream).extend({
return data;
},

pause: function () {
if (!this.paused) {
this.paused = true;
this.emit("pause");
}
},

resume: function () {
if (this.paused) {
this.paused = false;
if (this.__pausedDone) {
var done = this.__pausedDone;
this.__pausedDone = null;
done();
}
this.emit("resume");
}
},

on: function (evt) {
if (evt === "data" || evt === "readable") {
this._emitData = true;
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "fast-csv",
"version": "0.1.1",
"version": "0.1.2",
"description": "CSV parser for node.js",
"main": "index.js",
"scripts": {
Expand Down
18 changes: 10 additions & 8 deletions test/fast-csv.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -523,7 +523,7 @@ it.describe("fast-csv parser", function (it) {
it.should("write an array of arrays", function (next) {
var ws = new stream.Writable();
ws._write = function (data) {
assert.deepEqual(data.toString(), "a,b\na1,b1\na2,b2\n");
assert.deepEqual(data.toString(), "a,b\na1,b1\na2,b2");
next();
};
csv.writeToStream(ws, [
Expand All @@ -536,7 +536,7 @@ it.describe("fast-csv parser", function (it) {
it.should("write an array of objects", function (next) {
var ws = new stream.Writable();
ws._write = function (data) {
assert.deepEqual(data.toString(), "a,b\na1,b1\na2,b2\n");
assert.deepEqual(data.toString(), "a,b\na1,b1\na2,b2");
next();
};
csv.writeToStream(ws, [
Expand All @@ -553,14 +553,14 @@ it.describe("fast-csv parser", function (it) {
["a", "b"],
["a1", "b1"],
["a2", "b2"]
], {headers: true}), "a,b\na1,b1\na2,b2\n");
], {headers: true}), "a,b\na1,b1\na2,b2");
});

it.should("write an array of objects", function () {
assert.equal(csv.writeToString([
{a: "a1", b: "b1"},
{a: "a2", b: "b2"}
], {headers: true}), "a,b\na1,b1\na2,b2\n");
], {headers: true}), "a,b\na1,b1\na2,b2");
});
});

Expand All @@ -569,7 +569,7 @@ it.describe("fast-csv parser", function (it) {
it.should("write an array of arrays", function (next) {
var ws = new stream.Writable();
ws._write = function (data) {
assert.deepEqual(data.toString(), "a,b\na1,b1\na2,b2\n");
assert.deepEqual(data.toString(), "a,b\na1,b1\na2,b2");
next();
};
csv.write([
Expand All @@ -582,7 +582,7 @@ it.describe("fast-csv parser", function (it) {
it.should("write an array of objects", function (next) {
var ws = new stream.Writable();
ws._write = function (data) {
assert.deepEqual(data.toString(), "a,b\na1,b1\na2,b2\n");
assert.deepEqual(data.toString(), "a,b\na1,b1\na2,b2");
next();
};
csv.write([
Expand All @@ -602,7 +602,7 @@ it.describe("fast-csv parser", function (it) {
["a2", "b2"]
], {headers: true})
.on("finish", function () {
assert.equal(fs.readFileSync(path.resolve(__dirname, "assets/test.csv")).toString(), "a,b\na1,b1\na2,b2\n");
assert.equal(fs.readFileSync(path.resolve(__dirname, "assets/test.csv")).toString(), "a,b\na1,b1\na2,b2");
fs.unlinkSync(path.resolve(__dirname, "assets/test.csv"));
next();
});
Expand All @@ -615,10 +615,12 @@ it.describe("fast-csv parser", function (it) {
{a: "a2", b: "b2"}
], {headers: true})
.on("finish", function () {
assert.equal(fs.readFileSync(path.resolve(__dirname, "assets/test.csv")).toString(), "a,b\na1,b1\na2,b2\n");
assert.equal(fs.readFileSync(path.resolve(__dirname, "assets/test.csv")).toString(), "a,b\na1,b1\na2,b2");
fs.unlinkSync(path.resolve(__dirname, "assets/test.csv"));
next();
});
});
});
});

it.run();

0 comments on commit 49d772e

Please sign in to comment.