Skip to content

Commit

Permalink
Updated README
Browse files Browse the repository at this point in the history
  • Loading branch information
Tim Voronov committed Mar 28, 2016
1 parent 0a05819 commit c9ce2b3
Show file tree
Hide file tree
Showing 21 changed files with 13,338 additions and 13,172 deletions.
97 changes: 69 additions & 28 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# namespaces

Angular-flavored dependency injection container.
Angular-flavored DI container.

[![npm version](https://badge.fury.io/js/namespaces-js.svg)](https://www.npmjs.com/package/namespaces-js)
[![Bower version](https://badge.fury.io/bo/namespaces-js.svg)](http://badge.fury.io/bo/namespaces-js)
Expand Down Expand Up @@ -30,47 +30,52 @@ via bower
```javascript

var Container = require('namespaces-js');
var container = new Container();

container.value('settings', settings);
container.namespace('services/infrastructure').service('http', require('http'));
container.namespace('services/external/api').factory('users', ['settings', 'services/infrastructure/http'], (settings, http) => {
return new UsersApi(settings.api, http);
});
container.namespace('services/business').service('users', ['services/external/api/users'], UsersService);

container.factory('a', () => 'a');
container.factory('b', ['a'] (a) => a + 'b');

var usersServiceInstance = container.resolve('services/business/users');
const b = container.resolve('b'); // -> 'ab'
const a = container.resolve('a'); // -> 'a'

```

### Namespaces

#### Basic

```javascript

var Container = require('namespaces-js');
var container = new Container();

container.namespace('a').value('foo', 'bar');
container.namespace('b').service('foo', function Bar() { this.name = 'bar'; });
container.namespace('c/d').factory('foo', () => 'bar');

var container = new Container();
container.namespace('models').value('user', require('./models/user');
container.namespace('services').service('user', require('./services/user');
container.namespace('core/infrastructure').service('logger', require('logger'));
const aFoo = container.resolve('a/foo'); // -> 'bar'
const bFoo = container.resolve('b/foo'); // -> instance of Bar
const cdFoo = container.resolve('c/d/foo'); // -> 'bar'

...
```

var userService = container.resolve('services/user');
var userInstance = container.resolve('models/user');
var logger = container.resolve('core/infrastructure/logger');
Also, you can define custom namespace separator:

```javascript

var Container = require('namespaces-js');
var container = new Container('.');

container.namespace('a.b.c').value('foo', 'bar');
container.namespace('d.e.f').service('foo', function Bar() { this.name = 'bar'; });

```

#### Modular

```javascript

var Container = require('namespaces-js');
var Container = require('namespaces-js');
var container = new Container();

var container = new Container();
var ui = container.namespace('ui');
var actions = ui.namespace('actions');
actions.service('user', require('./ui/flux/actions/user'));
Expand All @@ -81,13 +86,27 @@ via bower

```

### Custom resolving
### Resolving
#### Basic

````javascript

var Container = require('namespaces-js');
var container = new Container();

container.value('foo', 'bar');

const foo = container.resolve('foo'); // -> 'bar'

````

#### Group

````javascript

var Container = require('namespaces-js');
var container = new Container();

var services = container.namespace('services');
services.service('users', UsersService);
services.service('accounts', AccountsService);
Expand All @@ -100,20 +119,42 @@ via bower

````

#### Custom

````javascript

var Container = require('namespaces-js');
var container = new Container();

container.factory('a', () => 'a');
container.factory('b', [
'a',
function customResolver() {
return { foo: 'bar' };
}
], (a, c) => [a, c]);

````


### Namespace Helper

````javascript

var namespaces = Container.map({
settings: 'settings',
services: ['core', 'domain']
a: 'b',
c: ['d', 'e', { f: ['g', 'h'] }]
});

var container = new Container();

container.namespace(namespaces.settings()).const('settings', { apiEndpoint: '/' });
container.namespace(namespaces.services.core()).service('database', require('./db-manager'));
container.namespace(namespaces.services.domain()).service('account', require('./acount-service'));
container.namespace(namespaces.a()).value('foo', 'bar');
container.namespace(namespaces.b()).factory('foo', () => 'bar');
container.namespace(namespaces.c()).factory('foo', () => 'bar');
container.namespace(namespaces.c.f.g()).value('foo', 'bar');

container.resolve(namespaces.a('foo'));
container.resolve(namespaces.c.f.g('foo'));

````

Expand Down Expand Up @@ -152,7 +193,7 @@ Any function's value will be registered as a singleton.
Returns name of current namespace.

### Container.map
Helper function that converts object / array to chain of functions.
Helper function that converts object / array to chain of functions in order to easily use namespace paths.

### License

Expand Down
26 changes: 15 additions & 11 deletions dist/namespaces.js
Original file line number Diff line number Diff line change
Expand Up @@ -179,8 +179,6 @@ Object.defineProperty(exports, "__esModule", {

var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();

var _utils = require('./utils');

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

/**
Expand Down Expand Up @@ -248,11 +246,7 @@ var Module = function () {
throw new Error('Module is not initialized!');
}

if ((0, _utils.isFunction)(this._value)) {
return this._value();
}

return this._value;
return this._value();
}

/**
Expand Down Expand Up @@ -288,7 +282,7 @@ var Module = function () {

exports.default = Module;

},{"./utils":8}],5:[function(require,module,exports){
},{}],5:[function(require,module,exports){
'use strict';

Object.defineProperty(exports, "__esModule", {
Expand Down Expand Up @@ -396,7 +390,9 @@ var Namespace = function () {
this._storage.addItem(new _module2.default(this._name, args.name, args.dependencies, function initialize(resolved) {
// instances, simple types
if (!(0, _utils.isFunction)(args.definition)) {
return args.definition;
return function factory() {
return args.definition;
};
}

return function factory() {
Expand Down Expand Up @@ -424,7 +420,11 @@ var Namespace = function () {
}

this._storage.addItem(new _module2.default(this._name, args.name, args.dependencies, function initialize(resolved) {
return (0, _utils.create)(args.definition, resolved);
var value = (0, _utils.create)(args.definition, resolved);

return function factory() {
return value;
};
}));
}

Expand All @@ -447,7 +447,11 @@ var Namespace = function () {
}

this._storage.addItem(new _module2.default(this._name, args.name, args.dependencies, function initialize(resolved) {
return args.definition.apply(args, _toConsumableArray(resolved));
var value = args.definition.apply(args, _toConsumableArray(resolved));

return function factory() {
return value;
};
}));
}
}]);
Expand Down

0 comments on commit c9ce2b3

Please sign in to comment.