Skip to content

Commit ef5bed9

Browse files
author
Cache Hamm
committed
Document almanac events and results methods
1 parent 497d252 commit ef5bed9

File tree

5 files changed

+67
-38
lines changed

5 files changed

+67
-38
lines changed

docs/almanac.md

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
* [Methods](#methods)
55
* [almanac.factValue(Fact fact, Object params, String path) -> Promise](#almanacfactvaluefact-fact-object-params-string-path---promise)
66
* [almanac.addRuntimeFact(String factId, Mixed value)](#almanacaddruntimefactstring-factid-mixed-value)
7+
* [almanac.getEvents(String outcome) -> Events[]](#almanacgeteventsstring-outcome---events)
8+
* [almanac.getResults() -> RuleResults[]](#almanacgetresults---ruleresults)
79
* [Common Use Cases](#common-use-cases)
810
* [Fact dependencies](#fact-dependencies)
911
* [Retrieve fact values when handling events](#retrieve-fact-values-when-handling-events)
@@ -39,6 +41,26 @@ Sets a constant fact mid-run. Often used in conjunction with rule and engine ev
3941
almanac.addRuntimeFact('account-id', 1)
4042
```
4143

44+
### almanac.getEvents(String outcome) -> Events[]
45+
46+
Returns events by outcome ("success" or "failure") for the current engine run()
47+
48+
```js
49+
almanac.getEvents() // all events for every rule evaluated thus far
50+
51+
almanac.getEvents('success') // array of success events
52+
53+
almanac.getEvents('failure') // array of failure events
54+
```
55+
56+
### almanac.getResults() -> RuleResults[]
57+
58+
Returns [rule results](./rules#rule-results) for the current engine run()
59+
60+
```js
61+
almanac.getResults()
62+
```
63+
4264
## Common Use Cases
4365

4466
### Fact dependencies

docs/engine.md

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,18 @@
33
The Engine stores and executes rules, emits events, and maintains state.
44

55
* [Methods](#methods)
6-
* [constructor([Array rules], Object [options])](#constructorarray-rules-object-options)
7-
* [Options](#options)
8-
* [engine.addFact(String id, Function [definitionFunc], Object [options])](#engineaddfactstring-id-function-definitionfunc-object-options)
9-
* [engine.removeFact(String id)](#engineremovefactstring-id)
10-
* [engine.addRule(Rule instance|Object options)](#engineaddrulerule-instanceobject-options)
11-
* [engine.removeRule(Rule instance)](#engineremoverulerule-instance)
12-
* [engine.addOperator(String operatorName, Function evaluateFunc(factValue, jsonValue))](#engineaddoperatorstring-operatorname-function-evaluatefuncfactvalue-jsonvalue)
13-
* [engine.removeOperator(String operatorName)](#engineremoveoperatorstring-operatorname)
14-
* [engine.run([Object facts], [Object options]) -> Promise ({ events: Events, almanac: Almanac, results: [], failureResults: []})](#enginerunobject-facts-object-options---promise--events-events-almanac-almanac-successresults--failureresults-)
15-
* [engine.stop() -> Engine](#enginestop---engine)
16-
* [engine.on('success', Function(Object event, Almanac almanac, RuleResult ruleResult))](#engineonsuccess-functionobject-event-almanac-almanac-ruleresult-ruleresult)
17-
* [engine.on('failure', Function(Object event, Almanac almanac, RuleResult ruleResult))](#engineonfailure-functionobject-event-almanac-almanac-ruleresult-ruleresult)
6+
* [constructor([Array rules], Object [options])](#constructorarray-rules-object-options)
7+
* [Options](#options)
8+
* [engine.addFact(String id, Function [definitionFunc], Object [options])](#engineaddfactstring-id-function-definitionfunc-object-options)
9+
* [engine.removeFact(String id)](#engineremovefactstring-id)
10+
* [engine.addRule(Rule instance|Object options)](#engineaddrulerule-instanceobject-options)
11+
* [engine.removeRule(Rule instance)](#engineremoverulerule-instance)
12+
* [engine.addOperator(String operatorName, Function evaluateFunc(factValue, jsonValue))](#engineaddoperatorstring-operatorname-function-evaluatefuncfactvalue-jsonvalue)
13+
* [engine.removeOperator(String operatorName)](#engineremoveoperatorstring-operatorname)
14+
* [engine.run([Object facts], [Object options]) -> Promise ({ events: [], failureEvents: [], almanac: Almanac, results: [], failureResults: []})](#enginerunobject-facts-object-options---promise--events--failureevents--almanac-almanac-results--failureresults-)
15+
* [engine.stop() -> Engine](#enginestop---engine)
16+
* [engine.on('success', Function(Object event, Almanac almanac, RuleResult ruleResult))](#engineonsuccess-functionobject-event-almanac-almanac-ruleresult-ruleresult)
17+
* [engine.on('failure', Function(Object event, Almanac almanac, RuleResult ruleResult))](#engineonfailure-functionobject-event-almanac-almanac-ruleresult-ruleresult)
1818

1919
## Methods
2020

@@ -153,7 +153,7 @@ engine.removeOperator('startsWithLetter');
153153

154154

155155

156-
### engine.run([Object facts], [Object options]) -> Promise ({ events: Events, almanac: Almanac, results: [], failureResults: []})
156+
### engine.run([Object facts], [Object options]) -> Promise ({ events: [], failureEvents: [], almanac: Almanac, results: [], failureResults: []})
157157

158158
Runs the rules engine. Returns a promise which resolves when all rules have been run.
159159

@@ -165,13 +165,20 @@ await engine.run()
165165
await engine.run({ userId: 1 })
166166

167167
// results
168-
const { results, failureResults, events } = await engine.run({ userId: 1 })
168+
const {
169+
results,
170+
failureResults,
171+
events,
172+
failureEvents,
173+
almanac
174+
} = await engine.run({ userId: 1 })
169175

170176
/**
171177
* almanac: Almanac instance for the run
172178
* results: rule results for successful rules
173179
* failureResults: rule results for failed rules
174-
* events: successful events
180+
* events: successful rule events
181+
* failureEvents: failed rule events
175182
*/
176183
```
177184
Link to the [Almanac documentation](./almanac.md)

docs/rules.md

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,28 +4,28 @@
44
Rules contain a set of _conditions_ and a single _event_. When the engine is run, each rule condition is evaluated. If the results are truthy, the rule's _event_ is triggered.
55

66
* [Methods](#methods)
7-
* [constructor([Object options|String json])](#constructorobject-optionsstring-json)
8-
* [setConditions(Array conditions)](#setconditionsarray-conditions)
9-
* [getConditions() -> Object](#getconditions---object)
10-
* [setEvent(Object event)](#seteventobject-event)
11-
* [getEvent() -> Object](#getevent---object)
12-
* [setPriority(Integer priority = 1)](#setpriorityinteger-priority--1)
13-
* [getPriority() -> Integer](#getpriority---integer)
14-
* [toJSON(Boolean stringify = true)](#tojsonboolean-stringify--true)
7+
* [constructor([Object options|String json])](#constructorobject-optionsstring-json)
8+
* [setConditions(Array conditions)](#setconditionsarray-conditions)
9+
* [getConditions() -> Object](#getconditions---object)
10+
* [setEvent(Object event)](#seteventobject-event)
11+
* [getEvent() -> Object](#getevent---object)
12+
* [setPriority(Integer priority = 1)](#setpriorityinteger-priority--1)
13+
* [getPriority() -> Integer](#getpriority---integer)
14+
* [toJSON(Boolean stringify = true)](#tojsonboolean-stringify--true)
1515
* [Conditions](#conditions)
16-
* [Basic conditions](#basic-conditions)
17-
* [Boolean expressions: all and any](#boolean-expressions-all-and-any)
18-
* [Condition helpers: params](#condition-helpers-params)
19-
* [Condition helpers: path](#condition-helpers-path)
20-
* [Condition helpers: custom path resolver](#condition-helpers-custom-path-resolver)
21-
* [Comparing facts](#comparing-facts)
16+
* [Basic conditions](#basic-conditions)
17+
* [Boolean expressions: all and any](#boolean-expressions-all-and-any)
18+
* [Condition helpers: params](#condition-helpers-params)
19+
* [Condition helpers: path](#condition-helpers-path)
20+
* [Condition helpers: custom path resolver](#condition-helpers-custom-path-resolver)
21+
* [Comparing facts](#comparing-facts)
2222
* [Events](#events)
23-
* [rule.on('success', Function(Object event, Almanac almanac, RuleResult ruleResult))](#ruleonsuccess-functionobject-event-almanac-almanac-ruleresult-ruleresult)
24-
* [rule.on('failure', Function(Object event, Almanac almanac, RuleResult ruleResult))](#ruleonfailure-functionobject-event-almanac-almanac-ruleresult-ruleresult)
23+
* [rule.on('success', Function(Object event, Almanac almanac, RuleResult ruleResult))](#ruleonsuccess-functionobject-event-almanac-almanac-ruleresult-ruleresult)
24+
* [rule.on('failure', Function(Object event, Almanac almanac, RuleResult ruleResult))](#ruleonfailure-functionobject-event-almanac-almanac-ruleresult-ruleresult)
2525
* [Operators](#operators)
26-
* [String and Numeric operators:](#string-and-numeric-operators)
27-
* [Numeric operators:](#numeric-operators)
28-
* [Array operators:](#array-operators)
26+
* [String and Numeric operators:](#string-and-numeric-operators)
27+
* [Numeric operators:](#numeric-operators)
28+
* [Array operators:](#array-operators)
2929
* [Rule Results](#rule-results)
3030

3131
## Methods

src/almanac.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,14 @@ export default class Almanac {
5959
* Adds a rule result
6060
* @param {Object} event
6161
*/
62-
addRuleResult (ruleResult) {
62+
addResult (ruleResult) {
6363
this.ruleResults.push(ruleResult)
6464
}
6565

6666
/**
6767
* retrieve successful events
6868
*/
69-
getRuleResults () {
69+
getResults () {
7070
return this.ruleResults
7171
}
7272

src/engine.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ class Engine extends EventEmitter {
191191
}
192192
return rule.evaluate(almanac).then((ruleResult) => {
193193
debug(`engine::run ruleResult:${ruleResult.result}`)
194-
almanac.addRuleResult(ruleResult)
194+
almanac.addResult(ruleResult)
195195
if (ruleResult.result) {
196196
almanac.addEvent(ruleResult.event, 'success')
197197
return this.emitAsync('success', ruleResult.event, almanac, ruleResult)
@@ -232,7 +232,7 @@ class Engine extends EventEmitter {
232232
cursor.then(() => {
233233
this.status = FINISHED
234234
debug('engine::run completed')
235-
const ruleResults = almanac.getRuleResults()
235+
const ruleResults = almanac.getResults()
236236
const { results, failureResults } = ruleResults.reduce((hash, ruleResult) => {
237237
const group = ruleResult.result ? 'results' : 'failureResults'
238238
hash[group].push(ruleResult)

0 commit comments

Comments
 (0)