diff --git a/spec/AdaptableController.spec.js b/spec/AdaptableController.spec.js index 12e73113..ce0ff20a 100644 --- a/spec/AdaptableController.spec.js +++ b/spec/AdaptableController.spec.js @@ -47,14 +47,16 @@ describe("AdaptableController", ()=>{ }); it("should instantiate the default adapter from Class", (done) => { - var controller = new AdaptableController(null, FilesAdapter); + AdaptableController.setDefaultAdapter(FilesAdapter); + var controller = new AdaptableController(); expect(controller.adapter instanceof FilesAdapter).toBe(true); done(); }); it("should use the default adapter", (done) => { var adapter = new FilesAdapter(); - var controller = new AdaptableController(null, adapter); + AdaptableController.setDefaultAdapter(adapter); + var controller = new AdaptableController(); expect(controller.adapter).toBe(adapter); done(); }); diff --git a/spec/LoggerController.spec.js b/spec/LoggerController.spec.js index 3475495e..28c4bfbb 100644 --- a/spec/LoggerController.spec.js +++ b/spec/LoggerController.spec.js @@ -76,12 +76,13 @@ describe('LoggerController', () => { }); it('should throw without an adapter', (done) => { - + LoggerController.setDefaultAdapter(undefined); var loggerController = new LoggerController(); expect(() => { loggerController.getLogs(); }).toThrow(); + LoggerController.setDefaultAdapter(FileLoggerAdapter); done(); }); }); diff --git a/src/Controllers/AdaptableController.js b/src/Controllers/AdaptableController.js index 41cf81fd..552253e0 100644 --- a/src/Controllers/AdaptableController.js +++ b/src/Controllers/AdaptableController.js @@ -8,6 +8,8 @@ based on the parameters passed */ +const DefaultAdapters = {}; + export class AdaptableController { /** * Check whether the api call has master key or not. @@ -17,12 +19,11 @@ export class AdaptableController { * Supported options types: * - string: the options will be loaded with required, when loaded, if default * is set on the returned object, we'll use that one to support modules - * - object: a plain javascript object (options.constructor === Object), if options.adapter is set, we'll try to load it with the same mechanics + * - object: a plain javascript object (options.constructor === Object), if options.adapter is set, we'll try to load it with the same mechanics. * - function: we'll create a new instance from that function, and pass the options object */ - constructor(options, defaultAdapter) { - - // Use the default by default + constructor(options) { + let adapter; // We have options and options have adapter key @@ -37,7 +38,7 @@ export class AdaptableController { } if (!adapter) { - adapter = defaultAdapter; + adapter = this.defaultAdapter(); } // This is a string, require the module @@ -58,6 +59,15 @@ export class AdaptableController { this.adapter = adapter; this.options = options; } + + defaultAdapter() { + return DefaultAdapters[this.constructor.name]; + } + + // Sets the default adapter for that Class + static setDefaultAdapter(defaultAdapter) { + DefaultAdapters[this.name] = defaultAdapter; + } } export default AdaptableController; \ No newline at end of file diff --git a/src/index.js b/src/index.js index b4027321..e34f4c4a 100644 --- a/src/index.js +++ b/src/index.js @@ -36,6 +36,11 @@ import { LogsRouter } from './Routers/LogsRouter'; import { FileLoggerAdapter } from './Adapters/Logger/FileLoggerAdapter'; import { LoggerController } from './Controllers/LoggerController'; + +FilesController.setDefaultAdapter(GridStoreAdapter); +PushController.setDefaultAdapter(ParsePushAdapter); +LoggerController.setDefaultAdapter(FileLoggerAdapter); + // Mutate the Parse object to add the Cloud Code handlers addParseCloud(); @@ -107,9 +112,9 @@ function ParseServer({ // We pass the options and the base class for the adatper, // Note that passing an instance would work too - const filesController = new FilesController(filesAdapter, GridStoreAdapter); - const pushController = new PushController(push, new ParsePushAdapter(push)); - const loggerController = new LoggerController(loggerAdapter, FileLoggerAdapter); + const filesController = new FilesController(filesAdapter); + const pushController = new PushController(push); + const loggerController = new LoggerController(loggerAdapter); cache.apps[appId] = { masterKey: masterKey,