Skip to content

Commit

Permalink
more tests;add parse options to dsv readers
Browse files Browse the repository at this point in the history
  • Loading branch information
mhkeller committed Oct 10, 2016
1 parent 977194a commit b79c0bd
Show file tree
Hide file tree
Showing 2 changed files with 520 additions and 161 deletions.
163 changes: 127 additions & 36 deletions lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -73,10 +73,19 @@ var parsers = {
readOptions = readOptions || {}
return jsonParser(str, readOptions.reviver, readOptions.filename)
},
csv: dsv.csvParse,
tsv: dsv.tsvParse,
psv: dsv.dsvFormat('|').parse,
txt: _.identity, // Because we pass `utf-8` in to `readFile` and `readFileSync`, our data object is going to be a string, so we can simply return it,
csv: function (str, readOptions) {
return dsv.csvParse(str, readOptions)
},
tsv: function (str, readOptions) {
return dsv.tsvParse(str, readOptions)
},
psv: function (str, readOptions) {
return dsv.dsvFormat('|').parse(str, readOptions)
},
txt: function (str, readOptions) {
readOptions = readOptions || function (d) { return d }
return readOptions(str)
},
yaml: yamlParser.load,
aml: archieml.load
}
Expand Down Expand Up @@ -536,7 +545,7 @@ var readers = {}
readers.readData = function (path, opts_, cb_) {
var cb = arguments[arguments.length - 1]
var parser
var readOptions = {}
var readOptions
if (arguments.length === 3) {
readOptions = opts_.readOptions
parser = getParser(opts_.parser)
Expand All @@ -547,12 +556,22 @@ readers.readData = function (path, opts_, cb_) {
if (helpers.discernFormat(path) === 'json' && data === '') {
data = '[]'
}
if (_.isFunction(parser)) {
cb(err, parser(data, readOptions))
} else if (_.isObject(parser) && _.isFunction(parser.parse)) {
cb(err, parser.parse(data, readOptions))
} else {
cb('Your specified parser is not properly formatted. It must either be a function or have a `parse` method.')
if (err) {
cb(err)
return false
}
var parsed
try {
if (_.isFunction(parser)) {
parsed = parser(data, readOptions)
} else if (_.isObject(parser) && _.isFunction(parser.parse)) {
parsed = parser.parse(data, readOptions)
} else {
parsed = 'Your specified parser is not properly formatted. It must either be a function or have a `parse` method.'
}
cb(null, parsed)
} catch (err) {
cb(err)
}
})
}
Expand Down Expand Up @@ -694,8 +713,14 @@ var shorthandReaders = {}
* })
*
*/
shorthandReaders.readCsv = function (path, cb) {
readers.readData(path, {parser: parsers.csv}, cb)
shorthandReaders.readCsv = function (path, opts_, cb) {
var readOptions
if (typeof cb === 'undefined') {
cb = opts_
} else {
readOptions = opts_.readOptions
}
readers.readData(path, {parser: parsers.csv, readOptions: readOptions}, cb)
}

/**
Expand All @@ -718,7 +743,6 @@ shorthandReaders.readCsv = function (path, cb) {
* return row
* })
* console.log(data) // Json data with casted values
*
*/
shorthandReaders.readCsvSync = function (path, opts_) {
var readOptions
Expand Down Expand Up @@ -758,13 +782,11 @@ shorthandReaders.readCsvSync = function (path, opts_) {
* }, function (err, data) {
* console.log(data) // Json data with any number values multiplied by two
* })
*
*/
shorthandReaders.readJson = function (path, opts_, cb) {
var readOptions
if (typeof cb === 'undefined') {
cb = opts_
readOptions = {}
} else {
readOptions = opts_.readOptions
}
Expand Down Expand Up @@ -798,7 +820,6 @@ shorthandReaders.readJson = function (path, opts_, cb) {
* })
*
* console.log(data) // Json data with any number values multiplied by two
*
*/
shorthandReaders.readJsonSync = function (path, opts_) {
var readOptions
Expand All @@ -812,16 +833,34 @@ shorthandReaders.readJsonSync = function (path, opts_) {
* Asynchronously read a tab-separated value file.
*
* @param {String} fileName the name of the file
* @param {Object} [options] Optional options, see below
* @param {Function} [options.readOptions] A conversion called once for each row (header row skipped). See example or d3-dsv documentation for details.
* @param {Function} callback callback used when read data is read, takes error (if any) and the data read
*
* @example
* io.readTsv('path/to/data.tsv', function (err, data) {
* console.log(data) // Json data
* })
*
* // Transform values on load
* io.readTsv('path/to/data.tsv', {
* readOptions: function (row, i, columns)
* console.log(columns) // [ 'name', 'occupation', 'height' ]
* row.height = +row.height // Convert this value to a number
* return row
* }
* }, function (err, data) {
* console.log(data) // Json data with casted values
* })
*/
shorthandReaders.readTsv = function (path, cb) {
readers.readData(path, {parser: parsers.tsv}, cb)
shorthandReaders.readTsv = function (path, opts_, cb) {
var readOptions
if (typeof cb === 'undefined') {
cb = opts_
} else {
readOptions = opts_.readOptions
}
readers.readData(path, {parser: parsers.tsv, readOptions: readOptions}, cb)
}

/**
Expand All @@ -834,9 +873,21 @@ shorthandReaders.readTsv = function (path, cb) {
* var data = io.readTsvSync('path/to/data.tsv')
* console.log(data) // Json data
*
* // Transform values on load
* var data = io.readTsvSync('path/to/data.tsv', {
* readOptions: function (row, i, columns)
* console.log(columns) // [ 'name', 'occupation', 'height' ]
* row.height = +row.height // Convert this value to a number
* return row
* })
* console.log(data) // Json data with casted values
*/
shorthandReaders.readTsvSync = function (path) {
return readers.readDataSync(path, {parser: parsers.tsv})
shorthandReaders.readTsvSync = function (path, opts_) {
var readOptions
if (_.isObject(opts_) && opts_.readOptions) {
readOptions = opts_.readOptions
}
return readers.readDataSync(path, {parser: parsers.tsv, readOptions: readOptions})
}

/**
Expand All @@ -851,8 +902,14 @@ shorthandReaders.readTsvSync = function (path) {
* })
*
*/
shorthandReaders.readPsv = function (path, cb) {
readers.readData(path, {parser: parsers.psv}, cb)
shorthandReaders.readPsv = function (path, opts_, cb) {
var readOptions
if (typeof cb === 'undefined') {
cb = opts_
} else {
readOptions = opts_.readOptions
}
readers.readData(path, {parser: parsers.psv, readOptions: readOptions}, cb)
}

/**
Expand All @@ -866,8 +923,12 @@ shorthandReaders.readPsv = function (path, cb) {
* console.log(data) // Json data
*
*/
shorthandReaders.readPsvSync = function (path) {
return readers.readDataSync(path, {parser: parsers.psv})
shorthandReaders.readPsvSync = function (path, opts_) {
var readOptions
if (_.isObject(opts_) && opts_.readOptions) {
readOptions = opts_.readOptions
}
return readers.readDataSync(path, {parser: parsers.psv, readOptions: readOptions})
}

/**
Expand All @@ -882,8 +943,14 @@ shorthandReaders.readPsvSync = function (path) {
* })
*
*/
shorthandReaders.readTxt = function (path, cb) {
readers.readData(path, {parser: parsers.txt}, cb)
shorthandReaders.readTxt = function (path, opts_, cb) {
var readOptions
if (typeof cb === 'undefined') {
cb = opts_
} else {
readOptions = opts_.readOptions
}
readers.readData(path, {parser: parsers.txt, readOptions: readOptions}, cb)
}

/**
Expand All @@ -897,8 +964,12 @@ shorthandReaders.readTxt = function (path, cb) {
* console.log(data) // string data
*
*/
shorthandReaders.readTxtSync = function (path) {
return readers.readDataSync(path, {parser: parsers.txt})
shorthandReaders.readTxtSync = function (path, opts_) {
var readOptions
if (_.isObject(opts_) && opts_.readOptions) {
readOptions = opts_.readOptions
}
return readers.readDataSync(path, {parser: parsers.txt, readOptions: readOptions})
}

/**
Expand All @@ -914,8 +985,14 @@ shorthandReaders.readTxtSync = function (path) {
* })
*
*/
shorthandReaders.readYaml = function (path, cb) {
readers.readData(path, {parser: parsers.yaml}, cb)
shorthandReaders.readYaml = function (path, opts_, cb) {
var readOptions
if (typeof cb === 'undefined') {
cb = opts_
} else {
readOptions = opts_.readOptions
}
readers.readData(path, {parser: parsers.yaml, readOptions: readOptions}, cb)
}

/**
Expand All @@ -930,8 +1007,12 @@ shorthandReaders.readYaml = function (path, cb) {
* console.log(data) // json data
*
*/
shorthandReaders.readYamlSync = function (path) {
return readers.readDataSync(path, {parser: parsers.yaml})
shorthandReaders.readYamlSync = function (path, opts_) {
var readOptions
if (_.isObject(opts_) && opts_.readOptions) {
readOptions = opts_.readOptions
}
return readers.readDataSync(path, {parser: parsers.yaml, readOptions: readOptions})
}

/**
Expand All @@ -946,8 +1027,14 @@ shorthandReaders.readYamlSync = function (path) {
* })
*
*/
shorthandReaders.readAml = function (path, cb) {
readers.readData(path, {parser: parsers.aml}, cb)
shorthandReaders.readAml = function (path, opts_, cb) {
var readOptions
if (typeof cb === 'undefined') {
cb = opts_
} else {
readOptions = opts_.readOptions
}
readers.readData(path, {parser: parsers.aml, readOptions: readOptions}, cb)
}

/**
Expand All @@ -961,7 +1048,11 @@ shorthandReaders.readAml = function (path, cb) {
* console.log(data) // json data
*
*/
shorthandReaders.readAmlSync = function (path) {
shorthandReaders.readAmlSync = function (path, opts_) {
var readOptions
if (_.isObject(opts_) && opts_.readOptions) {
readOptions = opts_.readOptions
}
return readers.readDataSync(path, {parser: parsers.aml})
}

Expand Down

0 comments on commit b79c0bd

Please sign in to comment.