[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
+[![build status](https://secure.travis-ci.org/stephenhandley/requireindex.png)](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