diff --git a/src/app/Day.re b/src/app/Day.re
new file mode 100644
index 0000000..dc29d22
--- /dev/null
+++ b/src/app/Day.re
@@ -0,0 +1,30 @@
+open Types;
+open PageType;
+
+module Day {
+ let now = () => {
+ let dateString = () =>
+ Js.Date.setHoursMSMs(Js.Date.make(), ~hours=0., ~minutes=0., ~seconds=0., ~milliseconds=0.,())
+ |> Js.Date.fromFloat
+ |> Js.Date.toISOString;
+
+ { date: dateString(), entries: []};
+ };
+
+ let empty = { date: "", entries: []};
+
+ let createEntry = (nextId, pt, pageCount) => {
+ id: nextId,
+ kind: pt,
+ value: pageCount
+ };
+
+ let appendEntry: (day, entry) => day =
+ (rd, entry) => {
+ { date: rd.date, entries: [entry, ...rd.entries] };
+ };
+
+ let pageCount = (rd: day) => rd.entries
+ |> List.map(i => float_of_int(i.value) *. PageType.pageScore(i.kind))
+ |> List.fold_left((a, b) => a +. b, 0.);
+}
\ No newline at end of file
diff --git a/src/app/Dokusho.re b/src/app/Dokusho.re
index 0a01f42..21eebcb 100644
--- a/src/app/Dokusho.re
+++ b/src/app/Dokusho.re
@@ -1,12 +1,12 @@
open Input;
open Entry;
open Types;
-open ReadingData;
+open Day;
module Dokusho {
let component = ReasonReact.reducerComponent("Dokusho");
let initState = {
- readingData: ReadingData.empty,
+ readingData: Day.now(),
selectedEntry: Book
};
@@ -19,13 +19,13 @@ module Dokusho {
ReasonReact.Update({readingData: readingData, selectedEntry: pageType});
| AddEntry(pageTypeString, count) =>
ReasonReact.Update(
- ReadingData.createEntry(List.length(readingData.entries), pageTypeString, count) |>
- ReadingData.appendEntry(readingData) |>
+ Day.createEntry(List.length(readingData.entries), pageTypeString, count) |>
+ Day.appendEntry(readingData) |>
(rd => {readingData: rd, selectedEntry: selectedEntry}));
},
- render: ({state: { readingData, selectedEntry }, reduce}) => {
- let pageCount = ReadingData.pageCount(readingData);
-
+ render: ({state: { readingData, selectedEntry}, reduce}) => {
+ let pageCount = Day.pageCount(readingData);
+
(ReasonReact.stringToElement("Dokusho"))
diff --git a/src/app/ReadingData.re b/src/app/ReadingData.re
deleted file mode 100644
index 435319e..0000000
--- a/src/app/ReadingData.re
+++ /dev/null
@@ -1,21 +0,0 @@
-open Types;
-open PageType;
-
-module ReadingData {
- let empty = { entries: [] };
-
- let createEntry = (nextId, pt, pageCount) => {
- id: nextId,
- kind: pt,
- value: pageCount
- };
-
- let appendEntry: (readingData, entry) => readingData =
- (rd, entry) => {
- { entries: [entry, ...rd.entries] };
- };
-
- let pageCount = (rd: readingData) => rd.entries
- |> List.map(i => float_of_int(i.value) *. PageType.pageScore(i.kind))
- |> List.fold_left((a, b) => a +. b, 0.);
-}
\ No newline at end of file
diff --git a/src/app/Types.re b/src/app/Types.re
index 3bfb1c1..a1bf144 100644
--- a/src/app/Types.re
+++ b/src/app/Types.re
@@ -8,21 +8,13 @@ type entry = {
value: int
};
-type readingData = {
- entries: list(entry)
-};
-
type day = {
date: string,
entries: list(entry)
};
-type otherReadingData = {
- days: day
-};
-
type mainState = {
- readingData: readingData,
+ readingData: day,
selectedEntry: pageType
};
diff --git a/src/test/ReadingData_test.re b/src/test/ReadingData_test.re
index af0aa6f..f1ec670 100644
--- a/src/test/ReadingData_test.re
+++ b/src/test/ReadingData_test.re
@@ -1,24 +1,40 @@
open Jest;
-open ReadingData;
+open Day;
open Types;
-describe("ReadingData", () => {
+describe("Day", () => {
open Expect;
- describe("ReadingData.empty", () => {
- test("Is an empty ReadingData object", () =>
- expect(List.length(ReadingData.empty.entries)) |> toBe(0));
+ describe("Day.empty", () => {
+ test("Is an empty Day object", () =>
+ expect(List.length(Day.empty.entries)) |> toBe(0));
});
- describe("ReadingData.createEntry", () => {
+ describe("Day.now", () => {
+ test("Creates a Date with no reading entires", () =>
+ expect(List.length(Day.now().entries)) |> toBe(0));
+
+ test("Sets the date field", () =>
+ expect(String.length(Day.now().date)) |> toBeGreaterThan(0));
+
+ test("Sets the date field with a parsable date", () => {
+ let testDate = Day.now().date;
+
+ let otherDate = Js.Date.parse(testDate) |> Js.Date.toISOString;
+
+ expect(testDate) |> toEqual(otherDate)
+ });
+ });
+
+ describe("Day.createEntry", () => {
test("Can create an entry type", () =>
- expect(ReadingData.createEntry(1, Lyric, 1)) |> toEqual({id: 1, kind: Lyric, value: 1}));
+ expect(Day.createEntry(1, Lyric, 1)) |> toEqual({id: 1, kind: Lyric, value: 1}));
});
- describe("ReadingData.pageCount", () => {
+ describe("Day.pageCount", () => {
test("Counts all pages types to give a weighted total", () =>
- expect(ReadingData.pageCount({ entries: [
+ expect(Day.pageCount({ date: "", entries: [
{id: 1, kind: Book, value: 1},
{id: 2, kind: Lyric, value: 1},
{id: 3, kind: Manga, value: 1},
@@ -26,7 +42,7 @@ describe("ReadingData", () => {
{id: 5, kind: News, value: 1},]})) |> toBeLessThan(5.));
test("Returns 0 for an empty list of entries", () =>
- expect(ReadingData.pageCount(ReadingData.empty)) |> toBe(0.));
+ expect(Day.pageCount(Day.empty)) |> toBe(0.));
});
});