Skip to content

Commit

Permalink
refactor, make all readers delegate to readData + params
Browse files Browse the repository at this point in the history
  • Loading branch information
mhkeller committed Sep 14, 2015
1 parent 8f63711 commit 33e8cb6
Showing 1 changed file with 43 additions and 26 deletions.
69 changes: 43 additions & 26 deletions lib/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,9 @@ helpers.discernFormat = function (fileName) {
* var json = parser('path/to/data.csv');
*/
helpers.discernParser = function (fileName, delimiter) {
if (delimiter) return dsv.dsv(delimiter)
if (delimiter) {
return dsv.dsv(delimiter)
}
var format = helpers.discernFormat(fileName)
var parser = parsers[format]
// If we don't have a parser for this format, notify the user and return as text
Expand Down Expand Up @@ -202,6 +204,20 @@ helpers.matches = function (fileName, matcher) {
}
}

// Our `readData` fns can take either a delimiter to parse a file, or a full blown parser
// Determine what they passed in with this handy function
function getDelimiterOrParser (delimiterOrParser) {
var delimiter
var parser
if (typeof delimiterOrParser === 'string') {
delimiter = delimiterOrParser
parser = helpers.discernParser(null, delimiter)
} else if (_.isObject(delimiterOrParser)) {
parser = delimiterOrParser
}
return parser
}

/** @namespace */
var readers = {}

Expand All @@ -227,11 +243,16 @@ var readers = {}
* })
*
*/
readers.readData = function (path, delimiter_, cb_) {
readers.readData = function (path, delimiterOrParser_, cb_) {
var cb = arguments[arguments.length - 1]
var delimiter = arguments.length === 3 ? delimiter : false
var parser
if (arguments.length === 3) {
parser = getDelimiterOrParser(delimiterOrParser_)
} else {
parser = helpers.discernParser(path)
}
fs.readFile(path, 'utf8', function (err, data) {
cb(err, helpers.discernParser(path, delimiter).parse(data))
cb(err, parser.parse(data))
})
}

Expand All @@ -247,8 +268,14 @@ readers.readData = function (path, delimiter_, cb_) {
* console.log(data) // Json data
*
*/
readers.readDataSync = function (path, delimiter) {
return helpers.discernParser(path, delimiter).parse(fs.readFileSync(path, 'utf8'))
readers.readDataSync = function (path, delimiterOrParser_) {
var parser
if (arguments.length === 2) {
parser = getDelimiterOrParser(delimiterOrParser_)
} else {
parser = helpers.discernParser(path)
}
return parser.parse(fs.readFileSync(path, 'utf8'))
}

/**
Expand All @@ -264,9 +291,7 @@ readers.readDataSync = function (path, delimiter) {
*
*/
readers.readCsv = function (path, cb) {
fs.readFile(path, 'utf8', function (err, data) {
cb(err, parsers.csv.parse(data))
})
readers.readData(path, parsers.csv, cb)
}

/**
Expand All @@ -281,7 +306,7 @@ readers.readCsv = function (path, cb) {
*
*/
readers.readCsvSync = function (path) {
return parsers.csv.parse(fs.readFileSync(path, 'utf8'))
return readers.readDataSync(path, parsers.csv)
}

/**
Expand All @@ -297,9 +322,7 @@ readers.readCsvSync = function (path) {
*
*/
readers.readJson = function (path, cb) {
fs.readFile(path, function (err, data) {
cb(err, parsers.json.parse(data))
})
readers.readData(path, parsers.json, cb)
}

/**
Expand All @@ -314,7 +337,7 @@ readers.readJson = function (path, cb) {
*
*/
readers.readJsonSync = function (path) {
return parsers.json.parse(fs.readFileSync(path))
return readers.readDataSync(path, parsers.json)
}

/**
Expand All @@ -330,9 +353,7 @@ readers.readJsonSync = function (path) {
*
*/
readers.readTsv = function (path, cb) {
fs.readFile(path, 'utf8', function (err, data) {
cb(err, parsers.tsv.parse(data))
})
readers.readData(path, parsers.tsv, cb)
}

/**
Expand All @@ -347,7 +368,7 @@ readers.readTsv = function (path, cb) {
*
*/
readers.readTsvSync = function (path) {
return parsers.tsv.parse(fs.readFileSync(path, 'utf8'))
return readers.readDataSync(path, parsers.tsv)
}

/**
Expand All @@ -363,9 +384,7 @@ readers.readTsvSync = function (path) {
*
*/
readers.readPsv = function (path, cb) {
fs.readFile(path, 'utf8', function (err, data) {
cb(err, parsers.psv.parse(data))
})
readers.readData(path, parsers.psv, cb)
}

/**
Expand All @@ -380,7 +399,7 @@ readers.readPsv = function (path, cb) {
*
*/
readers.readPsvSync = function (path) {
return parsers.psv.parse(fs.readFileSync(path, 'utf8'))
return readers.readDataSync(path, parsers.psv)
}

/**
Expand All @@ -396,9 +415,7 @@ readers.readPsvSync = function (path) {
*
*/
readers.readTxt = function (path, cb) {
fs.readFile(path, 'utf8', function (err, data) {
cb(err, parsers.txt.parse(data))
})
readers.readData(path, parsers.txt, cb)
}

/**
Expand All @@ -413,7 +430,7 @@ readers.readTxt = function (path, cb) {
*
*/
readers.readTxtSync = function (path) {
return parsers.txt.parse(fs.readFileSync(path, 'utf8'))
return readers.readDataSync(path, parsers.txt)
}

/**
Expand Down

0 comments on commit 33e8cb6

Please sign in to comment.