Skip to content

Commit d9998f3

Browse files
author
DavertMik
committed
refactored steps
1 parent a79ce3a commit d9998f3

File tree

13 files changed

+559
-471
lines changed

13 files changed

+559
-471
lines changed

lib/actor.js

Lines changed: 44 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
1-
const Step = require('./step');
2-
const { MetaStep } = require('./step');
3-
const container = require('./container');
4-
const { methodsOfObject } = require('./utils');
5-
const recorder = require('./recorder');
6-
const event = require('./event');
7-
const store = require('./store');
8-
const output = require('./output');
1+
const Step = require('./step')
2+
const MetaStep = require('./step/meta')
3+
const recordStep = require('./step/record')
4+
const container = require('./container')
5+
const { methodsOfObject } = require('./utils')
6+
const { TIMEOUT_ORDER } = require('./step/timeout')
7+
const recorder = require('./recorder')
8+
const event = require('./event')
9+
const store = require('./store')
10+
const output = require('./output')
911

1012
/**
1113
* @interface
@@ -21,13 +23,13 @@ class Actor {
2123
* ⚠️ returns a promise which is synchronized internally by recorder
2224
*/
2325
async say(msg, color = 'cyan') {
24-
const step = new Step('say', 'say');
25-
step.status = 'passed';
26+
const step = new Step('say', 'say')
27+
step.status = 'passed'
2628
return recordStep(step, [msg]).then(() => {
2729
// this is backward compatibility as this event may be used somewhere
28-
event.emit(event.step.comment, msg);
29-
output.say(msg, `${color}`);
30-
});
30+
event.emit(event.step.comment, msg)
31+
output.say(msg, `${color}`)
32+
})
3133
}
3234

3335
/**
@@ -38,14 +40,14 @@ class Actor {
3840
* @inner
3941
*/
4042
limitTime(timeout) {
41-
if (!store.timeouts) return this;
43+
if (!store.timeouts) return this
4244

4345
event.dispatcher.prependOnceListener(event.step.before, step => {
44-
output.log(`Timeout to ${step}: ${timeout}s`);
45-
step.setTimeout(timeout * 1000, Step.TIMEOUT_ORDER.codeLimitTime);
46-
});
46+
output.log(`Timeout to ${step}: ${timeout}s`)
47+
step.setTimeout(timeout * 1000, TIMEOUT_ORDER.codeLimitTime)
48+
})
4749

48-
return this;
50+
return this
4951
}
5052

5153
/**
@@ -55,11 +57,9 @@ class Actor {
5557
* @inner
5658
*/
5759
retry(opts) {
58-
if (opts === undefined) opts = 1;
59-
recorder.retry(opts);
60-
// remove retry once the step passed
61-
recorder.add(() => event.dispatcher.once(event.step.finished, () => recorder.retries.pop()));
62-
return this;
60+
const retryStep = require('./step/retry')
61+
retryStep(opts)
62+
return this
6363
}
6464
}
6565

@@ -70,102 +70,54 @@ class Actor {
7070
* @ignore
7171
*/
7272
module.exports = function (obj = {}) {
73-
const actor = container.actor() || new Actor();
73+
const actor = container.actor() || new Actor()
7474

7575
// load all helpers once container initialized
7676
container.started(() => {
77-
const translation = container.translation();
78-
const helpers = container.helpers();
77+
const translation = container.translation()
78+
const helpers = container.helpers()
7979

8080
// add methods from enabled helpers
8181
Object.values(helpers).forEach(helper => {
8282
methodsOfObject(helper, 'Helper')
8383
.filter(method => method !== 'constructor' && method[0] !== '_')
8484
.forEach(action => {
85-
const actionAlias = translation.actionAliasFor(action);
85+
const actionAlias = translation.actionAliasFor(action)
8686
if (!actor[action]) {
8787
actor[action] = actor[actionAlias] = function () {
88-
const step = new Step(helper, action);
88+
const step = new Step(helper, action)
8989
if (translation.loaded) {
90-
step.name = actionAlias;
91-
step.actor = translation.I;
90+
step.name = actionAlias
91+
step.actor = translation.I
9292
}
9393
// add methods to promise chain
94-
return recordStep(step, Array.from(arguments));
95-
};
94+
return recordStep(step, Array.from(arguments))
95+
}
9696
}
97-
});
98-
});
97+
})
98+
})
9999

100100
// add translated custom steps from actor
101101
Object.keys(obj).forEach(key => {
102-
const actionAlias = translation.actionAliasFor(key);
102+
const actionAlias = translation.actionAliasFor(key)
103103
if (!actor[actionAlias]) {
104-
actor[actionAlias] = actor[key];
104+
actor[actionAlias] = actor[key]
105105
}
106-
});
106+
})
107107

108108
container.append({
109109
support: {
110110
I: actor,
111111
},
112-
});
113-
});
112+
})
113+
})
114114
// store.actor = actor;
115115
// add custom steps from actor
116116
Object.keys(obj).forEach(key => {
117-
const ms = new MetaStep('I', key);
118-
ms.setContext(actor);
119-
actor[key] = ms.run.bind(ms, obj[key]);
120-
});
117+
const ms = new MetaStep('I', key)
118+
ms.setContext(actor)
119+
actor[key] = ms.run.bind(ms, obj[key])
120+
})
121121

122-
return actor;
123-
};
124-
125-
function recordStep(step, args) {
126-
step.status = 'queued';
127-
step.setArguments(args);
128-
129-
// run async before step hooks
130-
event.emit(event.step.before, step);
131-
132-
const task = `${step.name}: ${step.humanizeArgs()}`;
133-
let val;
134-
135-
// run step inside promise
136-
recorder.add(
137-
task,
138-
() => {
139-
if (!step.startTime) {
140-
// step can be retries
141-
event.emit(event.step.started, step);
142-
step.startTime = Date.now();
143-
}
144-
return (val = step.run(...args));
145-
},
146-
false,
147-
undefined,
148-
step.getTimeout(),
149-
);
150-
151-
event.emit(event.step.after, step);
152-
153-
recorder.add('step passed', () => {
154-
step.endTime = Date.now();
155-
event.emit(event.step.passed, step, val);
156-
event.emit(event.step.finished, step);
157-
});
158-
159-
recorder.catchWithoutStop(err => {
160-
step.status = 'failed';
161-
step.endTime = Date.now();
162-
event.emit(event.step.failed, step);
163-
event.emit(event.step.finished, step);
164-
throw err;
165-
});
166-
167-
recorder.add('return result', () => val);
168-
// run async after step hooks
169-
170-
return recorder.promise();
122+
return actor
171123
}

lib/effects.js

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,7 @@
11
const recorder = require('./recorder')
22
const { debug } = require('./output')
3-
const { StepConfig } = require('./step')
43
const store = require('./store')
54

6-
function stepConfig(opts) {
7-
return new StepConfig(opts)
8-
}
9-
10-
module.exports = {
11-
stepConfig,
12-
}
13-
145
/**
156
* @module hopeThat
167
*

lib/recorder.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ module.exports = {
179179
}
180180
if (retry === undefined) retry = true
181181
if (!running && !force) {
182-
return
182+
return Promise.resolve()
183183
}
184184
tasks.push(taskName)
185185
debug(chalk.gray(`${currentQueue()} Queued | ${taskName}`))

0 commit comments

Comments
 (0)