12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- var Utils = require("./../utils")
- , HasOne = require('./has-one')
- , HasMany = require("./has-many")
- , BelongsTo = require("./belongs-to")
- /* Defines Mixin for all models. */
- var Mixin = module.exports = function(){}
- Mixin.hasOne = function(associatedDAOFactory, options) {
- // Since this is a mixin, we'll need a unique variable name for hooks (since DAOFactory will override our hooks option)
- options = options || {}
- options.hooks = options.hooks === undefined ? false : Boolean(options.hooks)
- options.useHooks = options.hooks
- // the id is in the foreign table
- var association = new HasOne(this, associatedDAOFactory, Utils._.extend(options, this.options))
- this.associations[association.associationAccessor] = association.injectAttributes()
- association.injectGetter(this.DAO.prototype);
- association.injectSetter(this.DAO.prototype);
- association.injectCreator(this.DAO.prototype);
- return this
- }
- Mixin.belongsTo = function(associatedDAOFactory, options) {
- // Since this is a mixin, we'll need a unique variable name for hooks (since DAOFactory will override our hooks option)
- options = options || {}
- options.hooks = options.hooks === undefined ? false : Boolean(options.hooks)
- options.useHooks = options.hooks
- // the id is in this table
- var association = new BelongsTo(this, associatedDAOFactory, Utils._.extend(options, this.options))
- this.associations[association.associationAccessor] = association.injectAttributes()
- association.injectGetter(this.DAO.prototype)
- association.injectSetter(this.DAO.prototype)
- association.injectCreator(this.DAO.prototype)
- return this
- }
- Mixin.hasMany = function(associatedDAOFactory, options) {
- // Since this is a mixin, we'll need a unique variable name for hooks (since DAOFactory will override our hooks option)
- options = options || {}
- options.hooks = options.hooks === undefined ? false : Boolean(options.hooks)
- options.useHooks = options.hooks
- options = Utils._.extend(options, Utils._.omit(this.options, ['hooks']))
- // the id is in the foreign table or in a connecting table
- var association = new HasMany(this, associatedDAOFactory, options)
- this.associations[association.associationAccessor] = association.injectAttributes()
- association.injectGetter(this.DAO.prototype)
- association.injectSetter(this.DAO.prototype)
- association.injectCreator(this.DAO.prototype)
- return this
- }
- Mixin.getAssociation = function(target, alias) {
- for (var associationName in this.associations) {
- if (this.associations.hasOwnProperty(associationName)) {
- var association = this.associations[associationName]
- if (association.target === target && (alias === undefined ? !association.isAliased : association.as === alias)) {
- return association
- }
- }
- }
- return null
- }
- Mixin.getAssociationByAlias = function(alias) {
- for (var associationName in this.associations) {
- if (this.associations.hasOwnProperty(associationName)) {
- var association = this.associations[associationName]
- if (association.as === alias) {
- return association
- }
- }
- }
- return null
- }
- /* example for instance methods:
- Mixin.prototype.test = function() {
- console.log('asd')
- }
- */
|