Skip to content

Commit 49d772e

Browse files
committed
Merge pull request #21 from doug-martin/master
v0.1.2
2 parents 6dfb034 + d007203 commit 49d772e

File tree

4 files changed

+63
-20
lines changed

4 files changed

+63
-20
lines changed

lib/formatter.js

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
var fs = require("fs"),
22
extended = require("./extended"),
3+
isUndefinedOrNull = extended.isUndefinedOrNull,
34
hash = extended.hash,
45
stream = require("stream"),
56
LINE_BREAK = (process.platform === 'win32' ? '\r\n' : '\n');
@@ -29,11 +30,13 @@ function createFormatter(options) {
2930
}
3031

3132
return function escapeFields(fields) {
32-
var i = -1, l = fields.length, ret = [];
33+
var i = -1, l = fields.length, ret = [], field;
3334
while (++i < l) {
34-
ret.push(escapeField(fields[i]));
35+
field = fields[i];
36+
field = (isUndefinedOrNull(field) ? "" : field) + "";
37+
ret.push(escapeField(field));
3538
}
36-
return ret.join(delimiter) + LINE_BREAK;
39+
return ret.join(delimiter);
3740
};
3841
}
3942

@@ -59,7 +62,7 @@ function __write(writer, arr, options) {
5962
item = arr[i];
6063
ret.push(formatter(isHash ? hash.values(item) : item));
6164
}
62-
writer.push(ret.join(""));
65+
writer.push(ret.join("\n"));
6366
}
6467
}
6568

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

7376
function writeToStream(ws, arr, options) {
74-
var writer = new stream.Readable();
75-
__write(writer, arr, options);
76-
writer.push(null);
77-
writer.pipe(ws);
78-
return writer;
77+
return write(arr, options).pipe(ws);
7978
}
8079

8180
function writeToString(arr, options) {

lib/parser_stream.js

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,29 @@ function ParserStream(options) {
3636

3737
util.inherits(ParserStream, stream.Transform);
3838

39-
var origOn = ParserStream.prototype.on;
39+
var origOn = ParserStream.prototype.on,
40+
origPause = ParserStream.prototype.pause,
41+
origResume = ParserStream.prototype.resume;
42+
43+
function pause() {
44+
origPause.apply(this, arguments);
45+
this.paused = true;
46+
this.pause = pause;
47+
}
48+
49+
function resume() {
50+
origResume.apply(this, arguments);
51+
this.paused = false;
52+
if (this.__pausedDone) {
53+
this.__pausedDone();
54+
}
55+
this.resume = resume;
56+
}
4057

4158
extended(ParserStream).extend({
4259

60+
__pausedDone: null,
61+
4362
__parseLine: function __parseLineData(data, index, ignore) {
4463
var ignoreEmpty = this._ignoreEmpty;
4564
if (extended.isBoolean(ignoreEmpty) && ignoreEmpty && EMPTY.test(data)) {
@@ -111,7 +130,11 @@ extended(ParserStream).extend({
111130
} else {
112131
this.lines += data;
113132
}
114-
done();
133+
if (!this.paused) {
134+
done();
135+
} else {
136+
this.__pausedDone = done;
137+
}
115138
},
116139

117140
_flush: function (callback) {
@@ -127,6 +150,25 @@ extended(ParserStream).extend({
127150
return data;
128151
},
129152

153+
pause: function () {
154+
if (!this.paused) {
155+
this.paused = true;
156+
this.emit("pause");
157+
}
158+
},
159+
160+
resume: function () {
161+
if (this.paused) {
162+
this.paused = false;
163+
if (this.__pausedDone) {
164+
var done = this.__pausedDone;
165+
this.__pausedDone = null;
166+
done();
167+
}
168+
this.emit("resume");
169+
}
170+
},
171+
130172
on: function (evt) {
131173
if (evt === "data" || evt === "readable") {
132174
this._emitData = true;

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "fast-csv",
3-
"version": "0.1.1",
3+
"version": "0.1.2",
44
"description": "CSV parser for node.js",
55
"main": "index.js",
66
"scripts": {

test/fast-csv.test.js

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -523,7 +523,7 @@ it.describe("fast-csv parser", function (it) {
523523
it.should("write an array of arrays", function (next) {
524524
var ws = new stream.Writable();
525525
ws._write = function (data) {
526-
assert.deepEqual(data.toString(), "a,b\na1,b1\na2,b2\n");
526+
assert.deepEqual(data.toString(), "a,b\na1,b1\na2,b2");
527527
next();
528528
};
529529
csv.writeToStream(ws, [
@@ -536,7 +536,7 @@ it.describe("fast-csv parser", function (it) {
536536
it.should("write an array of objects", function (next) {
537537
var ws = new stream.Writable();
538538
ws._write = function (data) {
539-
assert.deepEqual(data.toString(), "a,b\na1,b1\na2,b2\n");
539+
assert.deepEqual(data.toString(), "a,b\na1,b1\na2,b2");
540540
next();
541541
};
542542
csv.writeToStream(ws, [
@@ -553,14 +553,14 @@ it.describe("fast-csv parser", function (it) {
553553
["a", "b"],
554554
["a1", "b1"],
555555
["a2", "b2"]
556-
], {headers: true}), "a,b\na1,b1\na2,b2\n");
556+
], {headers: true}), "a,b\na1,b1\na2,b2");
557557
});
558558

559559
it.should("write an array of objects", function () {
560560
assert.equal(csv.writeToString([
561561
{a: "a1", b: "b1"},
562562
{a: "a2", b: "b2"}
563-
], {headers: true}), "a,b\na1,b1\na2,b2\n");
563+
], {headers: true}), "a,b\na1,b1\na2,b2");
564564
});
565565
});
566566

@@ -569,7 +569,7 @@ it.describe("fast-csv parser", function (it) {
569569
it.should("write an array of arrays", function (next) {
570570
var ws = new stream.Writable();
571571
ws._write = function (data) {
572-
assert.deepEqual(data.toString(), "a,b\na1,b1\na2,b2\n");
572+
assert.deepEqual(data.toString(), "a,b\na1,b1\na2,b2");
573573
next();
574574
};
575575
csv.write([
@@ -582,7 +582,7 @@ it.describe("fast-csv parser", function (it) {
582582
it.should("write an array of objects", function (next) {
583583
var ws = new stream.Writable();
584584
ws._write = function (data) {
585-
assert.deepEqual(data.toString(), "a,b\na1,b1\na2,b2\n");
585+
assert.deepEqual(data.toString(), "a,b\na1,b1\na2,b2");
586586
next();
587587
};
588588
csv.write([
@@ -602,7 +602,7 @@ it.describe("fast-csv parser", function (it) {
602602
["a2", "b2"]
603603
], {headers: true})
604604
.on("finish", function () {
605-
assert.equal(fs.readFileSync(path.resolve(__dirname, "assets/test.csv")).toString(), "a,b\na1,b1\na2,b2\n");
605+
assert.equal(fs.readFileSync(path.resolve(__dirname, "assets/test.csv")).toString(), "a,b\na1,b1\na2,b2");
606606
fs.unlinkSync(path.resolve(__dirname, "assets/test.csv"));
607607
next();
608608
});
@@ -615,10 +615,12 @@ it.describe("fast-csv parser", function (it) {
615615
{a: "a2", b: "b2"}
616616
], {headers: true})
617617
.on("finish", function () {
618-
assert.equal(fs.readFileSync(path.resolve(__dirname, "assets/test.csv")).toString(), "a,b\na1,b1\na2,b2\n");
618+
assert.equal(fs.readFileSync(path.resolve(__dirname, "assets/test.csv")).toString(), "a,b\na1,b1\na2,b2");
619619
fs.unlinkSync(path.resolve(__dirname, "assets/test.csv"));
620620
next();
621621
});
622622
});
623623
});
624624
});
625+
626+
it.run();

0 commit comments

Comments
 (0)