Skip to content

Commit 2c991a4

Browse files
committed
Merge pull request #956 from supersolid/steven.dboptions
Add database options to ParseServer constructor and pass to MongoStorageAdapter
2 parents cd7a4b8 + 6e65a8f commit 2c991a4

File tree

5 files changed

+44
-7
lines changed

5 files changed

+44
-7
lines changed

spec/DatabaseAdapter.spec.js

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
'use strict';
2+
3+
let DatabaseAdapter = require('../src/DatabaseAdapter');
4+
5+
describe('DatabaseAdapter', () => {
6+
it('options and URI are available to adapter', done => {
7+
DatabaseAdapter.setAppDatabaseURI('optionsTest', 'mongodb://localhost:27017/optionsTest');
8+
DatabaseAdapter.setAppDatabaseOptions('optionsTest', {foo: "bar"});
9+
let optionsTestDatabaseConnection = DatabaseAdapter.getDatabaseConnection('optionsTest');
10+
11+
expect(optionsTestDatabaseConnection instanceof Object).toBe(true);
12+
expect(optionsTestDatabaseConnection.adapter._options instanceof Object).toBe(true);
13+
expect(optionsTestDatabaseConnection.adapter._options.foo).toBe("bar");
14+
15+
DatabaseAdapter.setAppDatabaseURI('noOptionsTest', 'mongodb://localhost:27017/noOptionsTest');
16+
let noOptionsTestDatabaseConnection = DatabaseAdapter.getDatabaseConnection('noOptionsTest');
17+
18+
expect(noOptionsTestDatabaseConnection instanceof Object).toBe(true);
19+
expect(noOptionsTestDatabaseConnection.adapter._options instanceof Object).toBe(false);
20+
21+
done();
22+
});
23+
});

spec/helper.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ var defaultConfiguration = {
2626
collectionPrefix: 'test_',
2727
fileKey: 'test',
2828
push: {
29-
'ios': {
29+
'ios': {
3030
cert: 'prodCert.pem',
3131
key: 'prodKey.pem',
3232
production: true,
@@ -81,7 +81,7 @@ afterEach(function(done) {
8181
Parse.User.logOut().then(() => {
8282
return clearData();
8383
}).then(() => {
84-
DatabaseAdapter.clearDatabaseURIs();
84+
DatabaseAdapter.clearDatabaseSettings();
8585
done();
8686
}, (error) => {
8787
console.log('error in clearData', error);

src/Adapters/Storage/Mongo/MongoStorageAdapter.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,22 @@ const MongoSchemaCollectionName = '_SCHEMA';
1010
export class MongoStorageAdapter {
1111
// Private
1212
_uri: string;
13+
_options: Object;
1314
// Public
1415
connectionPromise;
1516
database;
1617

17-
constructor(uri: string) {
18+
constructor(uri: string, options: Object) {
1819
this._uri = uri;
20+
this._options = options;
1921
}
2022

2123
connect() {
2224
if (this.connectionPromise) {
2325
return this.connectionPromise;
2426
}
2527

26-
this.connectionPromise = MongoClient.connect(this._uri).then(database => {
28+
this.connectionPromise = MongoClient.connect(this._uri, this._options).then(database => {
2729
this.database = database;
2830
});
2931
return this.connectionPromise;

src/DatabaseAdapter.js

+10-3
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ let adapter = MongoStorageAdapter;
2424
let dbConnections = {};
2525
let databaseURI = DefaultDatabaseURI;
2626
let appDatabaseURIs = {};
27+
let appDatabaseOptions = {};
2728

2829
function setAdapter(databaseAdapter) {
2930
adapter = databaseAdapter;
@@ -37,10 +38,15 @@ function setAppDatabaseURI(appId, uri) {
3738
appDatabaseURIs[appId] = uri;
3839
}
3940

41+
function setAppDatabaseOptions(appId: string, options: Object) {
42+
appDatabaseOptions[appId] = options;
43+
}
44+
4045
//Used by tests
41-
function clearDatabaseURIs() {
46+
function clearDatabaseSettings() {
4247
appDatabaseURIs = {};
4348
dbConnections = {};
49+
appDatabaseOptions = {};
4450
}
4551

4652
function getDatabaseConnection(appId: string, collectionPrefix: string) {
@@ -50,7 +56,7 @@ function getDatabaseConnection(appId: string, collectionPrefix: string) {
5056

5157
var dbURI = (appDatabaseURIs[appId] ? appDatabaseURIs[appId] : databaseURI);
5258

53-
let storageAdapter = new adapter(dbURI);
59+
let storageAdapter = new adapter(dbURI, appDatabaseOptions[appId]);
5460
dbConnections[appId] = new DatabaseController(storageAdapter, {
5561
collectionPrefix: collectionPrefix
5662
});
@@ -62,7 +68,8 @@ module.exports = {
6268
getDatabaseConnection: getDatabaseConnection,
6369
setAdapter: setAdapter,
6470
setDatabaseURI: setDatabaseURI,
71+
setAppDatabaseOptions: setAppDatabaseOptions,
6572
setAppDatabaseURI: setAppDatabaseURI,
66-
clearDatabaseURIs: clearDatabaseURIs,
73+
clearDatabaseSettings: clearDatabaseSettings,
6774
defaultDatabaseURI: databaseURI
6875
};

src/index.js

+5
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ function ParseServer({
8484
push,
8585
loggerAdapter,
8686
databaseURI = DatabaseAdapter.defaultDatabaseURI,
87+
databaseOptions,
8788
cloud,
8889
collectionPrefix = '',
8990
clientKey,
@@ -120,6 +121,10 @@ function ParseServer({
120121
DatabaseAdapter.setAppDatabaseURI(appId, databaseURI);
121122
}
122123

124+
if (databaseOptions) {
125+
DatabaseAdapter.setAppDatabaseOptions(appId, databaseOptions);
126+
}
127+
123128
if (cloud) {
124129
addParseCloud();
125130
if (typeof cloud === 'function') {

0 commit comments

Comments
 (0)