Skip to content

Commit

Permalink
Return all fields when not setting fields param
Browse files Browse the repository at this point in the history
Fixes #104
  • Loading branch information
Ilya Radchenko committed Jul 11, 2016
1 parent 765cd9c commit c436942
Show file tree
Hide file tree
Showing 5 changed files with 24 additions and 9 deletions.
17 changes: 15 additions & 2 deletions lib/json2csv.js
Expand Up @@ -3,6 +3,8 @@
*/
var os = require('os');
var lodashGet = require('lodash.get');
var lodashFlatten = require('lodash.flatten');
var lodashUniq = require('lodash.uniq');
var flatten = require('flat');

/**
Expand All @@ -17,8 +19,8 @@ var flatten = require('flat');
*/
module.exports = function (params, callback) {
var hasCallback = typeof callback === 'function';

var err;

try {
checkParams(params);
} catch (err) {
Expand All @@ -30,8 +32,10 @@ module.exports = function (params, callback) {
throw err;
}
}

var titles = createColumnTitles(params);
var csv = createColumnContent(params, titles);

if (hasCallback) {
return process.nextTick(function () {
callback(null, csv);
Expand Down Expand Up @@ -67,7 +71,16 @@ function checkParams(params) {
if (!params.fields && (params.data.length === 0 || typeof params.data[0] !== 'object')) {
throw new Error('params should include "fields" and/or non-empty "data" array of objects');
}
params.fields = params.fields || Object.keys(params.data[0]);

if (!params.fields) {
var dataFields = params.data.map(function (item) {
return Object.keys(item);
});

dataFields = lodashFlatten(dataFields);
params.fields = lodashUniq(dataFields);
debugger;
}


//#check fieldNames
Expand Down
2 changes: 2 additions & 0 deletions package.json
Expand Up @@ -34,7 +34,9 @@
"commander": "^2.8.1",
"debug": "^2.2.0",
"flat": "^2.0.0",
"lodash.flatten": "^4.2.0",
"lodash.get": "^4.3.0",
"lodash.uniq": "^4.3.0",
"path-is-absolute": "^1.0.0"
},
"devDependencies": {
Expand Down
10 changes: 5 additions & 5 deletions test/fixtures/csv/default.csv
@@ -1,5 +1,5 @@
"carModel","price","color"
"Audi",0,"blue"
"BMW",15000,"red"
"Mercedes",20000,"yellow"
"Porsche",30000,"green"
"carModel","price","color","transmission"
"Audi",0,"blue",
"BMW",15000,"red","manual"
"Mercedes",20000,"yellow",
"Porsche",30000,"green",
2 changes: 1 addition & 1 deletion test/fixtures/json/default.json
@@ -1,6 +1,6 @@
[
{ "carModel": "Audi", "price": 0, "color": "blue" },
{ "carModel": "BMW", "price": 15000, "color": "red" },
{ "carModel": "BMW", "price": 15000, "color": "red", "transmission": "manual" },
{ "carModel": "Mercedes", "price": 20000, "color": "yellow" },
{ "carModel": "Porsche", "price": 30000, "color": "green" }
]
2 changes: 1 addition & 1 deletion test/index.js
Expand Up @@ -74,7 +74,7 @@ async.parallel(loadFixtures(csvFixtures), function (err) {
test('should parse json to csv', function (t) {
json2csv({
data: jsonDefault,
fields: ['carModel', 'price', 'color']
fields: ['carModel', 'price', 'color', 'transmission']
}, function (error, csv) {
t.error(error);
t.equal(csv, csvFixtures.default);
Expand Down

0 comments on commit c436942

Please sign in to comment.