From 40fd25bfaff09607cd06df300ff22c474c1b6b67 Mon Sep 17 00:00:00 2001 From: Ruidy Date: Fri, 19 Feb 2021 14:31:13 +0100 Subject: [PATCH] refactor --- .idea/codeStyles/codeStyleConfig.xml | 5 +++++ src/{validation.ts => errors/exceptions.ts} | 1 - src/index.test.ts | 2 +- src/index.ts | 4 ++-- src/repository/{data.ts => locales.data.ts} | 0 src/repository/locales.ts | 2 +- src/types.ts | 16 ---------------- src/{types.test.ts => types/id.test.ts} | 6 +++--- src/types/id.ts | 20 ++++++++++++++++++++ 9 files changed, 32 insertions(+), 24 deletions(-) create mode 100644 .idea/codeStyles/codeStyleConfig.xml rename src/{validation.ts => errors/exceptions.ts} (99%) rename src/repository/{data.ts => locales.data.ts} (100%) delete mode 100644 src/types.ts rename src/{types.test.ts => types/id.test.ts} (73%) create mode 100644 src/types/id.ts diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..a55e7a1 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/src/validation.ts b/src/errors/exceptions.ts similarity index 99% rename from src/validation.ts rename to src/errors/exceptions.ts index 89bdf8b..bdbb7a2 100644 --- a/src/validation.ts +++ b/src/errors/exceptions.ts @@ -4,5 +4,4 @@ * @example * `throw new ValidationError("Bad id")` */ - export class ValidationError extends Error {} diff --git a/src/index.test.ts b/src/index.test.ts index c7348f7..5c7f2dd 100644 --- a/src/index.test.ts +++ b/src/index.test.ts @@ -1,6 +1,6 @@ import { assertStrictEquals } from "https://deno.land/std@0.87.0/testing/asserts.ts"; import { sayHello, sayRandomHello } from "./index.ts"; -import { ID } from "./types.ts"; +import { ID } from "./types/id.ts"; Deno.test("Random Hello", () => { const result = sayRandomHello(); diff --git a/src/index.ts b/src/index.ts index 61fad20..e928749 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,5 @@ import { getLocaleById, localesSize } from "./repository/locales.ts"; -import { ID } from "./types.ts"; +import { ID } from "./types/id.ts"; /** * Display the iconic Hello, World in a random locale @@ -15,5 +15,5 @@ export const sayRandomHello = () => { * @param id Unique identifier */ export const sayHello = (id: ID): string => { - return getLocaleById(id.id); + return getLocaleById(id.value); }; diff --git a/src/repository/data.ts b/src/repository/locales.data.ts similarity index 100% rename from src/repository/data.ts rename to src/repository/locales.data.ts diff --git a/src/repository/locales.ts b/src/repository/locales.ts index 07c827d..bce13ed 100644 --- a/src/repository/locales.ts +++ b/src/repository/locales.ts @@ -1,4 +1,4 @@ -import { locales } from "./data.ts"; +import { locales } from "./locales.data.ts"; export const localesSize = Object.keys(locales).length; diff --git a/src/types.ts b/src/types.ts deleted file mode 100644 index e548fe9..0000000 --- a/src/types.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { ValidationError } from "./validation.ts"; -import { localesSize } from "./repository/locales.ts"; - -export class ID { - constructor(public id: number) { - this.#isValid(id); - } - - #idIsValid = (id: number) => id > 0 && id < localesSize; - - #isValid = (id: number) => { - if (!this.#idIsValid(id)) { - throw new ValidationError(`Invalid index: ${id}`); - } - }; -} diff --git a/src/types.test.ts b/src/types/id.test.ts similarity index 73% rename from src/types.test.ts rename to src/types/id.test.ts index 395ff89..3346758 100644 --- a/src/types.test.ts +++ b/src/types/id.test.ts @@ -1,7 +1,7 @@ -import { ID } from "./types.ts"; -import { ValidationError } from "./validation.ts"; import { assertThrows } from "https://deno.land/std@0.87.0/testing/asserts.ts"; -import { localesSize } from "./repository/locales.ts"; +import { localesSize } from "../repository/locales.ts"; +import { ID } from "./id.ts"; +import { ValidationError } from "../errors/exceptions.ts"; Deno.test("ID validation fails for non strictly positive values", () => { assertThrows(() => new ID(-1), ValidationError, "Invalid index: -1"); diff --git a/src/types/id.ts b/src/types/id.ts new file mode 100644 index 0000000..f4f84be --- /dev/null +++ b/src/types/id.ts @@ -0,0 +1,20 @@ +import { localesSize } from "../repository/locales.ts"; +import { ValidationError } from "../errors/exceptions.ts"; + +/** + * ID is the input type. + * It validates input value at creation + */ +export class ID { + constructor(public value: number) { + this.#validate(value); + } + + #idIsValid = (id: number) => id > 0 && id < localesSize; + + #validate = (id: number) => { + if (!this.#idIsValid(id)) { + throw new ValidationError(`Invalid index: ${id}`); + } + }; +}