Adjust the mixins
This commit is contained in:
parent
adf7c49c91
commit
36c22ab972
|
@ -13,6 +13,7 @@ var ValidationError = validations.ValidationError;
|
|||
var List = require('./list.js');
|
||||
require('./relations.js');
|
||||
var Inclusion = require('./include.js');
|
||||
var Relation = require('./relations.js');
|
||||
|
||||
/**
|
||||
* DAO class - base class for all persist objects
|
||||
|
@ -20,7 +21,7 @@ var Inclusion = require('./include.js');
|
|||
* This class describes only abstract behavior layer, refer to `lib/adapters/*.js`
|
||||
* to learn more about specific adapter implementations
|
||||
*
|
||||
* `DataAccessObject` mixes `Validatable` and `Hookable` classes methods
|
||||
* `DataAccessObject` mixes `Inclusion` classes methods
|
||||
*
|
||||
* @constructor
|
||||
* @param {Object} data - initial object data
|
||||
|
@ -624,5 +625,6 @@ function defineReadonlyProp(obj, key, value) {
|
|||
});
|
||||
}
|
||||
|
||||
jutil.mixin(DataAccessObject, validations.Validatable);
|
||||
// jutil.mixin(DataAccessObject, validations.Validatable);
|
||||
jutil.mixin(DataAccessObject, Inclusion);
|
||||
jutil.mixin(DataAccessObject, Relation);
|
||||
|
|
|
@ -11,6 +11,7 @@ var util = require('util');
|
|||
var jutil = require('./jutil');
|
||||
var List = require('./list');
|
||||
var Hookable = require('./hooks');
|
||||
var validations = require('./validations.js');
|
||||
|
||||
var BASE_TYPES = ['String', 'Boolean', 'Number', 'Date', 'Text'];
|
||||
|
||||
|
@ -248,4 +249,5 @@ ModelBaseClass.mixin = function(anotherClass, options) {
|
|||
}
|
||||
|
||||
jutil.mixin(ModelBaseClass, Hookable);
|
||||
jutil.mixin(ModelBaseClass, validations.Validatable);
|
||||
|
||||
|
|
|
@ -3,13 +3,14 @@
|
|||
*/
|
||||
var i8n = require('inflection');
|
||||
var defineScope = require('./scope.js').defineScope;
|
||||
var ModelBaseClass = require('./model.js');
|
||||
|
||||
/**
|
||||
* Relations mixins for ./dao.js
|
||||
*/
|
||||
var DataAccessObject = require('./dao.js');
|
||||
module.exports = Relation;
|
||||
|
||||
DataAccessObject.relationNameFor = function relationNameFor(foreignKey) {
|
||||
function Relation() {
|
||||
}
|
||||
|
||||
Relation.relationNameFor = function relationNameFor(foreignKey) {
|
||||
for (var rel in this.relations) {
|
||||
if (this.relations[rel].type === 'belongsTo' && this.relations[rel].keyFrom === foreignKey) {
|
||||
return rel;
|
||||
|
@ -20,11 +21,11 @@ DataAccessObject.relationNameFor = function relationNameFor(foreignKey) {
|
|||
/**
|
||||
* Declare hasMany relation
|
||||
*
|
||||
* @param {DataAccessObject} anotherClass - class to has many
|
||||
* @param {Relation} anotherClass - class to has many
|
||||
* @param {Object} params - configuration {as:, foreignKey:}
|
||||
* @example `User.hasMany(Post, {as: 'posts', foreignKey: 'authorId'});`
|
||||
*/
|
||||
DataAccessObject.hasMany = function hasMany(anotherClass, params) {
|
||||
Relation.hasMany = function hasMany(anotherClass, params) {
|
||||
var thisClass = this, thisClassName = this.modelName;
|
||||
params = params || {};
|
||||
if (typeof anotherClass === 'string') {
|
||||
|
@ -175,7 +176,7 @@ DataAccessObject.hasMany = function hasMany(anotherClass, params) {
|
|||
*
|
||||
* This optional parameter default value is false, so the related object will be loaded from cache if available.
|
||||
*/
|
||||
DataAccessObject.belongsTo = function (anotherClass, params) {
|
||||
Relation.belongsTo = function (anotherClass, params) {
|
||||
params = params || {};
|
||||
if ('string' === typeof anotherClass) {
|
||||
params.as = anotherClass;
|
||||
|
@ -232,7 +233,7 @@ DataAccessObject.belongsTo = function (anotherClass, params) {
|
|||
if (!refresh && this.__cachedRelations && (typeof this.__cachedRelations[methodName] !== 'undefined')) {
|
||||
cachedValue = this.__cachedRelations[methodName];
|
||||
}
|
||||
if (p instanceof DataAccessObject) { // acts as setter
|
||||
if (p instanceof ModelBaseClass) { // acts as setter
|
||||
this[fk] = p.id;
|
||||
this.__cachedRelations[methodName] = p;
|
||||
} else if (typeof p === 'function') { // acts as async getter
|
||||
|
@ -263,7 +264,7 @@ DataAccessObject.belongsTo = function (anotherClass, params) {
|
|||
*
|
||||
* Post.hasAndBelongsToMany('tags'); creates connection model 'PostTag'
|
||||
*/
|
||||
DataAccessObject.hasAndBelongsToMany = function hasAndBelongsToMany(anotherClass, params) {
|
||||
Relation.hasAndBelongsToMany = function hasAndBelongsToMany(anotherClass, params) {
|
||||
params = params || {};
|
||||
var models = this.schema.models;
|
||||
|
||||
|
|
Loading…
Reference in New Issue