Skip to content

Commit a1c6f1b

Browse files
committed
refactor(Key): extract KeyRegistry to remove the need in Key.clear
1 parent 9448d78 commit a1c6f1b

2 files changed

Lines changed: 38 additions & 25 deletions

File tree

modules/di/src/key.js

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ import {KeyMetadataError} from './exceptions';
22
import {MapWrapper, Map} from 'facade/collection';
33
import {FIELD, int, isPresent} from 'facade/lang';
44

5-
var _allKeys = MapWrapper.create();
6-
75
export class Key {
86
@FIELD('final token')
97
@FIELD('final id:int')
@@ -14,18 +12,6 @@ export class Key {
1412
this.metadata = null;
1513
}
1614

17-
static get(token):Key {
18-
if (token instanceof Key) return token;
19-
20-
if (MapWrapper.contains(_allKeys, token)) {
21-
return MapWrapper.get(_allKeys, token);
22-
}
23-
24-
var newKey = new Key(token, Key.numberOfKeys);
25-
MapWrapper.set(_allKeys, token, newKey);
26-
return newKey;
27-
}
28-
2915
static setMetadata(key:Key, metadata):Key {
3016
if (isPresent(key.metadata) && key.metadata !== metadata) {
3117
throw new KeyMetadataError();
@@ -34,11 +20,36 @@ export class Key {
3420
return key;
3521
}
3622

37-
static clear() {
38-
_allKeys = MapWrapper.create();
23+
static get(token):Key {
24+
return _globalKeyRegistry.get(token);
3925
}
4026

4127
static get numberOfKeys():int {
42-
return MapWrapper.size(_allKeys);
28+
return _globalKeyRegistry.numberOfKeys;
4329
}
4430
}
31+
32+
export class KeyRegistry {
33+
@FIELD('final _allKeys:Map')
34+
constructor() {
35+
this._allKeys = MapWrapper.create();
36+
}
37+
38+
get(token):Key {
39+
if (token instanceof Key) return token;
40+
41+
if (MapWrapper.contains(this._allKeys, token)) {
42+
return MapWrapper.get(this._allKeys, token);
43+
}
44+
45+
var newKey = new Key(token, Key.numberOfKeys);
46+
MapWrapper.set(this._allKeys, token, newKey);
47+
return newKey;
48+
}
49+
50+
get numberOfKeys():int {
51+
return MapWrapper.size(this._allKeys);
52+
}
53+
}
54+
55+
var _globalKeyRegistry = new KeyRegistry();

modules/di/test/di/key_spec.js

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,37 @@
11
import {describe, it, expect, beforeEach} from 'test_lib/test_lib';
2-
import {Key} from 'di/di';
2+
import {Key, KeyRegistry} from 'di/di';
33

44
export function main() {
55
describe("key", function () {
6+
var registry;
7+
68
beforeEach(function () {
7-
Key.clear();
9+
registry = new KeyRegistry();
810
});
911

1012
it('should be equal to another key if type is the same', function () {
11-
expect(Key.get('car')).toBe(Key.get('car'));
13+
expect(registry.get('car')).toBe(registry.get('car'));
1214
});
1315

1416
it('should not be equal to another key if types are different', function () {
15-
expect(Key.get('car')).not.toBe(Key.get('porsche'));
17+
expect(registry.get('car')).not.toBe(registry.get('porsche'));
1618
});
1719

1820
it('should return the passed in key', function () {
19-
expect(Key.get(Key.get('car'))).toBe(Key.get('car'));
21+
expect(registry.get(registry.get('car'))).toBe(registry.get('car'));
2022
});
2123

2224
describe("metadata", function () {
2325
it("should assign metadata to a key", function () {
24-
var key = Key.get('car');
26+
var key = registry.get('car');
2527

2628
Key.setMetadata(key, "meta");
2729

2830
expect(key.metadata).toEqual("meta");
2931
});
3032

3133
it("should allow assigning the same metadata twice", function () {
32-
var key = Key.get('car');
34+
var key = registry.get('car');
3335

3436
Key.setMetadata(key, "meta");
3537
Key.setMetadata(key, "meta");
@@ -38,7 +40,7 @@ export function main() {
3840
});
3941

4042
it("should throw when assigning different metadata", function () {
41-
var key = Key.get('car');
43+
var key = registry.get('car');
4244

4345
Key.setMetadata(key, "meta1");
4446

0 commit comments

Comments
 (0)