From d0c9b6d3f3267de85ce119708d00b3f92a135240 Mon Sep 17 00:00:00 2001 From: Isaac Shea Date: Mon, 30 Oct 2023 12:09:52 +1000 Subject: [PATCH] Added support for the fromJson method --- package.json | 2 +- src/{models => date}/date.test.ts | 11 ++++++++++- src/{models => date}/date.ts | 13 +++++++++++-- src/date/index.ts | 1 + src/index.ts | 4 +++- src/models/index.ts | 2 -- src/time/index.ts | 1 + src/{models => time}/time.test.ts | 14 ++++++++++++-- src/{models => time}/time.ts | 14 ++++++++++++-- src/types/index.ts | 1 + src/{models => types}/types.ts | 0 11 files changed, 52 insertions(+), 11 deletions(-) rename src/{models => date}/date.test.ts (93%) rename src/{models => date}/date.ts (93%) create mode 100644 src/date/index.ts delete mode 100644 src/models/index.ts create mode 100644 src/time/index.ts rename src/{models => time}/time.test.ts (92%) rename src/{models => time}/time.ts (95%) create mode 100644 src/types/index.ts rename src/{models => types}/types.ts (100%) diff --git a/package.json b/package.json index 53b14ba..e5ce5a5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "chiral", - "version": "1.1.0", + "version": "1.3.0", "description": "A library to simplify timekeeping.", "author": "Isaac Shea ", "license": "MIT", diff --git a/src/models/date.test.ts b/src/date/date.test.ts similarity index 93% rename from src/models/date.test.ts rename to src/date/date.test.ts index e07ba69..ce3d8b6 100644 --- a/src/models/date.test.ts +++ b/src/date/date.test.ts @@ -1,4 +1,4 @@ -import RealDate from "./date"; +import { RealDate } from "./date"; test("RealDate", () => { const baseDate = new RealDate(2021, 1, 1); @@ -142,4 +142,13 @@ test("RealDate", () => { expect(equalDate3.isBetween(equalDate1, equalDate2, { p: "m" })).toBe(true); expect(equalDate3.isBetween(equalDate2, equalDate1, { p: "m" })).toBe(true); + + + /** Test static methods */ + // fromJson + const fromJsonDate = new RealDate(2021, 3, 23); + const fromJsonString = JSON.parse(JSON.stringify(fromJsonDate)); + const fromJsonDate2 = RealDate.fromJson(fromJsonString); + expect(fromJsonDate.equals(fromJsonDate2)).toBe(true); + expect(fromJsonDate.day).toBe(fromJsonDate2.day); }); \ No newline at end of file diff --git a/src/models/date.ts b/src/date/date.ts similarity index 93% rename from src/models/date.ts rename to src/date/date.ts index 0c0cdea..7975cea 100644 --- a/src/models/date.ts +++ b/src/date/date.ts @@ -1,7 +1,7 @@ import padNumber from "../helpers/padNumber"; -import { Chiral } from "./types"; +import { Chiral } from "../types/types"; -export default class RealDate implements Chiral.Date.I_Date { +export class RealDate implements Chiral.Date.I_Date { protected _type: "RealDate" = "RealDate"; private _date: Date; @@ -230,8 +230,17 @@ export default class RealDate implements Chiral.Date.I_Date { "September", "October", "November", "December", ]; + /** Creates a new `RealDate` from the current system date */ static now(): RealDate { const d = new Date(); return new RealDate(d.getFullYear(), d.getMonth() + 1, d.getDate()); } + + /** Creates a new `RealDate` from a JSON object */ + static fromJson(json: any): RealDate { + if (!json.hasOwnProperty("_date")) throw new Error("Invalid JSON"); + const date = new RealDate(); + date._date = new Date(json._date); + return date; + } } \ No newline at end of file diff --git a/src/date/index.ts b/src/date/index.ts new file mode 100644 index 0000000..3366e32 --- /dev/null +++ b/src/date/index.ts @@ -0,0 +1 @@ +export * from "./date" \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index b56a816..3b839e5 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1 +1,3 @@ -export * from "./models"; \ No newline at end of file +export * from "./date"; +export * from "./time"; +export * from "./types"; \ No newline at end of file diff --git a/src/models/index.ts b/src/models/index.ts deleted file mode 100644 index fc797cb..0000000 --- a/src/models/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from "./date"; -export * from "./time"; \ No newline at end of file diff --git a/src/time/index.ts b/src/time/index.ts new file mode 100644 index 0000000..2d18873 --- /dev/null +++ b/src/time/index.ts @@ -0,0 +1 @@ +export * from "./time" \ No newline at end of file diff --git a/src/models/time.test.ts b/src/time/time.test.ts similarity index 92% rename from src/models/time.test.ts rename to src/time/time.test.ts index 72bf600..274f865 100644 --- a/src/models/time.test.ts +++ b/src/time/time.test.ts @@ -1,5 +1,5 @@ -import RealDate from "./date"; -import RealTime from "./time"; +import { RealDate } from "../date"; +import { RealTime } from "./time"; test("RealTime", () => { const baseTime = new RealTime(1, 2, 3, 4); @@ -145,4 +145,14 @@ test("RealTime", () => { const typeofTime = new RealTime(1, 2, 3, 4); expect(typeofTime.typeof(new RealDate())).toBe(false); expect(typeofTime.typeof(new RealTime())).toBe(true); + + + /** Test fromJson */ + const jsonTime = new RealTime(1, 2, 3, 4); + const jsonTimeJson = JSON.parse(JSON.stringify(jsonTime)); + const fromJsonTime = RealTime.fromJson(jsonTimeJson); + const jsonTime2 = new RealTime(1, 2, 3, 4); + expect(fromJsonTime.equals(jsonTime2)).toBe(true); + expect(fromJsonTime.hours).toBe(jsonTime2.hours); + expect(fromJsonTime.minutes).toBe(2); }); \ No newline at end of file diff --git a/src/models/time.ts b/src/time/time.ts similarity index 95% rename from src/models/time.ts rename to src/time/time.ts index b549fb1..f10eb02 100644 --- a/src/models/time.ts +++ b/src/time/time.ts @@ -1,8 +1,8 @@ import { Round } from "../helpers"; import padNumber from "../helpers/padNumber"; -import { Chiral } from "./types"; +import { Chiral } from "../types/types"; -export default class RealTime implements Chiral.Time.I_Time { +export class RealTime implements Chiral.Time.I_Time { protected _type: "RealTime" = "RealTime"; @@ -340,6 +340,8 @@ export default class RealTime implements Chiral.Time.I_Time { mil: "", }; + + /** Creates a new `RealTime` from the current system time */ static now() { const now = new Date(); return new RealTime( @@ -349,4 +351,12 @@ export default class RealTime implements Chiral.Time.I_Time { now.getMilliseconds(), ); } + + /** Creates a new `RealTime` from a JSON object */ + static fromJson(json: any): RealTime { + if (!json.hasOwnProperty("_millis")) throw new Error("Invalid JSON"); + const time = new RealTime(); + time._millis = json._millis; + return time; + } } \ No newline at end of file diff --git a/src/types/index.ts b/src/types/index.ts new file mode 100644 index 0000000..a58d575 --- /dev/null +++ b/src/types/index.ts @@ -0,0 +1 @@ +export * from "./types" \ No newline at end of file diff --git a/src/models/types.ts b/src/types/types.ts similarity index 100% rename from src/models/types.ts rename to src/types/types.ts