Add ability to attach data source to an existing model
This commit is contained in:
parent
2c2768e929
commit
1dee840de5
|
@ -146,6 +146,7 @@ DataAccessObject.create = function (data, callback) {
|
||||||
}, obj);
|
}, obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// for chaining
|
||||||
return obj;
|
return obj;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -308,6 +309,13 @@ DataAccessObject.all = function all(params, cb) {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// shared by default
|
||||||
|
DataAccessObject.all.accepts = {arg: 'filter', type: 'object'};
|
||||||
|
DataAccessObject.all.shared = true;
|
||||||
|
DataAccessObject.all.http = {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find one record, same as `all`, limited by 1 and return object, not collection
|
* Find one record, same as `all`, limited by 1 and return object, not collection
|
||||||
*
|
*
|
||||||
|
|
|
@ -55,10 +55,16 @@ function DataSource(name, settings) {
|
||||||
}
|
}
|
||||||
ADL.call(this);
|
ADL.call(this);
|
||||||
this.setup(name, settings);
|
this.setup(name, settings);
|
||||||
|
|
||||||
|
// default DataAccessObject
|
||||||
|
this.DataAccessObject = this.constructor.DataAccessObject;
|
||||||
};
|
};
|
||||||
|
|
||||||
util.inherits(DataSource, ADL);
|
util.inherits(DataSource, ADL);
|
||||||
|
|
||||||
|
// allow child classes to supply a data access object
|
||||||
|
DataSource.DataAccessObject = DataAccessObject;
|
||||||
|
|
||||||
// Copy over statics
|
// Copy over statics
|
||||||
for (var m in ADL) {
|
for (var m in ADL) {
|
||||||
if (!DataSource.hasOwnProperty(m) && 'super_' !== m) {
|
if (!DataSource.hasOwnProperty(m) && 'super_' !== m) {
|
||||||
|
@ -198,13 +204,8 @@ DataSource.prototype.define = function defineClass(className, properties, settin
|
||||||
|
|
||||||
var NewClass = ADL.prototype.define.call(this, className, properties, settings);
|
var NewClass = ADL.prototype.define.call(this, className, properties, settings);
|
||||||
|
|
||||||
// inherit DataAccessObject methods
|
// add data access objects
|
||||||
for (var m in DataAccessObject) {
|
this.mixin(NewClass);
|
||||||
NewClass[m] = DataAccessObject[m];
|
|
||||||
}
|
|
||||||
for (var n in DataAccessObject.prototype) {
|
|
||||||
NewClass.prototype[n] = DataAccessObject.prototype[n];
|
|
||||||
}
|
|
||||||
|
|
||||||
if(this.adapter) {
|
if(this.adapter) {
|
||||||
// pass control to adapter
|
// pass control to adapter
|
||||||
|
@ -219,6 +220,41 @@ DataSource.prototype.define = function defineClass(className, properties, settin
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mixin DataAccessObject methods.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DataSource.prototype.mixin = function (ModelCtor) {
|
||||||
|
var DataAccessObject = this.DataAccessObject;
|
||||||
|
|
||||||
|
// inherit DataAccessObject methods
|
||||||
|
for (var m in DataAccessObject) {
|
||||||
|
ModelCtor[m] = DataAccessObject[m];
|
||||||
|
}
|
||||||
|
for (var n in DataAccessObject.prototype) {
|
||||||
|
ModelCtor.prototype[n] = DataAccessObject.prototype[n];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Attach an existing model to a data source.
|
||||||
|
*/
|
||||||
|
|
||||||
|
DataSource.prototype.attach = function (ModelCtor) {
|
||||||
|
this.mixin(ModelCtor);
|
||||||
|
|
||||||
|
if(this.adapter) {
|
||||||
|
// pass control to adapter
|
||||||
|
this.adapter.define({
|
||||||
|
model: ModelCtor,
|
||||||
|
properties: ModelCtor.properties,
|
||||||
|
settings: ModelCtor.settings
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Define single property named `prop` on `model`
|
* Define single property named `prop` on `model`
|
||||||
*
|
*
|
||||||
|
|
|
@ -6,6 +6,7 @@ module.exports = ModelBaseClass;
|
||||||
/**
|
/**
|
||||||
* Module dependencies
|
* Module dependencies
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var util = require('util');
|
var util = require('util');
|
||||||
var List = require('./list.js');
|
var List = require('./list.js');
|
||||||
require('./hooks.js');
|
require('./hooks.js');
|
||||||
|
@ -230,7 +231,6 @@ ModelBaseClass.prototype.inspect = function () {
|
||||||
return util.inspect(this.__data, false, 4, true);
|
return util.inspect(this.__data, false, 4, true);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check whether `s` is not undefined
|
* Check whether `s` is not undefined
|
||||||
* @param {Mixed} s
|
* @param {Mixed} s
|
||||||
|
|
Loading…
Reference in New Issue