Skip to content

lifenautjoe/Container.js

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

46 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Container.js

An instance container for node.js.

Code ClimatedependenciesBuild Status

Motivation

Provide a reliable way to create (optionally, with default parameters), store and retrieve instances of a predefined constructor.

Installation

npm install container.js

Usage

Instantiation

On it's simplest form

var Container = require("container.js");

var constructorContainer = new Container(Constructor);

However a most likely desired usage will be the following

var Container = require("container.js");

var Constructor = function(){

};

Constructor.container = new Container(Constructor);

module.exports = Constructor;

for if the constructor module is exported and then required elsewhere, the container and it's items will be available as

var Constructor = require('constructor');

Constructor.container...

Default arguments

If you would like to define default arguments for all constructed instances which can be overridden/extended, it is possible to do so in two ways.

Traditional

Let

var Human = function(gender,country,favouriteColor){
	this.gender = gender;
	this.country = country;
	this.favouriteColor = favouriteColor;
};

module.exports = Human;

If your constructor accept one or multiple arguments as the previously defined Human constructor and not a single configuration object you can define your container default arguments as

// Instantiate the container with the Human constructor.
var container = new Container(Human);
// Set the default arguments
container.defaults = ['male','USA','yellow'];

And then whenever you add a new instance to your container as

container.add('paul');

The Human constructor will now be called with the 'male','USA','yellow' arguments .

Want to override your defaults ?

Call the add method with the individual instance arguments as

container.add('sarah','female','canada','pink');

Want to override just some of your defaults?

Call the add method with the individual instance arguments and undefined to use the default value for a parameter

container.add('carl',undefined,undefined,'green');

The Human constructor will now be called with the 'male','USA','green' arguments (we previously defined 'male','USA' as defaults)

Single configuration object

Let

var Alien = function(configuration){
	this.specie = configuration.specie;
	this.planet = configuration.planet;
	this.language = configuration.language;
};

module.exports = Alien;

If your constructor accepts single configuration object, you can define your container default arguments as

// Instantiate the container with the Alien constructor.
var container = new Container(Alien);
// Set the default arguments
container.defaults = {
	specie : 'wookie',
	planet : 'kashyyyk',
	language : 'shyriiwook'
};

And then whenever you add a new instance to your container as

container.add('chewbacca');

The Alien constructor will now be called with the configuration object

{
	specie : 'wookie',
	planet : 'kashyyyk',
	language : 'shyriiwook'
}

Want to override your defaults ?

Call the add method with the individual instance configuration object attributes as

container.add('han solo',{
	specie : 'human',
	planet : 'corellia',
	language : 'english'
});

Want to override just some of your defaults?

Call the add method with the individual instance configuration argument attributes omitting the attributes where the default value should be used

container.add('wicket',{
	specie : 'ewok'
});

The Alien constructor will now be called with the configuration object (we previously defined the planet and language defaults)

{
	specie : 'ewok',
	planet : 'kashyyyk',
	language : 'shyriiwook'
}

Adding an instance

// Returns the added instance
container.add(identifier,args...);

Retrieving an instance

// Returns the retrieved instance.
container.get(identifier);

Removing an instance

container.remove(identifier);

Checking for existence

// Returns a boolean.
container.has(identifier); // Returns a boolean

Installation

Installing npm (node package manager)

  curl http://npmjs.org/install.sh | sh

Installing Container.js

  [sudo] npm install container.js

Run Tests

All of the Container.js tests are written in jasmine, and designed to be run with npm.

  $ npm install --dev
  $ npm test

About

A dead-simple instance container for node.js.

Resources

Stars

Watchers

Forks

Packages

No packages published