feat: implement DataSource.stop()

Implement `stop` as an alias for `disconnect`. This way LB4 applications
don't have to include custom `stop` implementation in every datasource
file.

Signed-off-by: Miroslav Bajtoš <mbajtoss@gmail.com>
This commit is contained in:
Miroslav Bajtoš 2020-04-21 14:11:50 +02:00
parent e026b4c4af
commit c83f82d5a0
No known key found for this signature in database
GPG Key ID: 6F2304BA9361C7E3
3 changed files with 36 additions and 0 deletions

View File

@ -2220,6 +2220,14 @@ DataSource.prototype.disconnect = function disconnect(cb) {
return cb.promise;
};
/**
* An alias for `disconnect` to make the datasource a LB4 life-cycle observer.
* Please note that we are intentionally not providing a `start` method,
* because the logic for establishing connection(s) is more complex
* and usually started immediately from the datasoure constructor.
*/
DataSource.prototype.stop = DataSource.prototype.disconnect;
/**
* Copy the model from Master.
* @param {Function} Master The model constructor

View File

@ -330,6 +330,31 @@ describe('DataSource', function() {
});
});
it('provides stop() API calling disconnect', function(done) {
const mockConnector = {
name: 'loopback-connector-mock',
initialize: function(ds, cb) {
ds.connector = mockConnector;
process.nextTick(function() {
cb(null);
});
},
};
const dataSource = new DataSource(mockConnector);
dataSource.on('connected', function() {
// DataSource is now connected
// connected: true, connecting: false
dataSource.connected.should.be.true();
dataSource.connecting.should.be.false();
dataSource.stop(() => {
dataSource.connected.should.be.false();
done();
});
});
});
describe('deleteModelByName()', () => {
it('removes the model from ModelBuilder registry', () => {
const ds = new DataSource('ds', {connector: 'memory'});

View File

@ -287,6 +287,9 @@ export declare class DataSource extends EventEmitter {
// legacy callback style
disconnect(callback: Callback): void;
// Only promise variant, callback is intentionally not described.
stop(): Promise<void>;
ping(): Promise<void>;
// legacy callback style
ping(callback: Callback): void;