Merge pull request #956 from supersolid/steven.dboptions

Add database options to ParseServer constructor and pass to MongoStorageAdapter
This commit is contained in:
Florent Vilmart
2016-03-11 12:39:30 -05:00
5 changed files with 44 additions and 7 deletions

View 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();
});
});

View File

@@ -26,7 +26,7 @@ var defaultConfiguration = {
collectionPrefix: 'test_',
fileKey: 'test',
push: {
'ios': {
'ios': {
cert: 'prodCert.pem',
key: 'prodKey.pem',
production: true,
@@ -81,7 +81,7 @@ afterEach(function(done) {
Parse.User.logOut().then(() => {
return clearData();
}).then(() => {
DatabaseAdapter.clearDatabaseURIs();
DatabaseAdapter.clearDatabaseSettings();
done();
}, (error) => {
console.log('error in clearData', error);

View File

@@ -10,12 +10,14 @@ const MongoSchemaCollectionName = '_SCHEMA';
export class MongoStorageAdapter {
// Private
_uri: string;
_options: Object;
// Public
connectionPromise;
database;
constructor(uri: string) {
constructor(uri: string, options: Object) {
this._uri = uri;
this._options = options;
}
connect() {
@@ -23,7 +25,7 @@ export class MongoStorageAdapter {
return this.connectionPromise;
}
this.connectionPromise = MongoClient.connect(this._uri).then(database => {
this.connectionPromise = MongoClient.connect(this._uri, this._options).then(database => {
this.database = database;
});
return this.connectionPromise;

View File

@@ -24,6 +24,7 @@ let adapter = MongoStorageAdapter;
let dbConnections = {};
let databaseURI = DefaultDatabaseURI;
let appDatabaseURIs = {};
let appDatabaseOptions = {};
function setAdapter(databaseAdapter) {
adapter = databaseAdapter;
@@ -37,10 +38,15 @@ function setAppDatabaseURI(appId, uri) {
appDatabaseURIs[appId] = uri;
}
function setAppDatabaseOptions(appId: string, options: Object) {
appDatabaseOptions[appId] = options;
}
//Used by tests
function clearDatabaseURIs() {
function clearDatabaseSettings() {
appDatabaseURIs = {};
dbConnections = {};
appDatabaseOptions = {};
}
function getDatabaseConnection(appId: string, collectionPrefix: string) {
@@ -50,7 +56,7 @@ function getDatabaseConnection(appId: string, collectionPrefix: string) {
var dbURI = (appDatabaseURIs[appId] ? appDatabaseURIs[appId] : databaseURI);
let storageAdapter = new adapter(dbURI);
let storageAdapter = new adapter(dbURI, appDatabaseOptions[appId]);
dbConnections[appId] = new DatabaseController(storageAdapter, {
collectionPrefix: collectionPrefix
});
@@ -62,7 +68,8 @@ module.exports = {
getDatabaseConnection: getDatabaseConnection,
setAdapter: setAdapter,
setDatabaseURI: setDatabaseURI,
setAppDatabaseOptions: setAppDatabaseOptions,
setAppDatabaseURI: setAppDatabaseURI,
clearDatabaseURIs: clearDatabaseURIs,
clearDatabaseSettings: clearDatabaseSettings,
defaultDatabaseURI: databaseURI
};

View File

@@ -84,6 +84,7 @@ function ParseServer({
push,
loggerAdapter,
databaseURI = DatabaseAdapter.defaultDatabaseURI,
databaseOptions,
cloud,
collectionPrefix = '',
clientKey,
@@ -120,6 +121,10 @@ function ParseServer({
DatabaseAdapter.setAppDatabaseURI(appId, databaseURI);
}
if (databaseOptions) {
DatabaseAdapter.setAppDatabaseOptions(appId, databaseOptions);
}
if (cloud) {
addParseCloud();
if (typeof cloud === 'function') {