Customisable Post-Actions
A Post-Action, is a callback that will be executed after a rule validate()
method.
This allow you to customise your process, according to the result of a rule.
You can:
- log informations,
- send webhook with data priviously processed,
- comment an issue or a PR,
- and much more!
How does it work?
In your .rulesrc
config file, you can add callback
functions that will be called if the rule succeeds or not.
These callback
s are Runnable
classes, that implementing the Runnable
abstract class.
The Runnable
class will have a run()
method with callbackType
, RuleResult
and args
as arguments.
callbackType
precise if the Runnable is called because the rule failed, succeed or if it always called.
RuleResult
is an object containing the result of the rule, and args
is a custom object, with as many properties as you want.
Create your own Runnable class
If you don't find a suitable Post-Action for your needs, you can easily create yours by extending the Runnable
class.
Your Runnable class must have a name and implement the run()
method as said in the previous section.
CLI
Same as Rules creation, the easiest way to create it is to use our CLI: hygie-cli.
Simply run : npm run generate:runnable RUNNABLENAME
.
You need to have @nestjs/cli
install globally. Therefore, run npm install -g @nestjs/cli
.
This CLI will create your runnable file and add everything necessary in the project. You just have to focus on your business logic.
Use of services
It you need particular Services, you have to declare them in your constructor.
For example:
constructor(private readonly myService: MyService)
NestJs dependency injection will handle everything.
handlebars templating
If you want to allow templating (you want to!), you need to use the render()
method provide by our Utils class.
Just have a look at the LoggerRunnable
implementation:
run(ruleResult: RuleResult, args: LoggerArgs): void {
switch (args.type) {
case 'info':
logger.info(render(args.message, ruleResult));
break;
case 'warn':
logger.warn(render(args.message, ruleResult));
break;
}
}
The render()
method need the string containing the template (in the args
object), and the data provider: RuleResult
which is the return by the validate()
rule method.