Skip to content

Commit

Permalink
feat: add implementation for day slot
Browse files Browse the repository at this point in the history
  • Loading branch information
mahyarmirrashed committed Nov 5, 2023
1 parent dd97924 commit d2baba4
Showing 1 changed file with 58 additions and 0 deletions.
58 changes: 58 additions & 0 deletions src/lib/slots/DaySlot.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
import BaseSlot from "./BaseSlot";

class DaySlot extends BaseSlot {
constructor() {
// Days are from 1 to 31 inclusive, so maximumValue is 32 to accommodate the offset
super(32);
}

override addSingle(value: number) {
this.checkNotZero(value);
return super.addSingle(value - 1);
}

override addRange(start: number, end: number) {
this.checkNotZero(start, end);
return super.addRange(start - 1, end - 1);
}

override addStep(step: number, start = 1) {
this.checkNotZero(start);
return super.addStep(step, start - 1);
}

override removeSingle(value: number) {
this.checkNotZero(value);
return super.removeSingle(value - 1);
}

override removeRange(start: number, end: number) {
this.checkNotZero(start, end);
return super.removeRange(start - 1, end - 1);
}

override removeStep(step: number, start = 1) {
this.checkNotZero(start);
return super.removeStep(step, start - 1);
}

override toString() {
let output = super.toString();

if (output === "*") return output;
else if (output.startsWith("0-1,")) return output.replace("0-1,", "1,");
else if (output.startsWith("0-")) return output.replace("0-", "1-");
else if (output.startsWith("0,")) return output.replace("0,", "1,");
else return output;
}

private checkNotZero(...values: number[]) {
values.forEach((value) => {
if (value === 0) {
throw new Error(`Value ${value} is out of bounds.`);
}
});
}
}

export default DaySlot;

0 comments on commit d2baba4

Please sign in to comment.