[Pkg-javascript-commits] [node-requireindex] 01/02: Imported Upstream version 1.1.0
Andrew Kelley
andrewrk-guest at moszumanska.debian.org
Tue Jul 1 00:26:50 UTC 2014
This is an automated email from the git hooks/post-receive script.
andrewrk-guest pushed a commit to branch master
in repository node-requireindex.
commit c21ecd33ec72a297e6ef6161b037459ea5054e97
Author: Andrew Kelley <superjoe30 at gmail.com>
Date: Tue Jul 1 00:23:16 2014 +0000
Imported Upstream version 1.1.0
---
.gitignore | 1 +
.travis.yml | 3 ++
README.md | 90 ++++++++++++++++++++++++++++++++++++++
index.js | 59 +++++++++++++++++++++++++
package.json | 33 ++++++++++++++
test/lib/.also_private/private.txt | 1 +
test/lib/Foo.js | 4 ++
test/lib/_private.js | 3 ++
test/lib/bam.js | 4 ++
test/lib/bar/f.js | 3 ++
test/lib/bar/fed/again.js | 3 ++
test/lib/bar/fed/ignored.js | 3 ++
test/lib/bar/fed/index.js | 1 +
test/lib/bar/fed/somemore.js | 3 ++
test/lib/bar/fing.js | 3 ++
test/lib/bar/index.js | 1 +
test/lib/index.js | 1 +
test/lib/not_javascript.txt | 1 +
test/test.js | 43 ++++++++++++++++++
19 files changed, 260 insertions(+)
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..b512c09
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+node_modules
\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..20fd86b
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,3 @@
+language: node_js
+node_js:
+ - 0.10
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..f0dd71c
--- /dev/null
+++ b/README.md
@@ -0,0 +1,90 @@
+# Description
+
+Write minimal node index.js files that require and export siblings by file basename
+
+# Latest Version
+
+1.1.0
+
+# Installation
+```
+npm install requireindex
+```
+
+or in package.json
+
+```json
+{
+ ...
+ "dependencies": {
+ "requireindex": "1.1.x"
+ }
+}
+```
+
+# Usage
+Check the [test directory](https://github.com/stephenhandley/requireindex/tree/master/test) for example usage. The [test/lib](https://github.com/stephenhandley/requireindex/tree/master/test/lib) looks like:
+
+```
+lib/
+ index.js
+ Foo.js
+ bar/
+ index.js
+ f.js
+ fing.js
+ fed/
+ again.js
+ ignored.js
+ index.js
+ somemore.js
+ bam.js
+ _private.js
+
+```
+
+The index.js files in [test/lib/](https://github.com/stephenhandley/requireindex/tree/master/test/lib/index.js) and [test/lib/bar/](https://github.com/stephenhandley/requireindex/tree/master/test/lib/bar/index.js) contain:
+
+```js
+module.exports = require('requireindex')(__dirname);
+```
+
+and the index.js file in [test/lib/bar/fed/](https://github.com/stephenhandley/requireindex/tree/master/test/lib/bar/fed/index.js) contains:
+
+```js
+module.exports = require('requireindex')(__dirname, ['again', 'somemore']);
+```
+
+The optional second argument allows you to explicitly specify the required files using their basename. In this example [test/lib/bar/fed/ignored.js](https://github.com/stephenhandley/requireindex/tree/master/test/lib/bar/fed/ignored.js) is not included as a public module. The other way to make a module/file private without the need for explicitly naming all the other included files is to prefix the filename with an underscore, as demonstrated by [test/lib/_private.js](https://github.com/ [...]
+
+So, with these index.js files, the result of
+
+```js
+require('lib');
+```
+
+is:
+
+```js
+{
+ bam: {
+ m: [Function],
+ n: [Function]
+ },
+ bar: {
+ f: [Function],
+ fed: {
+ again: [Function],
+ somemore: [Function]
+ },
+ fing: [Function]
+ },
+ Foo: {
+ l: [Function],
+ ls: [Function]
+ }
+}
+```
+
+#Build status
+[](http://travis-ci.org/stephenhandley/requireindex)
\ No newline at end of file
diff --git a/index.js b/index.js
new file mode 100644
index 0000000..4e54750
--- /dev/null
+++ b/index.js
@@ -0,0 +1,59 @@
+var FS = require('fs');
+var Path = require('path');
+
+module.exports = function (dir, basenames) {
+ var requires = {};
+
+ if (arguments.length === 2) {
+ // if basenames argument is passed, explicitly include those files
+ basenames.forEach(function (basename) {
+ var filepath = Path.resolve(Path.join(dir, basename));
+ requires[basename] = require(filepath);
+ });
+
+ } else if (arguments.length === 1) {
+ // if basenames arguments isn't passed, require all javascript
+ // files (except for those prefixed with _) and all directories
+
+ var files = FS.readdirSync(dir);
+
+ // sort files in lowercase alpha for linux
+ files.sort(function (a,b) {
+ a = a.toLowerCase();
+ b = b.toLowerCase();
+
+ if (a < b) {
+ return -1;
+ } else if (b < a) {
+ return 1;
+ } else {
+ return 0;
+ }
+ });
+
+ files.forEach(function (filename) {
+ // ignore index.js and files prefixed with underscore and
+ if ((filename === 'index.js') || (filename[0] === '_') || (filename[0] === '.')) {
+ return;
+ }
+
+ var filepath = Path.resolve(Path.join(dir, filename));
+ var ext = Path.extname(filename);
+ var stats = FS.statSync(filepath);
+
+ // don't require non-javascript files (.txt .md etc.)
+ if (stats.isFile() && !(ext in require.extensions)) {
+ return;
+ }
+
+ var basename = Path.basename(filename, ext);
+
+ requires[basename] = require(filepath);
+ });
+
+ } else {
+ throw new Error("Must pass directory as first argument");
+ }
+
+ return requires;
+};
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..14dd084
--- /dev/null
+++ b/package.json
@@ -0,0 +1,33 @@
+{
+ "name": "requireindex",
+ "description": "Write minimal node index.js files that require and export siblings by file basename",
+ "version": "1.1.0",
+ "license": "MIT",
+ "main": "index.js",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/stephenhandley/requireindex.git"
+ },
+ "scripts": {
+ "test": "node test/test.js"
+ },
+ "keywords": [
+ "require",
+ "index",
+ "index.js"
+ ],
+ "directories": {
+ "test": "test"
+ },
+ "bugs": {
+ "url": "http://github.com/stephenhandley/requireindex/issues"
+ },
+ "engines": {
+ "node": ">=0.10.5"
+ },
+ "devDependencies": {
+ "asserts": "4.0.x"
+ },
+ "author": "Stephen Handley <stephen.handley at gmail.com> (http://person.sh)",
+ "homepage": "https://github.com/stephenhandley/requireindex"
+}
diff --git a/test/lib/.also_private/private.txt b/test/lib/.also_private/private.txt
new file mode 100644
index 0000000..9309ea8
--- /dev/null
+++ b/test/lib/.also_private/private.txt
@@ -0,0 +1 @@
+barf
\ No newline at end of file
diff --git a/test/lib/Foo.js b/test/lib/Foo.js
new file mode 100644
index 0000000..e4f95db
--- /dev/null
+++ b/test/lib/Foo.js
@@ -0,0 +1,4 @@
+module.exports = {
+ l: function() { return "yes"; },
+ ls: function() { return "yep"; }
+};
\ No newline at end of file
diff --git a/test/lib/_private.js b/test/lib/_private.js
new file mode 100644
index 0000000..e0ec6f0
--- /dev/null
+++ b/test/lib/_private.js
@@ -0,0 +1,3 @@
+module.exports = function() {
+ return "ack";
+}
\ No newline at end of file
diff --git a/test/lib/bam.js b/test/lib/bam.js
new file mode 100644
index 0000000..a2120bf
--- /dev/null
+++ b/test/lib/bam.js
@@ -0,0 +1,4 @@
+module.exports = {
+ m: function() { return "ok"; },
+ n: require('./_private')
+};
\ No newline at end of file
diff --git a/test/lib/bar/f.js b/test/lib/bar/f.js
new file mode 100644
index 0000000..4d87fae
--- /dev/null
+++ b/test/lib/bar/f.js
@@ -0,0 +1,3 @@
+module.exports = function() {
+ return "yea";
+}
\ No newline at end of file
diff --git a/test/lib/bar/fed/again.js b/test/lib/bar/fed/again.js
new file mode 100644
index 0000000..d348495
--- /dev/null
+++ b/test/lib/bar/fed/again.js
@@ -0,0 +1,3 @@
+module.exports = function() {
+ return "again";
+}
\ No newline at end of file
diff --git a/test/lib/bar/fed/ignored.js b/test/lib/bar/fed/ignored.js
new file mode 100644
index 0000000..b9f725f
--- /dev/null
+++ b/test/lib/bar/fed/ignored.js
@@ -0,0 +1,3 @@
+module.exports = function() {
+ return "ignored";
+}
\ No newline at end of file
diff --git a/test/lib/bar/fed/index.js b/test/lib/bar/fed/index.js
new file mode 100644
index 0000000..1664a19
--- /dev/null
+++ b/test/lib/bar/fed/index.js
@@ -0,0 +1 @@
+module.exports = require('../../../../')(__dirname, ['again', 'somemore'])
\ No newline at end of file
diff --git a/test/lib/bar/fed/somemore.js b/test/lib/bar/fed/somemore.js
new file mode 100644
index 0000000..b5e7a2c
--- /dev/null
+++ b/test/lib/bar/fed/somemore.js
@@ -0,0 +1,3 @@
+module.exports = function() {
+ return "somemore";
+}
\ No newline at end of file
diff --git a/test/lib/bar/fing.js b/test/lib/bar/fing.js
new file mode 100644
index 0000000..e953f28
--- /dev/null
+++ b/test/lib/bar/fing.js
@@ -0,0 +1,3 @@
+module.exports = function() {
+ return "definitely";
+}
\ No newline at end of file
diff --git a/test/lib/bar/index.js b/test/lib/bar/index.js
new file mode 100644
index 0000000..e7b4f97
--- /dev/null
+++ b/test/lib/bar/index.js
@@ -0,0 +1 @@
+module.exports = require('../../../')(__dirname)
\ No newline at end of file
diff --git a/test/lib/index.js b/test/lib/index.js
new file mode 100644
index 0000000..f76e34d
--- /dev/null
+++ b/test/lib/index.js
@@ -0,0 +1 @@
+module.exports = require('../../')(__dirname)
\ No newline at end of file
diff --git a/test/lib/not_javascript.txt b/test/lib/not_javascript.txt
new file mode 100644
index 0000000..a372663
--- /dev/null
+++ b/test/lib/not_javascript.txt
@@ -0,0 +1 @@
+asdf 1 2 / @ 123
\ No newline at end of file
diff --git a/test/test.js b/test/test.js
new file mode 100644
index 0000000..91386fb
--- /dev/null
+++ b/test/test.js
@@ -0,0 +1,43 @@
+var Assert = require('assert');
+var Asserts = require('asserts');
+
+Asserts(function () {
+ var lib = require('./lib');
+
+ return {
+ "requireindex should": {
+ "properly include files parallel to index.js and maintain structure": function () {
+ Asserts.all.equal([
+ [lib.bam.m, [], "ok"],
+ [lib.bar.f, [], "yea"],
+ [lib.bar.fing, [], 'definitely'],
+ [lib.Foo.l, [], 'yes'],
+ [lib.Foo.ls, [], 'yep'],
+ [lib.bam.n, [], 'ack'],
+ [lib.bar.fed.again, [], 'again'],
+ [lib.bar.fed.somemore, [], 'somemore']
+ ]);
+ },
+
+ "ignore _ prefixed files": function () {
+ Assert.equal(('_private' in lib), false);
+ },
+
+ "not include files not mentioned when second array argument is used": function () {
+ Assert.equal(('ignored' in lib.bar.fed), false);
+ },
+
+ "ignore non javascript files": function () {
+ Assert.equal(('not_javascript' in lib), false);
+ },
+
+ "sort files by lowercase alpha of the filename": function () {
+ Assert.equal(Object.keys(lib)[0], 'bam');
+ },
+
+ "ignore dot files": function () {
+ Assert.equal(('.also_private' in lib), false);
+ },
+ }
+ };
+});
\ No newline at end of file
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/node-requireindex.git
More information about the Pkg-javascript-commits
mailing list