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
|
|
|
|
`);
|
|
|
|
}
|
2019-02-18 19:32:49 +00:00
|
|
|
this.knownTitles = [...this.knownTitles, titleToCheck];
|
2018-04-11 05:23:36 +09:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-10-23 16:21:53 +03:00
|
|
|
module.exports = ChallengeTitles;
|