1 | var 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 |
|
58 | module.exports = IitFilter;
|