aboutsummaryrefslogtreecommitdiff
path: root/lib/rule_generator.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rule_generator.js')
-rw-r--r--lib/rule_generator.js49
1 files changed, 49 insertions, 0 deletions
diff --git a/lib/rule_generator.js b/lib/rule_generator.js
new file mode 100644
index 0000000..5db5240
--- /dev/null
+++ b/lib/rule_generator.js
@@ -0,0 +1,49 @@
+const { readdir } = require('fs/promises');
+const { join, resolve } = require('path');
+
+const internals = {
+
+ dates: [
+ 'today',
+ 'tomorrow',
+ 'next friday',
+ 'next wednesday',
+ 'last thursday',
+ 'last tuesday',
+ 'the next day divisible by 7',
+ 'this afternoon',
+ 'next fiscal quarter',
+ ],
+
+ rules: null,
+ currentIndex: 0,
+
+ kRulesDirectory: resolve(process.cwd(), 'rules'),
+
+ async readRules() {
+
+ const ruleFiles = await readdir(internals.kRulesDirectory);
+ const rules = ruleFiles
+ .filter((file) => file.match(/.js$/))
+ .map((file) => require(join(internals.kRulesDirectory, file)));
+
+ internals.rules = rules.sort(() => Math.random() - 0.5)
+ }
+}
+
+module.exports = {
+ async generate() {
+
+ if (!internals.rules) {
+ await internals.readRules();
+ }
+
+ const rule = internals.rules[internals.currentIndex];
+ const time = internals.dates[Math.floor(Math.random() * internals.dates.length)];
+ internals.currentIndex = (internals.currentIndex + 1) % internals.rules.length
+ return {
+ rule: rule(),
+ time
+ }
+ }
+}