diff options
Diffstat (limited to 'lib/rule_generator.js')
| -rw-r--r-- | lib/rule_generator.js | 49 |
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 + } + } +} |