Skip to content

Commit 8fd8e37

Browse files
author
Cache Hamm
committed
engine.removeRule() return value reflects whether rule was removed
1 parent 957d577 commit 8fd8e37

File tree

3 files changed

+51
-24
lines changed

3 files changed

+51
-24
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
#### 7.0.0 / 2021-06-03
2+
* Rules now receive a default `id` property, when none is passed to the constructor.
3+
14
#### 6.0.1 / 2021-03-09
25
* Updates Typescript types to include `failureEvents` in EngineResult.
36

src/engine.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,11 @@ class Engine extends EventEmitter {
7676
*/
7777
removeRule (rule) {
7878
if (!(rule instanceof Rule)) {
79-
this.rules = this.rules.filter(ruleInEngine => ruleInEngine.id !== rule)
79+
const filteredRules = this.rules.filter(ruleInEngine => ruleInEngine.id !== rule)
80+
const ruleRemoved = filteredRules.length !== this.rules.length
81+
this.rules = filteredRules
8082
this.prioritizedRules = null
81-
return Boolean(this.rules.length)
83+
return ruleRemoved
8284
} else {
8385
if (!rule) return false
8486
const index = this.rules.indexOf(rule)

test/engine.test.js

Lines changed: 44 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -109,38 +109,60 @@ describe('Engine', () => {
109109
})
110110

111111
describe('removeRule()', () => {
112-
describe('rule instance', () => {
112+
context('rule instance', () => {
113113
it('removes the rule', () => {
114114
const rule = new Rule(factories.rule())
115115
engine.addRule(rule)
116116
expect(engine.rules.length).to.equal(1)
117-
engine.removeRule(rule)
117+
118+
const isRemoved = engine.removeRule(rule)
119+
120+
expect(isRemoved).to.be.true()
118121
expect(engine.rules.length).to.equal(0)
119122
expect(engine.prioritizedRules).to.equal(null)
120123
})
121-
})
122124

123-
it('can only remove added rules', () => {
124-
expect(engine.rules.length).to.equal(0)
125-
const rule = new Rule(factories.rule())
126-
const isRemoved = engine.removeRule(rule)
127-
expect(isRemoved).to.equal(false)
128-
})
125+
it('can only remove added rules', () => {
126+
expect(engine.rules.length).to.equal(0)
127+
const rule = new Rule(factories.rule())
129128

130-
it('clears the "prioritizedRules" cache', () => {
131-
const rule = new Rule(factories.rule())
132-
engine.addRule(rule)
133-
engine.prioritizeRules()
134-
engine.removeRule(rule)
135-
expect(engine.prioritizedRules).to.equal(null)
129+
const isRemoved = engine.removeRule(rule)
130+
131+
expect(isRemoved).to.equal(false)
132+
})
133+
134+
it('clears the "prioritizedRules" cache', () => {
135+
const rule = new Rule(factories.rule())
136+
engine.addRule(rule)
137+
engine.prioritizeRules()
138+
engine.removeRule(rule)
139+
expect(engine.prioritizedRules).to.equal(null)
140+
})
136141
})
137-
it('removes rule based on ruleKey', () => {
138-
const rule = new Rule(factories.rule())
139-
engine.addRule(rule)
140-
expect(engine.rules.length).to.equal(1)
141-
engine.removeRule(rule.id)
142-
expect(engine.rules.length).to.equal(0)
143-
expect(engine.prioritizedRules).to.equal(null)
142+
143+
context('rule id', () => {
144+
it('removes rule based on rule id', () => {
145+
const rule = new Rule(factories.rule())
146+
engine.addRule(rule)
147+
expect(engine.rules.length).to.equal(1)
148+
149+
const isRemoved = engine.removeRule(rule.id)
150+
151+
expect(isRemoved).to.be.true()
152+
expect(engine.rules.length).to.equal(0)
153+
expect(engine.prioritizedRules).to.equal(null)
154+
})
155+
156+
it('returns false when rule cannot be found', () => {
157+
const rule = new Rule(factories.rule())
158+
engine.addRule(rule)
159+
expect(engine.rules.length).to.equal(1)
160+
161+
const isRemoved = engine.removeRule('not-found-id')
162+
163+
expect(isRemoved).to.be.false()
164+
expect(engine.rules.length).to.equal(1)
165+
})
144166
})
145167
})
146168

0 commit comments

Comments
 (0)