Skip to content

Commit df98783

Browse files
committed
Store collection prefix in mongo adapter, and clean up adapter interface
1 parent 512251e commit df98783

6 files changed

+35
-31
lines changed

spec/DatabaseAdapter.spec.js

+5-5
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,15 @@ describe('DatabaseAdapter', () => {
88
DatabaseAdapter.setAppDatabaseOptions('optionsTest', {foo: "bar"});
99
let optionsTestDatabaseConnection = DatabaseAdapter.getDatabaseConnection('optionsTest');
1010

11-
expect(optionsTestDatabaseConnection instanceof Object).toBe(true);
12-
expect(optionsTestDatabaseConnection.adapter._options instanceof Object).toBe(true);
13-
expect(optionsTestDatabaseConnection.adapter._options.foo).toBe("bar");
11+
expect(optionsTestDatabaseConnection).toEqual(jasmine.any(Object));
12+
expect(optionsTestDatabaseConnection.adapter._mongoOptions).toEqual(jasmine.any(Object));
13+
expect(optionsTestDatabaseConnection.adapter._mongoOptions.foo).toBe("bar");
1414

1515
DatabaseAdapter.setAppDatabaseURI('noOptionsTest', 'mongodb://localhost:27017/noOptionsTest');
1616
let noOptionsTestDatabaseConnection = DatabaseAdapter.getDatabaseConnection('noOptionsTest');
1717

18-
expect(noOptionsTestDatabaseConnection instanceof Object).toBe(true);
19-
expect(noOptionsTestDatabaseConnection.adapter._options instanceof Object).toBe(false);
18+
expect(noOptionsTestDatabaseConnection).toEqual(jasmine.any(Object));
19+
expect(noOptionsTestDatabaseConnection.adapter._mongoOptions).toEqual(jasmine.any(Object));
2020

2121
done();
2222
});

spec/DatabaseController.spec.js

+4-2
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@ let MongoStorageAdapter = require('../src/Adapters/Storage/Mongo/MongoStorageAda
55

66
describe('DatabaseController', () => {
77
it('can be constructed', done => {
8-
let adapter = new MongoStorageAdapter('mongodb://localhost:27017/test');
8+
let adapter = new MongoStorageAdapter({
9+
uri: 'mongodb://localhost:27017/test'
10+
});
911
let databaseController = new DatabaseController(adapter, {
10-
collectionPrefix: 'test_'
12+
collectionPrefix: 'test_'
1113
});
1214
databaseController.connect().then(done, error => {
1315
console.log('error', error.stack);

spec/MongoStorageAdapter.spec.js

+9-6
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@ const MongoClient = require('mongodb').MongoClient;
66
describe('MongoStorageAdapter', () => {
77
it('auto-escapes symbols in auth information', () => {
88
spyOn(MongoClient, 'connect').and.returnValue(Promise.resolve(null));
9-
new MongoStorageAdapter('mongodb://user!with@+ symbols:password!with@+ symbols@localhost:1234/parse', {})
10-
.connect();
9+
new MongoStorageAdapter({
10+
uri: 'mongodb://user!with@+ symbols:password!with@+ symbols@localhost:1234/parse'
11+
}).connect();
1112
expect(MongoClient.connect).toHaveBeenCalledWith(
1213
'mongodb://user!with%40%2B%20symbols:password!with%40%2B%20symbols@localhost:1234/parse',
1314
jasmine.any(Object)
@@ -16,8 +17,9 @@ describe('MongoStorageAdapter', () => {
1617

1718
it("doesn't double escape already URI-encoded information", () => {
1819
spyOn(MongoClient, 'connect').and.returnValue(Promise.resolve(null));
19-
new MongoStorageAdapter('mongodb://user!with%40%2B%20symbols:password!with%40%2B%20symbols@localhost:1234/parse', {})
20-
.connect();
20+
new MongoStorageAdapter({
21+
uri: 'mongodb://user!with%40%2B%20symbols:password!with%40%2B%20symbols@localhost:1234/parse'
22+
}).connect();
2123
expect(MongoClient.connect).toHaveBeenCalledWith(
2224
'mongodb://user!with%40%2B%20symbols:password!with%40%2B%20symbols@localhost:1234/parse',
2325
jasmine.any(Object)
@@ -27,8 +29,9 @@ describe('MongoStorageAdapter', () => {
2729
// https://github.com/ParsePlatform/parse-server/pull/148#issuecomment-180407057
2830
it('preserves replica sets', () => {
2931
spyOn(MongoClient, 'connect').and.returnValue(Promise.resolve(null));
30-
new MongoStorageAdapter('mongodb://test:[email protected]:59325,ds059315-a1.mongolab.com:59315/testDBname?replicaSet=rs-ds059415', {})
31-
.connect();
32+
new MongoStorageAdapter({
33+
uri: 'mongodb://test:[email protected]:59325,ds059315-a1.mongolab.com:59315/testDBname?replicaSet=rs-ds059415'
34+
}).connect();
3235
expect(MongoClient.connect).toHaveBeenCalledWith(
3336
'mongodb://test:[email protected]:59325,ds059315-a1.mongolab.com:59315/testDBname?replicaSet=rs-ds059415',
3437
jasmine.any(Object)

src/Adapters/Storage/Mongo/MongoStorageAdapter.js

+10-4
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,20 @@ const MongoSchemaCollectionName = '_SCHEMA';
1111
export class MongoStorageAdapter {
1212
// Private
1313
_uri: string;
14-
_options: Object;
14+
_collectionPrefix: string;
15+
_mongoOptions: Object;
1516
// Public
1617
connectionPromise;
1718
database;
1819

19-
constructor(uri: string, options: Object) {
20+
constructor({
21+
uri,
22+
collectionPrefix = '',
23+
mongoOptions = {},
24+
}) {
2025
this._uri = uri;
21-
this._options = options;
26+
this._collectionPrefix = collectionPrefix;
27+
this._mongoOptions = mongoOptions;
2228
}
2329

2430
connect() {
@@ -30,7 +36,7 @@ export class MongoStorageAdapter {
3036
// encoded
3137
const encodedUri = formatUrl(parseUrl(this._uri));
3238

33-
this.connectionPromise = MongoClient.connect(encodedUri, this._options).then(database => {
39+
this.connectionPromise = MongoClient.connect(encodedUri, this._mongoOptions).then(database => {
3440
this.database = database;
3541
});
3642
return this.connectionPromise;

src/DatabaseAdapter.js

+7-9
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,16 @@
1515
//
1616
// Default is MongoStorageAdapter.
1717

18-
import DatabaseController from './Controllers/DatabaseController';
18+
import DatabaseController from './Controllers/DatabaseController';
1919
import MongoStorageAdapter from './Adapters/Storage/Mongo/MongoStorageAdapter';
2020

2121
const DefaultDatabaseURI = 'mongodb://localhost:27017/parse';
2222

23-
let adapter = MongoStorageAdapter;
2423
let dbConnections = {};
2524
let databaseURI = DefaultDatabaseURI;
2625
let appDatabaseURIs = {};
2726
let appDatabaseOptions = {};
2827

29-
function setAdapter(databaseAdapter) {
30-
adapter = databaseAdapter;
31-
}
32-
3328
function setDatabaseURI(uri) {
3429
databaseURI = uri;
3530
}
@@ -68,17 +63,20 @@ function getDatabaseConnection(appId: string, collectionPrefix: string) {
6863

6964
var dbURI = (appDatabaseURIs[appId] ? appDatabaseURIs[appId] : databaseURI);
7065

71-
let storageAdapter = new adapter(dbURI, appDatabaseOptions[appId]);
66+
let storageAdapter = new MongoStorageAdapter({
67+
uri: dbURI,
68+
collectionPrefix: collectionPrefix,
69+
mongoOptions: appDatabaseOptions[appId]
70+
});
71+
7272
dbConnections[appId] = new DatabaseController(storageAdapter, {
7373
collectionPrefix: collectionPrefix
7474
});
7575
return dbConnections[appId];
7676
}
7777

7878
module.exports = {
79-
dbConnections: dbConnections,
8079
getDatabaseConnection: getDatabaseConnection,
81-
setAdapter: setAdapter,
8280
setDatabaseURI: setDatabaseURI,
8381
setAppDatabaseOptions: setAppDatabaseOptions,
8482
setAppDatabaseURI: setAppDatabaseURI,

src/ParseServer.js

-5
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@ class ParseServer {
8484
appId = requiredParameter('You must provide an appId!'),
8585
masterKey = requiredParameter('You must provide a masterKey!'),
8686
appName,
87-
databaseAdapter,
8887
filesAdapter,
8988
push,
9089
loggerAdapter,
@@ -127,10 +126,6 @@ class ParseServer {
127126
})
128127
}
129128

130-
if (databaseAdapter) {
131-
DatabaseAdapter.setAdapter(databaseAdapter);
132-
}
133-
134129
if (databaseOptions) {
135130
DatabaseAdapter.setAppDatabaseOptions(appId, databaseOptions);
136131
}

0 commit comments

Comments
 (0)