0.4.0 • Published 11 years ago

xrequire v0.4.0

Weekly downloads
6
License
-
Repository
github
Last release
11 years ago

XREQUIRE

XREQUIRE is your index.js folder loader swiss army knife.

$ npm install xrequire --save

Obligatory feature checklist (and API documentation all in one):

  • Implement your index.js in a single line:
require('xrequire')(module)
  • Or the more common style found with other libs:
module.exports = require('xrequire')(__dirname)
  • Post-process modules on the fly by passing a map function:
require('xrequire')(module, function(exports, name, basename) {

  // hidden base class
  function Base() { }
  Base.prototype = new Object();

  // inject base class and other shared dependencies
  return exports(Base, require('underscore'), require('async'));

});
  • Filters module by passing a filter function:
require('xrequire')(module,
  { filter:
    function(name) {
      return name[0] !== '_'; // modules with _ prefix should be hidden
    }
  }
);
  • Or reject works too:
require('xrequire')(module,
  { reject:
    function(name) {
      return name[0] === '_'; // modules with _ prefix should be hidden
    }
  }
);
  • Append (or prepend) a namespace-specific name to your classes without having long filenames:
// assume we have roles/admin.js roles/staff.js and roles/guest.js
// we'll get adminRole, staffRole and guestRole exports

require('xrequire')(module, { append: 'Role' });
  • Transform your file names into ClassNames dasherized-name or even "Titleized Long Strings Keys" via an integrated pksunkara/inflect hook:
require('xrequire')(module, { inflect: 'classify' }); // or ...
require('xrequire')(module, { inflect: 'dasherize' }); // or ...
require('xrequire')(module, { inflect: 'titleize' }); // or ...
// other i.hooks works too.
  • The last two options together provide some nice naming capability out of the box:
require('xrequire')(module, { inflect: 'classify', append: 'Role' })

// assume we have roles/admin.js roles/staff.js and roles/guest.js
// we'll get AdminRole, StaffRole and GuestRole all neat and clean :)
  • Implemented in pure JS with 100% test coverage (yeah, there wasn't much to be tested anyway.)
$ make cover

OPTIONS

{ filter: null  // function : return true to include only wanted modules
, reject: null  // function : return true to reject only select modules
, map: null     // function : transform module exports before re-exporting it

, prepend: ''   // string   : prepend to module names before exported
, append: ''    // string   : append to module names before exported
, inflect: ''   // string   : name of inflection method to use
, magic: true   // boolean  : set to false to prevent module.exports magic
}

DEVELOPMENT

Test xrequire by running

$ make test

and generate coverage reports by running

$ make cover

Things to do:

  • Subfolder requires.
  • Support for folder requires without needing to implement index.js.
  • More inflection tests and validation.
  • Direct name transform function.

LICENSE

BSD

SUPPORT

Just open a GitHub issue or ping me on twitter @chakrit

0.4.0

11 years ago

0.3.0

11 years ago

0.2.1

11 years ago

0.2.0

11 years ago

0.1.1

11 years ago

0.1.0

11 years ago