Skip to content

Commit

Permalink
Decoupled providers and default adapters.
Browse files Browse the repository at this point in the history
Signed-off-by: Alexander Mays <maysale01@gmail.com>
  • Loading branch information
Alexander Mays committed Feb 9, 2016
1 parent 20b7835 commit 309775d
Show file tree
Hide file tree
Showing 7 changed files with 44 additions and 38 deletions.
2 changes: 1 addition & 1 deletion spec/helper.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ var cloudMain = process.env.CLOUD_CODE_MAIN || './cloud/main.js';

var config = {
database: {
databaseURI: databaseURI,
databaseURI: databaseURI || "mongodb://localhost:27017/parse",
/** adapter: "../ExportAdapter" */
},
cache: {
Expand Down
5 changes: 3 additions & 2 deletions src/classes/BaseProvider.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,9 @@ export class BaseProvider {
return adapter;
}

setup (config = {}) {
const adapter = this.resolveAdapter(config.adapter || this.DEFAULT_ADAPTER, config.options);
setup (config = {}, defaultConfig = {}) {
this.config = Object.assign(defaultConfig, config);
const adapter = this.resolveAdapter(this.config.adapter || this.DEFAULT_ADAPTER, this.config.options);
this.setAdapter(adapter);
}
}
Expand Down
7 changes: 1 addition & 6 deletions src/classes/CacheProvider.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,6 @@ import { default as BaseProvider } from './BaseProvider';
* @extends {BaseProvider}
* @param {Object} adapter - A cache adapter
*/
export class CacheProvider extends BaseProvider {
constructor() {
super(...arguments);
this.DEFAULT_ADAPTER = './MemoryCache';
}
}
export class CacheProvider extends BaseProvider {}

export default new CacheProvider();
15 changes: 4 additions & 11 deletions src/classes/DatabaseProvider.js
Original file line number Diff line number Diff line change
@@ -1,20 +1,13 @@
import { default as BaseProvider } from './BaseProvider';
import { default as CacheProvider } from './CacheProvider';

const DEFAULT_URI = "mongodb://localhost:27017/parse";

export class DatabaseProvider extends BaseProvider {
constructor() {
super(...arguments);
this.DEFAULT_ADAPTER = '../ExportAdapter';
}

setup(config = {}) {
this.dbConnections = config.dbConnections || this.dbConnections || {};
this.databaseURI = config.defaultURI || DEFAULT_URI;
this.appDatabaseURIs = config.appDatabaseURIs || {};

setup(config = {}, defaultConfig = {}) {
super.setup(...arguments);
this.dbConnections = this.dbConnections || {};
this.appDatabaseURIs = this.appDatabaseURIs || {};
this.databaseURI = this.config.databaseURI || this.databaseURI;
}

// TODO: Reimplement this whenever @Flovilmart finishes running CloudCode in subprocesses
Expand Down
7 changes: 1 addition & 6 deletions src/classes/FilesProvider.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,5 @@
import { default as BaseProvider } from './BaseProvider';

export class FilesProvider extends BaseProvider {
constructor() {
super(...arguments);
this.DEFAULT_ADAPTER = '../GridStoreAdapter'
}
}
export class FilesProvider extends BaseProvider {}

export default new FilesProvider();
10 changes: 5 additions & 5 deletions src/files.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ var bodyParser = require('body-parser'),
Parse = require('parse/node').Parse,
rack = require('hat').rack();

var FilesProvider = require('./classes/FilesProvider').default;
import { default as FilesProvider } from './classes/FilesProvider';

var router = express.Router();

var processCreate = function(req, res, next) {
Expand Down Expand Up @@ -44,12 +45,11 @@ var processCreate = function(req, res, next) {
if (!hasExtension && contentType && mime.extension(contentType)) {
extension = '.' + mime.extension(contentType);
}

var filename = rack() + '_' + req.params.filename + extension;
FilesAdapter.create(req.config, filename, req.body)
FilesAdapter.createFileAsync(req.config, filename, req.body)
.then(() => {
res.status(201);
var location = FilesAdapter.location(req.config, req, filename);
var location = FilesAdapter.getFileLocation(req.config, req, filename);
res.set('Location', location);
res.json({ url: location, name: filename });
}).catch((error) => {
Expand All @@ -62,7 +62,7 @@ var processCreate = function(req, res, next) {
var processGet = function(req, res) {
var FilesAdapter = FilesProvider.getAdapter();
var config = new Config(req.params.appId);
FilesAdapter.get(config, req.params.filename)
FilesAdapter.getFileDataAsync(config, req.params.filename)
.then((data) => {
res.status(200);
var contentType = mime.lookup(req.params.filename);
Expand Down
36 changes: 29 additions & 7 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,14 @@ var batch = require('./batch'),
PromiseRouter = require('./PromiseRouter'),
httpRequest = require('./httpRequest');

var ParseApp = require('./classes/ParseApp').default;
var CacheProvider = require('./classes/CacheProvider').default;
var FilesProvider = require('./classes/FilesProvider').default;
var DatabaseProvider = require('./classes/DatabaseProvider').default;
import { default as ParseApp } from './classes/ParseApp';
import { default as CacheProvider } from './classes/CacheProvider';
import { default as FilesProvider } from './classes/FilesProvider';
import { default as DatabaseProvider } from './classes/DatabaseProvider';

import { default as DEFAULT_CACHE_ADAPTER } from './classes/MemoryCache';
import { default as DEFAULT_FILES_ADAPTER } from './GridStoreAdapter';
import { default as DEFAULT_DATABASE_ADAPTER } from './ExportAdapter';

// Mutate the Parse object to add the Cloud Code handlers
addParseCloud();
Expand Down Expand Up @@ -41,11 +45,29 @@ addParseCloud();
// "restAPIKey": optional key from Parse dashboard
// "javascriptKey": optional key from Parse dashboard

const SERVER_DEFAULT_CONFIG = {
"cache": {
adapter: DEFAULT_CACHE_ADAPTER,
options: {
defaultTtl: 10 * 60 * 1000 // 10 min in ms
}
},
"files": {
adapter: DEFAULT_FILES_ADAPTER,
options: {}
},
"database": {
adapter: DEFAULT_DATABASE_ADAPTER,
databaseURI: "mongodb://localhost:27017/parse",
options: {}
}
}

function ParseServer(args) {
// Setup providers
CacheProvider.setup(args.cache);
FilesProvider.setup(args.files);
DatabaseProvider.setup(args.database);
CacheProvider.setup(args.cache, SERVER_DEFAULT_CONFIG.cache);
FilesProvider.setup(args.files, SERVER_DEFAULT_CONFIG.files);
DatabaseProvider.setup(args.database, SERVER_DEFAULT_CONFIG.database);

// Instantiate the app
var app = new ParseApp(args.app);
Expand Down

0 comments on commit 309775d

Please sign in to comment.