Skip to content

Commit

Permalink
DicConfigLoader: loadConfig dic as param
Browse files Browse the repository at this point in the history
  • Loading branch information
matuszeman committed Mar 28, 2017
1 parent 1125f0f commit 2c09e17
Show file tree
Hide file tree
Showing 6 changed files with 25 additions and 29 deletions.
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -162,28 +162,28 @@ Config loader - sets up Dic from the config (plain object)
**Kind**: global class

* [DicConfigLoader](#DicConfigLoader)
* [new DicConfigLoader(dic, opts)](#new_DicConfigLoader_new)
* [.loadConfig(config)](#DicConfigLoader+loadConfig)
* [new DicConfigLoader(opts)](#new_DicConfigLoader_new)
* [.loadConfig(dic, config)](#DicConfigLoader+loadConfig)

<a name="new_DicConfigLoader_new"></a>

### new DicConfigLoader(dic, opts)
### new DicConfigLoader(opts)

| Param | Type | Description |
| --- | --- | --- |
| dic | <code>[Dic](#Dic)</code> | |
| opts | <code>Object</code> | |
| opts.optionsSuffix | <code>string</code> | What suffix to use for "options" config. See: [loadConfig](#DicConfigLoader+loadConfig) |

<a name="DicConfigLoader+loadConfig"></a>

### dicConfigLoader.loadConfig(config)
### dicConfigLoader.loadConfig(dic, config)
Set up Dic according the config

**Kind**: instance method of <code>[DicConfigLoader](#DicConfigLoader)</code>

| Param | Type | Description |
| --- | --- | --- |
| dic | <code>[Dic](#Dic)</code> | |
| config | <code>Object</code> | |
| [config.options] | <code>Object</code> | Create plain object "option" instances |
| [config.aliases] | <code>Object</code> | Create aliases |
Expand Down
20 changes: 9 additions & 11 deletions es5/dic-config-loader.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,19 +12,17 @@ var _ = require('lodash');

var DicConfigLoader = function () {
/**
* @param {Dic} dic
* @param {Object} opts
* @param {string} opts.optionsSuffix What suffix to use for "options" config. See: {@link DicConfigLoader#loadConfig}
*/
function DicConfigLoader(dic) {
var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
function DicConfigLoader() {
var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};

_classCallCheck(this, DicConfigLoader);

this.options = _.defaults(opts, {
optionsSuffix: 'Opts'
});
this.dic = dic;
}

/**
Expand All @@ -48,6 +46,7 @@ var DicConfigLoader = function () {
* }
* }
*
* @param {Dic} dic
* @param {Object} config
* @param {Object} [config.options] Create plain object "option" instances
* @param {Object} [config.aliases] Create aliases
Expand All @@ -57,25 +56,24 @@ var DicConfigLoader = function () {

_createClass(DicConfigLoader, [{
key: 'loadConfig',
value: function loadConfig(config) {
value: function loadConfig(dic, config) {
var _this = this;

_.each(config.options, function (opts, service) {
_this.dic.registerInstance(service + _this.options.optionsSuffix, opts);
dic.instance(service + _this.options.optionsSuffix, opts);
});

_.each(config.aliases, function (alias, service) {
_this.dic.alias(alias, service);
dic.alias(alias, service);
});

_.each(config.bindings, function (binding, containerName) {
var child = _this.dic.getChild(containerName);
var child = dic.getChild(containerName);

var loader = new DicConfigLoader(_this.options, child);
loader.loadConfig(binding);
_this.loadConfig(child, binding);

_.each(binding.imports, function (dicService, childService) {
_this.dic.alias(dicService, containerName + _this.dic.options.containerSeparator + childService);
dic.alias(dicService, containerName + dic.options.containerSeparator + childService);
});
});
}
Expand Down
2 changes: 1 addition & 1 deletion es5/dic.js
Original file line number Diff line number Diff line change
Expand Up @@ -599,6 +599,7 @@ var Dic = function () {
}, {
key: 'alias',
value: function alias(name, _alias) {
this.log('aliasing "' + _alias + '" -> "' + name + '"'); //XXX
if (!this.has(name)) {
this.throwError('Service "' + name + '" is not registered');
}
Expand All @@ -607,7 +608,6 @@ var Dic = function () {
}
var serviceLoc = this.findContainer(name);
var destLoc = this.findContainer(_alias);
this.log('aliasing "' + _alias + '" -> "' + name + '"'); //XXX
destLoc.container.instances[destLoc.name] = serviceLoc.container.instances[serviceLoc.name];
}

Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "bb-dic",
"version": "0.5.1",
"version": "0.6.0",
"description": "A dependency injection container",
"main": "src/index.js",
"scripts": {
Expand Down
18 changes: 8 additions & 10 deletions src/dic-config-loader.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,13 @@ const _ = require('lodash');
*/
class DicConfigLoader {
/**
* @param {Dic} dic
* @param {Object} opts
* @param {string} opts.optionsSuffix What suffix to use for "options" config. See: {@link DicConfigLoader#loadConfig}
*/
constructor(dic, opts = {}) {
constructor(opts = {}) {
this.options = _.defaults(opts, {
optionsSuffix: 'Opts'
});
this.dic = dic;
}

/**
Expand All @@ -37,28 +35,28 @@ class DicConfigLoader {
* }
* }
*
* @param {Dic} dic
* @param {Object} config
* @param {Object} [config.options] Create plain object "option" instances
* @param {Object} [config.aliases] Create aliases
* @param {Object} [config.bindings] Set up bind Dic
*/
loadConfig(config) {
loadConfig(dic, config) {
_.each(config.options, (opts, service) => {
this.dic.registerInstance(service + this.options.optionsSuffix, opts);
dic.instance(service + this.options.optionsSuffix, opts);
});

_.each(config.aliases, (alias, service) => {
this.dic.alias(alias, service);
dic.alias(alias, service);
});

_.each(config.bindings, (binding, containerName) => {
const child = this.dic.getChild(containerName);
const child = dic.getChild(containerName);

const loader = new DicConfigLoader(this.options, child);
loader.loadConfig(binding);
this.loadConfig(child, binding);

_.each(binding.imports, (dicService, childService) => {
this.dic.alias(dicService, containerName + this.dic.options.containerSeparator + childService);
dic.alias(dicService, containerName + dic.options.containerSeparator + childService);
});
});
}
Expand Down
2 changes: 1 addition & 1 deletion src/dic.js
Original file line number Diff line number Diff line change
Expand Up @@ -446,6 +446,7 @@ class Dic {
* @param {String} alias Alias
*/
alias(name, alias) {
this.log(`aliasing "${alias}" -> "${name}"`);//XXX
if (!this.has(name)) {
this.throwError(`Service "${name}" is not registered`);
}
Expand All @@ -454,7 +455,6 @@ class Dic {
}
const serviceLoc = this.findContainer(name);
const destLoc = this.findContainer(alias);
this.log(`aliasing "${alias}" -> "${name}"`);//XXX
destLoc.container.instances[destLoc.name] = serviceLoc.container.instances[serviceLoc.name];
}

Expand Down

0 comments on commit 2c09e17

Please sign in to comment.