UNPKG

offshore

Version:
91 lines (73 loc) 2.43 kB
/** * Dependencies */ var _ = require('lodash'); var extend = require('../utils/extend'); var AdapterBase = require('../adapter'); var utils = require('../utils/helpers'); var AdapterMixin = require('./adapters'); var hop = utils.object.hasOwnProperty; /** * Query */ var Query = module.exports = function() { // Create a reference to an internal Adapter Base this.adapter = new AdapterBase({ connections: this.connections, query: this, collection: this.tableName || this.identity, identity: this.identity }); // Mixin Custom Adapter Functions. AdapterMixin.call(this); // Generate Dynamic Finders this.buildDynamicFinders(); }; /** * Automigrate * * @param {Function} cb */ Query.prototype.sync = function(cb) { var self = this; // If any adapters used in this collection have syncable turned off set migrate to safe. // // I don't think a collection would ever need two adapters where one needs migrations and // the other doesn't but it may be a possibility. The way the auto-migrations work now doesn't // allow for this either way so this should be good. We will probably need to revist this soonish // however and take a pass at getting something working for better migration systems. // - particlebanana _.keys(this.connections).forEach(function(connectionName) { var adapter = self.connections[connectionName]._adapter; // If not syncable, don't sync if (hop(adapter, 'syncable') && !adapter.syncable) { self.migrate = 'safe'; } }); // Assign synchronization behavior depending on migrate option in collection if (this.migrate && ['drop', 'alter', 'create', 'safe'].indexOf(this.migrate) > -1) { // Determine which sync strategy to use var strategyMethodName = 'migrate' + utils.capitalize(this.migrate); // Run automigration strategy this.adapter[strategyMethodName](function(err) { if (err) return cb(err); cb(); }); } // Throw Error else cb(new Error('Invalid `migrate` strategy defined for collection. Must be one of the following: drop, alter, create, safe')); }; _.extend( Query.prototype, require('./validate'), require('./ddl'), require('./dql'), require('./aggregate'), require('./composite'), require('./finders/basic'), require('./finders/helpers'), require('./finders/dynamicFinders'), require('./stream') ); // Make Extendable Query.extend = extend;