-
Notifications
You must be signed in to change notification settings - Fork 1
/
ravel-rethinkdb-provider.js
73 lines (65 loc) · 1.95 KB
/
ravel-rethinkdb-provider.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
'use strict';
const rethinkdb = require('rethinkdb');
const Ravel = require('ravel');
/**
* Default options for rethinkdb
*/
const DEFAULT_OPTIONS = {
host: 'localhost',
port: 28015,
db: 'test',
user: 'admin',
password: '',
timeout: 20,
ssl: {}
};
/**
* A Ravel DatabaseProvider for rethinkdb
*/
class RethinkdbProvider extends Ravel.DatabaseProvider {
/**
* @param {Ravel} ravelInstance an instance of a Ravel application
* @param ${String} instanceName the name to alias this rethinkdbProvider under. 'rethinkdb' by default.
*/
constructor(ravelInstance, instanceName = 'rethinkdb') {
super(ravelInstance, instanceName);
ravelInstance.registerParameter(`${instanceName} options`, true, DEFAULT_OPTIONS);
}
prelisten(ravelInstance) {
// overlay user options onto defaults
const ops = {};
Object.assign(ops, DEFAULT_OPTIONS);
Object.assign(ops, ravelInstance.get(`${this.name} options`));
this.connectionOptions = ops;
}
getTransactionConnection() {
return new Promise((resolve, reject) => {
rethinkdb.connect(this.connectionOptions, function(connectionErr, connection) {
if (connectionErr) {
reject(connectionErr);
} else {
resolve(connection);
}
});
});
}
/**
* End a transaction and close the connection.
* Rollback the transaction iff finalErr !== null.
*
* @param {Object} connection A connection object which was used throughout the transaction
* @param {Boolean} shouldCommit If true, commit, otherwise rollback. This provider does not support rollback.
* @return {Promise} resolved, or rejected if there was an error while closing the connection.
*/
exitTransaction(connection/*, shouldCommit*/) {
return new Promise((resolve, reject) => {
try {
connection.close();
resolve();
} catch (err) {
reject(err);
}
});
}
}
module.exports = RethinkdbProvider;