diff options
| author | mo khan <mo@mokhan.ca> | 2016-12-24 13:31:00 -0700 |
|---|---|---|
| committer | mo khan <mo@mokhan.ca> | 2016-12-24 13:31:00 -0700 |
| commit | f2bf3163f2e37cfa653a8a04c3a7bde530f9b362 (patch) | |
| tree | 10ecf22b588937e479b38494abf646314bd6e0a1 /app | |
| parent | 63c2e0d43ed5c2e4f44bd3cd14f17a44936e12eb (diff) | |
trim extra spaces from component key.
Diffstat (limited to 'app')
| -rw-r--r-- | app/infrastructure/__tests__/registry_spec.js | 12 | ||||
| -rw-r--r-- | app/infrastructure/registry.js | 29 |
2 files changed, 30 insertions, 11 deletions
diff --git a/app/infrastructure/__tests__/registry_spec.js b/app/infrastructure/__tests__/registry_spec.js index ce94cb5..6343e46 100644 --- a/app/infrastructure/__tests__/registry_spec.js +++ b/app/infrastructure/__tests__/registry_spec.js @@ -27,7 +27,7 @@ describe("Registry", () => { expect(subject.resolve('item')).toBeInstanceOf(Item); }); - it ("resolves an instance with a dependency", function() { + it ("resolves an instance with a dependency", () => { subject.register('item', () => { return new Item() }); subject.register('dependent', (container) => { return new Dependent(container.resolve('item')); @@ -57,7 +57,7 @@ describe("Registry", () => { expect(result.item).toEqual(item); }) - it ("resolves constructor dependencies for a singleton", function() { + it ("resolves constructor dependencies for a singleton", () => { var item = new Item(); subject.register('item', () => item); subject.register('dependent', Dependent).asSingleton(); @@ -68,11 +68,17 @@ describe("Registry", () => { expect(result).toBe(other); }); - it ("resolves a constructor with zero dependencies", function() { + it ("resolves a constructor with zero dependencies", () => { subject.register('item', Item); expect(subject.resolve('item')).toBeInstanceOf(Item); }); + + it("raises an error when a component is not registered", () => { + expect(() => { + subject.resolve('unknown'); + }).toThrow(/"unknown" is not registered/); + }); }); describe("#resolveAll", () => { diff --git a/app/infrastructure/registry.js b/app/infrastructure/registry.js index 1241552..24a075e 100644 --- a/app/infrastructure/registry.js +++ b/app/infrastructure/registry.js @@ -23,15 +23,18 @@ export class Resolver { } resolveDependenciesUsing(container) { - let parameters = this.parseConstructor(this.factory).slice(2)[0].split(',').filter(Boolean); - let dependencies = parameters.map((parameter) => container.resolve(parameter)); + let ctor = this.parseConstructor(this.factory); + console.log(`Building: ${ctor[1]}`); + let parameters = ctor.slice(2)[0].split(',').filter(Boolean); + let dependencies = parameters.map((parameter) => { + return container.resolve(parameter.trim()); + }); return new this.factory(...dependencies); } } export class Registration { - constructor(key, factory) { - this.key = key; + constructor(factory) { this.factory = factory; } @@ -60,17 +63,27 @@ export default class Registry { if (this.registrations[key] == undefined) { this.registrations[key] = []; } - let registration = new Registration(key, factory); + let registration = new Registration(factory); this.registrations[key].push(registration); return registration; } + isRegistered(key) { + return this.registrations.hasOwnProperty(key); + } + resolve(key) { + if (!this.isRegistered(key)) { + throw `"${key}" is not registered`; + } + try { - return this.registrations[key][0].create(this); + let registration = this.registrations[key][0]; + return registration.create(this); } catch(error) { - console.error(`ERROR: Could Not Resolve ${key}`); - console.error(error); + console.error(`ERROR: Could not resolve "${key}" ${error}`); + console.log("REGISTERED:"); + console.log(this.registrations); throw error; } } |
