| 
									
										
										
										
											2018-04-11 05:23:36 +09:00
										 |  |  | class ChallengeTitles { | 
					
						
							|  |  |  |   constructor() { | 
					
						
							|  |  |  |     this.knownTitles = []; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  |   check(title) { | 
					
						
							|  |  |  |     if (typeof title !== 'string') { | 
					
						
							| 
									
										
										
										
											2018-10-23 16:21:53 +03:00
										 |  |  |       throw new Error( | 
					
						
							|  |  |  |         `Expected a valid string for ${title}, but got a(n) ${typeof title}` | 
					
						
							|  |  |  |       ); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     const titleToCheck = title.replace(/\s+/g, '').toLowerCase(); | 
					
						
							|  |  |  |     if (titleToCheck.length === 0) { | 
					
						
							|  |  |  |       throw new Error('Expected a title length greater than 0'); | 
					
						
							| 
									
										
										
										
											2018-04-11 05:23:36 +09:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2018-04-13 23:15:40 +09:00
										 |  |  |     const isKnown = this.knownTitles.includes(titleToCheck); | 
					
						
							|  |  |  |     if (isKnown) { | 
					
						
							| 
									
										
										
										
											2018-04-11 05:23:36 +09:00
										 |  |  |       throw new Error(`
 | 
					
						
							|  |  |  |     All challenges must have a unique title. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     The title ${title} is already assigned | 
					
						
							|  |  |  |     `);
 | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  |     this.knownTitles = [ ...this.knownTitles, titleToCheck ]; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-10-23 16:21:53 +03:00
										 |  |  | module.exports = ChallengeTitles; |