refactor(Key): extract KeyRegistry to remove the need in Key.clear
				
					
				
			This commit is contained in:
		
							parent
							
								
									9448d78aa8
								
							
						
					
					
						commit
						a1c6f1bbe9
					
				| @ -2,8 +2,6 @@ import {KeyMetadataError} from './exceptions'; | |||||||
| import {MapWrapper, Map} from 'facade/collection'; | import {MapWrapper, Map} from 'facade/collection'; | ||||||
| import {FIELD, int, isPresent} from 'facade/lang'; | import {FIELD, int, isPresent} from 'facade/lang'; | ||||||
| 
 | 
 | ||||||
| var _allKeys = MapWrapper.create(); |  | ||||||
| 
 |  | ||||||
| export class Key { | export class Key { | ||||||
|   @FIELD('final token') |   @FIELD('final token') | ||||||
|   @FIELD('final id:int') |   @FIELD('final id:int') | ||||||
| @ -14,18 +12,6 @@ export class Key { | |||||||
|     this.metadata = null; |     this.metadata = null; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   static get(token):Key { |  | ||||||
|     if (token instanceof Key) return token; |  | ||||||
| 
 |  | ||||||
|     if (MapWrapper.contains(_allKeys, token)) { |  | ||||||
|       return MapWrapper.get(_allKeys, token); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     var newKey = new Key(token, Key.numberOfKeys); |  | ||||||
|     MapWrapper.set(_allKeys, token, newKey); |  | ||||||
|     return newKey; |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   static setMetadata(key:Key, metadata):Key { |   static setMetadata(key:Key, metadata):Key { | ||||||
|     if (isPresent(key.metadata) && key.metadata !== metadata) { |     if (isPresent(key.metadata) && key.metadata !== metadata) { | ||||||
|       throw new KeyMetadataError(); |       throw new KeyMetadataError(); | ||||||
| @ -34,11 +20,36 @@ export class Key { | |||||||
|     return key; |     return key; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   static clear() { |   static get(token):Key { | ||||||
|     _allKeys = MapWrapper.create(); |     return _globalKeyRegistry.get(token); | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   static get numberOfKeys():int { |   static get numberOfKeys():int { | ||||||
|     return MapWrapper.size(_allKeys); |     return _globalKeyRegistry.numberOfKeys; | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | export class KeyRegistry { | ||||||
|  |   @FIELD('final _allKeys:Map') | ||||||
|  |   constructor() { | ||||||
|  |     this._allKeys = MapWrapper.create(); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   get(token):Key { | ||||||
|  |     if (token instanceof Key) return token; | ||||||
|  | 
 | ||||||
|  |     if (MapWrapper.contains(this._allKeys, token)) { | ||||||
|  |       return MapWrapper.get(this._allKeys, token); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     var newKey = new Key(token, Key.numberOfKeys); | ||||||
|  |     MapWrapper.set(this._allKeys, token, newKey); | ||||||
|  |     return newKey; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   get numberOfKeys():int { | ||||||
|  |     return MapWrapper.size(this._allKeys); | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | var _globalKeyRegistry = new KeyRegistry(); | ||||||
|  | |||||||
| @ -1,27 +1,29 @@ | |||||||
| import {describe, it, expect, beforeEach} from 'test_lib/test_lib'; | import {describe, it, expect, beforeEach} from 'test_lib/test_lib'; | ||||||
| import {Key} from 'di/di'; | import {Key, KeyRegistry} from 'di/di'; | ||||||
| 
 | 
 | ||||||
| export function main() { | export function main() { | ||||||
|   describe("key", function () { |   describe("key", function () { | ||||||
|  |     var registry; | ||||||
|  | 
 | ||||||
|     beforeEach(function () { |     beforeEach(function () { | ||||||
|       Key.clear(); |       registry = new KeyRegistry(); | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     it('should be equal to another key if type is the same', function () { |     it('should be equal to another key if type is the same', function () { | ||||||
|       expect(Key.get('car')).toBe(Key.get('car')); |       expect(registry.get('car')).toBe(registry.get('car')); | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     it('should not be equal to another key if types are different', function () { |     it('should not be equal to another key if types are different', function () { | ||||||
|       expect(Key.get('car')).not.toBe(Key.get('porsche')); |       expect(registry.get('car')).not.toBe(registry.get('porsche')); | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     it('should return the passed in key', function () { |     it('should return the passed in key', function () { | ||||||
|       expect(Key.get(Key.get('car'))).toBe(Key.get('car')); |       expect(registry.get(registry.get('car'))).toBe(registry.get('car')); | ||||||
|     }); |     }); | ||||||
| 
 | 
 | ||||||
|     describe("metadata", function () { |     describe("metadata", function () { | ||||||
|       it("should assign metadata to a key", function () { |       it("should assign metadata to a key", function () { | ||||||
|         var key = Key.get('car'); |         var key = registry.get('car'); | ||||||
| 
 | 
 | ||||||
|         Key.setMetadata(key, "meta"); |         Key.setMetadata(key, "meta"); | ||||||
| 
 | 
 | ||||||
| @ -29,7 +31,7 @@ export function main() { | |||||||
|       }); |       }); | ||||||
| 
 | 
 | ||||||
|       it("should allow assigning the same metadata twice", function () { |       it("should allow assigning the same metadata twice", function () { | ||||||
|         var key = Key.get('car'); |         var key = registry.get('car'); | ||||||
| 
 | 
 | ||||||
|         Key.setMetadata(key, "meta"); |         Key.setMetadata(key, "meta"); | ||||||
|         Key.setMetadata(key, "meta"); |         Key.setMetadata(key, "meta"); | ||||||
| @ -38,7 +40,7 @@ export function main() { | |||||||
|       }); |       }); | ||||||
| 
 | 
 | ||||||
|       it("should throw when assigning different metadata", function () { |       it("should throw when assigning different metadata", function () { | ||||||
|         var key = Key.get('car'); |         var key = registry.get('car'); | ||||||
| 
 | 
 | ||||||
|         Key.setMetadata(key, "meta1"); |         Key.setMetadata(key, "meta1"); | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user