UNPKG

1.34 kBJavaScriptView Raw
1var IitFilter = function() {
2 var inclusiveMap = Object.create(null);
3 var currentMode = 0;
4
5 var recomputeCurrentMode = function() {
6 currentMode = Object.keys(inclusiveMap).reduce(function(previous, key) {
7 return Math.max(previous, inclusiveMap[key] || 0);
8 }, 0);
9 };
10
11 var setFileMode = function(filepath, newMode) {
12 var previousMode = inclusiveMap[filepath];
13
14 if (previousMode === newMode) {
15 return;
16 }
17
18 inclusiveMap[filepath] = newMode;
19
20 if (currentMode > 0 && previousMode === currentMode) {
21 recomputeCurrentMode();
22 } else {
23 currentMode = Math.max(currentMode, newMode);
24 }
25 };
26
27 this.isInclusive = function() {
28 return currentMode > 0;
29 };
30
31 this.filter = function(filepath) {
32 if (!currentMode || inclusiveMap[filepath] === undefined) {
33 return true;
34 }
35
36 if (inclusiveMap[filepath] && inclusiveMap[filepath] >= currentMode) {
37 return true;
38 }
39
40 return false;
41 };
42
43 this.removeFile = function(filepath) {
44 setFileMode(filepath, 0);
45 };
46
47 this.updateFile = function(filepath, content) {
48 if (content.indexOf('iit(') !== -1) {
49 setFileMode(filepath, 2);
50 } else if (content.indexOf('ddescribe(') !== -1) {
51 setFileMode(filepath, 1);
52 } else {
53 this.removeFile(filepath);
54 }
55 };
56};
57
58module.exports = IitFilter;