Skip to content

Commit

Permalink
Replace ReadingData with Day type (#6)
Browse files Browse the repository at this point in the history
* Update main component and reducers to include the 'day' type

* Removed unused types
  • Loading branch information
RawToast committed Mar 1, 2018
1 parent 62eb642 commit 7c88e6d
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 47 deletions.
30 changes: 30 additions & 0 deletions src/app/Day.re
Original file line number Diff line number Diff line change
@@ -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.);
}
14 changes: 7 additions & 7 deletions src/app/Dokusho.re
Original file line number Diff line number Diff line change
@@ -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
};

Expand All @@ -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);
<div className="app">
<div className="title">
(ReasonReact.stringToElement("Dokusho"))
Expand Down
21 changes: 0 additions & 21 deletions src/app/ReadingData.re

This file was deleted.

10 changes: 1 addition & 9 deletions src/app/Types.re
Original file line number Diff line number Diff line change
Expand Up @@ -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
};
Expand Down
36 changes: 26 additions & 10 deletions src/test/ReadingData_test.re
Original file line number Diff line number Diff line change
@@ -1,32 +1,48 @@
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},
{id: 4, kind: Net, value: 1},
{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.));
});

});

0 comments on commit 7c88e6d

Please sign in to comment.