Merge pull request #956 from supersolid/steven.dboptions
Add database options to ParseServer constructor and pass to MongoStorageAdapter
This commit is contained in:
23
spec/DatabaseAdapter.spec.js
Normal file
23
spec/DatabaseAdapter.spec.js
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
let DatabaseAdapter = require('../src/DatabaseAdapter');
|
||||||
|
|
||||||
|
describe('DatabaseAdapter', () => {
|
||||||
|
it('options and URI are available to adapter', done => {
|
||||||
|
DatabaseAdapter.setAppDatabaseURI('optionsTest', 'mongodb://localhost:27017/optionsTest');
|
||||||
|
DatabaseAdapter.setAppDatabaseOptions('optionsTest', {foo: "bar"});
|
||||||
|
let optionsTestDatabaseConnection = DatabaseAdapter.getDatabaseConnection('optionsTest');
|
||||||
|
|
||||||
|
expect(optionsTestDatabaseConnection instanceof Object).toBe(true);
|
||||||
|
expect(optionsTestDatabaseConnection.adapter._options instanceof Object).toBe(true);
|
||||||
|
expect(optionsTestDatabaseConnection.adapter._options.foo).toBe("bar");
|
||||||
|
|
||||||
|
DatabaseAdapter.setAppDatabaseURI('noOptionsTest', 'mongodb://localhost:27017/noOptionsTest');
|
||||||
|
let noOptionsTestDatabaseConnection = DatabaseAdapter.getDatabaseConnection('noOptionsTest');
|
||||||
|
|
||||||
|
expect(noOptionsTestDatabaseConnection instanceof Object).toBe(true);
|
||||||
|
expect(noOptionsTestDatabaseConnection.adapter._options instanceof Object).toBe(false);
|
||||||
|
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -26,7 +26,7 @@ var defaultConfiguration = {
|
|||||||
collectionPrefix: 'test_',
|
collectionPrefix: 'test_',
|
||||||
fileKey: 'test',
|
fileKey: 'test',
|
||||||
push: {
|
push: {
|
||||||
'ios': {
|
'ios': {
|
||||||
cert: 'prodCert.pem',
|
cert: 'prodCert.pem',
|
||||||
key: 'prodKey.pem',
|
key: 'prodKey.pem',
|
||||||
production: true,
|
production: true,
|
||||||
@@ -81,7 +81,7 @@ afterEach(function(done) {
|
|||||||
Parse.User.logOut().then(() => {
|
Parse.User.logOut().then(() => {
|
||||||
return clearData();
|
return clearData();
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
DatabaseAdapter.clearDatabaseURIs();
|
DatabaseAdapter.clearDatabaseSettings();
|
||||||
done();
|
done();
|
||||||
}, (error) => {
|
}, (error) => {
|
||||||
console.log('error in clearData', error);
|
console.log('error in clearData', error);
|
||||||
|
|||||||
@@ -10,12 +10,14 @@ const MongoSchemaCollectionName = '_SCHEMA';
|
|||||||
export class MongoStorageAdapter {
|
export class MongoStorageAdapter {
|
||||||
// Private
|
// Private
|
||||||
_uri: string;
|
_uri: string;
|
||||||
|
_options: Object;
|
||||||
// Public
|
// Public
|
||||||
connectionPromise;
|
connectionPromise;
|
||||||
database;
|
database;
|
||||||
|
|
||||||
constructor(uri: string) {
|
constructor(uri: string, options: Object) {
|
||||||
this._uri = uri;
|
this._uri = uri;
|
||||||
|
this._options = options;
|
||||||
}
|
}
|
||||||
|
|
||||||
connect() {
|
connect() {
|
||||||
@@ -23,7 +25,7 @@ export class MongoStorageAdapter {
|
|||||||
return this.connectionPromise;
|
return this.connectionPromise;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.connectionPromise = MongoClient.connect(this._uri).then(database => {
|
this.connectionPromise = MongoClient.connect(this._uri, this._options).then(database => {
|
||||||
this.database = database;
|
this.database = database;
|
||||||
});
|
});
|
||||||
return this.connectionPromise;
|
return this.connectionPromise;
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ let adapter = MongoStorageAdapter;
|
|||||||
let dbConnections = {};
|
let dbConnections = {};
|
||||||
let databaseURI = DefaultDatabaseURI;
|
let databaseURI = DefaultDatabaseURI;
|
||||||
let appDatabaseURIs = {};
|
let appDatabaseURIs = {};
|
||||||
|
let appDatabaseOptions = {};
|
||||||
|
|
||||||
function setAdapter(databaseAdapter) {
|
function setAdapter(databaseAdapter) {
|
||||||
adapter = databaseAdapter;
|
adapter = databaseAdapter;
|
||||||
@@ -37,10 +38,15 @@ function setAppDatabaseURI(appId, uri) {
|
|||||||
appDatabaseURIs[appId] = uri;
|
appDatabaseURIs[appId] = uri;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setAppDatabaseOptions(appId: string, options: Object) {
|
||||||
|
appDatabaseOptions[appId] = options;
|
||||||
|
}
|
||||||
|
|
||||||
//Used by tests
|
//Used by tests
|
||||||
function clearDatabaseURIs() {
|
function clearDatabaseSettings() {
|
||||||
appDatabaseURIs = {};
|
appDatabaseURIs = {};
|
||||||
dbConnections = {};
|
dbConnections = {};
|
||||||
|
appDatabaseOptions = {};
|
||||||
}
|
}
|
||||||
|
|
||||||
function getDatabaseConnection(appId: string, collectionPrefix: string) {
|
function getDatabaseConnection(appId: string, collectionPrefix: string) {
|
||||||
@@ -50,7 +56,7 @@ function getDatabaseConnection(appId: string, collectionPrefix: string) {
|
|||||||
|
|
||||||
var dbURI = (appDatabaseURIs[appId] ? appDatabaseURIs[appId] : databaseURI);
|
var dbURI = (appDatabaseURIs[appId] ? appDatabaseURIs[appId] : databaseURI);
|
||||||
|
|
||||||
let storageAdapter = new adapter(dbURI);
|
let storageAdapter = new adapter(dbURI, appDatabaseOptions[appId]);
|
||||||
dbConnections[appId] = new DatabaseController(storageAdapter, {
|
dbConnections[appId] = new DatabaseController(storageAdapter, {
|
||||||
collectionPrefix: collectionPrefix
|
collectionPrefix: collectionPrefix
|
||||||
});
|
});
|
||||||
@@ -62,7 +68,8 @@ module.exports = {
|
|||||||
getDatabaseConnection: getDatabaseConnection,
|
getDatabaseConnection: getDatabaseConnection,
|
||||||
setAdapter: setAdapter,
|
setAdapter: setAdapter,
|
||||||
setDatabaseURI: setDatabaseURI,
|
setDatabaseURI: setDatabaseURI,
|
||||||
|
setAppDatabaseOptions: setAppDatabaseOptions,
|
||||||
setAppDatabaseURI: setAppDatabaseURI,
|
setAppDatabaseURI: setAppDatabaseURI,
|
||||||
clearDatabaseURIs: clearDatabaseURIs,
|
clearDatabaseSettings: clearDatabaseSettings,
|
||||||
defaultDatabaseURI: databaseURI
|
defaultDatabaseURI: databaseURI
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -84,6 +84,7 @@ function ParseServer({
|
|||||||
push,
|
push,
|
||||||
loggerAdapter,
|
loggerAdapter,
|
||||||
databaseURI = DatabaseAdapter.defaultDatabaseURI,
|
databaseURI = DatabaseAdapter.defaultDatabaseURI,
|
||||||
|
databaseOptions,
|
||||||
cloud,
|
cloud,
|
||||||
collectionPrefix = '',
|
collectionPrefix = '',
|
||||||
clientKey,
|
clientKey,
|
||||||
@@ -120,6 +121,10 @@ function ParseServer({
|
|||||||
DatabaseAdapter.setAppDatabaseURI(appId, databaseURI);
|
DatabaseAdapter.setAppDatabaseURI(appId, databaseURI);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (databaseOptions) {
|
||||||
|
DatabaseAdapter.setAppDatabaseOptions(appId, databaseOptions);
|
||||||
|
}
|
||||||
|
|
||||||
if (cloud) {
|
if (cloud) {
|
||||||
addParseCloud();
|
addParseCloud();
|
||||||
if (typeof cloud === 'function') {
|
if (typeof cloud === 'function') {
|
||||||
|
|||||||
Reference in New Issue
Block a user