From 7c88e6d401191a18646f8de004fc67323303a033 Mon Sep 17 00:00:00 2001 From: James Morris Date: Thu, 1 Mar 2018 00:10:21 +0000 Subject: [PATCH] Replace ReadingData with Day type (#6) * Update main component and reducers to include the 'day' type * Removed unused types --- src/app/Day.re | 30 ++++++++++++++++++++++++++++++ src/app/Dokusho.re | 14 +++++++------- src/app/ReadingData.re | 21 --------------------- src/app/Types.re | 10 +--------- src/test/ReadingData_test.re | 36 ++++++++++++++++++++++++++---------- 5 files changed, 64 insertions(+), 47 deletions(-) create mode 100644 src/app/Day.re delete mode 100644 src/app/ReadingData.re 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.)); }); });