Skip to content

Commit

Permalink
Added support for the fromJson method
Browse files Browse the repository at this point in the history
  • Loading branch information
zaccomode committed Oct 30, 2023
1 parent 70f0bcf commit d0c9b6d
Show file tree
Hide file tree
Showing 11 changed files with 52 additions and 11 deletions.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "chiral",
"version": "1.1.0",
"version": "1.3.0",
"description": "A library to simplify timekeeping.",
"author": "Isaac Shea <[email protected]>",
"license": "MIT",
Expand Down
11 changes: 10 additions & 1 deletion src/models/date.test.ts → src/date/date.test.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import RealDate from "./date";
import { RealDate } from "./date";

test("RealDate", () => {
const baseDate = new RealDate(2021, 1, 1);
Expand Down Expand Up @@ -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);
});
13 changes: 11 additions & 2 deletions src/models/date.ts → src/date/date.ts
Original file line number Diff line number Diff line change
@@ -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<RealDate> {
export class RealDate implements Chiral.Date.I_Date<RealDate> {
protected _type: "RealDate" = "RealDate";

private _date: Date;
Expand Down Expand Up @@ -230,8 +230,17 @@ export default class RealDate implements Chiral.Date.I_Date<RealDate> {
"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;
}
}
1 change: 1 addition & 0 deletions src/date/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from "./date"
4 changes: 3 additions & 1 deletion src/index.ts
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
export * from "./models";
export * from "./date";
export * from "./time";
export * from "./types";
2 changes: 0 additions & 2 deletions src/models/index.ts

This file was deleted.

1 change: 1 addition & 0 deletions src/time/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from "./time"
14 changes: 12 additions & 2 deletions src/models/time.test.ts → src/time/time.test.ts
Original file line number Diff line number Diff line change
@@ -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);
Expand Down Expand Up @@ -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);
});
14 changes: 12 additions & 2 deletions src/models/time.ts → src/time/time.ts
Original file line number Diff line number Diff line change
@@ -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<RealTime> {
export class RealTime implements Chiral.Time.I_Time<RealTime> {
protected _type: "RealTime" = "RealTime";


Expand Down Expand Up @@ -340,6 +340,8 @@ export default class RealTime implements Chiral.Time.I_Time<RealTime> {
mil: "",
};


/** Creates a new `RealTime` from the current system time */
static now() {
const now = new Date();
return new RealTime(
Expand All @@ -349,4 +351,12 @@ export default class RealTime implements Chiral.Time.I_Time<RealTime> {
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;
}
}
1 change: 1 addition & 0 deletions src/types/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from "./types"
File renamed without changes.

0 comments on commit d0c9b6d

Please sign in to comment.