From ddf0aa481fc62cdd8f909ae8fe1385d71783eff1 Mon Sep 17 00:00:00 2001 From: Douglas Christopher Wilson Date: Sun, 9 Nov 2014 20:30:00 -0500 Subject: [PATCH] Add the ability to "resolve" values closes #10 --- Readme.md | 15 +++++++++++++++ index.js | 10 ++++++++-- test/resolved/onearg.js | 3 +++ test/resolved/twoargs.js | 3 +++ test/test.js | 11 +++++++++++ 5 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 test/resolved/onearg.js create mode 100644 test/resolved/twoargs.js diff --git a/Readme.md b/Readme.md index fce0a7b..1fbb720 100644 --- a/Readme.md +++ b/Readme.md @@ -23,3 +23,18 @@ If your objective is to simply require all .js and .json files in a directory yo ``` js var libs = require('require-all')(__dirname + '/lib'); ``` + +## Constructed object usage + +If your directory contains files that all export constructors, you can require them all and automatically construct the objects using `resolve`: + +```js +var controllers = require('require-all')({ + dirname : __dirname + '/controllers', + filter : /(.+Controller)\.js$/, + excludeDirs : /^\.(git|svn)$/, + resolve : function (Controller) { + return new Controller(); + } +}); +``` diff --git a/index.js b/index.js index b7e1d04..0dd4f9c 100644 --- a/index.js +++ b/index.js @@ -11,6 +11,7 @@ module.exports = function requireAll(options) { var files = fs.readdirSync(options.dirname); var modules = {}; + var resolve = options.resolve || identity; function excludeDirectory(dirname) { return options.excludeDirs && dirname.match(options.excludeDirs); @@ -25,16 +26,21 @@ module.exports = function requireAll(options) { modules[file] = requireAll({ dirname: filepath, filter: options.filter, - excludeDirs: options.excludeDirs + excludeDirs: options.excludeDirs, + resolve: resolve }); } else { var match = file.match(options.filter); if (!match) return; - modules[match[1]] = require(filepath); + modules[match[1]] = resolve(require(filepath)); } }); return modules; }; + +function identity(val) { + return val; +} diff --git a/test/resolved/onearg.js b/test/resolved/onearg.js new file mode 100644 index 0000000..9a2d336 --- /dev/null +++ b/test/resolved/onearg.js @@ -0,0 +1,3 @@ +module.exports = function (arg1, arg2) { + return arg1; +} diff --git a/test/resolved/twoargs.js b/test/resolved/twoargs.js new file mode 100644 index 0000000..ad0451b --- /dev/null +++ b/test/resolved/twoargs.js @@ -0,0 +1,3 @@ +module.exports = function (arg1, arg2) { + return arg2; +} diff --git a/test/test.js b/test/test.js index 6c086c4..4ad4a2f 100644 --- a/test/test.js +++ b/test/test.js @@ -80,3 +80,14 @@ var excludedSvnAndSub = requireAll({ assert.equal(excludedSvnAndSub['.svn'], undefined); assert.ok(excludedSvnAndSub.root); assert.equal(excludedSvnAndSub.sub, undefined); + +var resolvedValues = requireAll({ + dirname: __dirname + '/resolved', + filter: /(.+)\.js$/, + resolve: function (fn) { + return fn('arg1', 'arg2'); + } +}); + +assert.equal(resolvedValues.onearg, 'arg1'); +assert.equal(resolvedValues.twoargs, 'arg2');