不要怂,就是干,撸起袖子干!

Commit d1456c7d by Sascha Depold

minor refactoring

1 parent c546996c
Showing with 62 additions and 59 deletions
...@@ -14,9 +14,9 @@ var ModelDefinition = module.exports = function(name, attributes, options) { ...@@ -14,9 +14,9 @@ var ModelDefinition = module.exports = function(name, attributes, options) {
this.modelManager = null // defined by model-manager during addModel this.modelManager = null // defined by model-manager during addModel
this.associations = {} this.associations = {}
this.addDefaultAttributes() this.__addDefaultAttributes()
this.addOptionalClassMethods() this.__addOptionalClassMethods()
this.findAutoIncrementField() this.__findAutoIncrementField()
} }
Utils.addEventEmitter(ModelDefinition) Utils.addEventEmitter(ModelDefinition)
...@@ -24,58 +24,12 @@ ModelDefinition.prototype.__defineGetter__('QueryGenerator', function() { ...@@ -24,58 +24,12 @@ ModelDefinition.prototype.__defineGetter__('QueryGenerator', function() {
return this.modelManager.sequelize.connectorManager.getQueryGenerator() return this.modelManager.sequelize.connectorManager.getQueryGenerator()
}) })
ModelDefinition.prototype.addOptionalClassMethods = function() {
var self = this
Utils._.each(this.options.classMethods || {}, function(fct, name) { self[name] = fct })
}
ModelDefinition.prototype.addDefaultAttributes = function() {
var defaultAttributes = {id: {type: DataTypes.INTEGER, allowNull: false, primaryKey: true, autoIncrement: true}}
, self = this
if(this.hasPrimaryKeys) defaultAttributes = {}
if(this.options.timestamps) {
defaultAttributes[Utils._.underscoredIf('createdAt', this.options.underscored)] = {type: DataTypes.DATE, allowNull: false}
defaultAttributes[Utils._.underscoredIf('updatedAt', this.options.underscored)] = {type: DataTypes.DATE, allowNull: false}
if(this.options.paranoid)
defaultAttributes[Utils._.underscoredIf('deletedAt', this.options.underscored)] = {type: DataTypes.DATE}
}
defaultAttributes = Utils.simplifyAttributes(defaultAttributes)
Utils._.map(defaultAttributes, function(value, attr) { self.attributes[attr] = value })
}
ModelDefinition.prototype.findAutoIncrementField = function() {
var self = this
this.autoIncrementField = null
Utils._.map(this.attributes, function(definition, name) {
if (definition && (definition.indexOf('auto_increment') > -1)) {
if (self.autoIncrementField)
throw new Error('Invalid model definition. Only one autoincrement field allowed.')
else
self.autoIncrementField = name
}
})
}
ModelDefinition.prototype.query = function() {
var args = Utils._.map(arguments, function(arg, _) { return arg })
, s = this.modelManager.sequelize
// add this as the second argument
if(arguments.length == 1) args.push(this)
return s.query.apply(s, args)
}
ModelDefinition.prototype.sync = function(options) { ModelDefinition.prototype.sync = function(options) {
options = Utils.merge(options || {}, this.options) options = Utils.merge(options || {}, this.options)
var self = this var self = this
var doQuery = function() { var doQuery = function() {
self.query(self.QueryGenerator.createTableQuery(self.tableName, self.attributes, options)) self.__query(self.QueryGenerator.createTableQuery(self.tableName, self.attributes, options))
.on('success', function() { self.emit('success', self) }) .on('success', function() { self.emit('success', self) })
.on('failure', function(err) { self.emit('failure', err) }) .on('failure', function(err) { self.emit('failure', err) })
} }
...@@ -92,18 +46,18 @@ ModelDefinition.prototype.sync = function(options) { ...@@ -92,18 +46,18 @@ ModelDefinition.prototype.sync = function(options) {
} }
ModelDefinition.prototype.drop = function() { ModelDefinition.prototype.drop = function() {
return this.query(this.QueryGenerator.dropTableQuery(this.tableName, this.id)) return this.__query(this.QueryGenerator.dropTableQuery(this.tableName, this.id))
} }
ModelDefinition.prototype.__defineGetter__('all', function() { ModelDefinition.prototype.all = function() {
return this.query(this.QueryGenerator.selectQuery(this.tableName)) return this.__query(this.QueryGenerator.selectQuery(this.tableName))
}) }
ModelDefinition.prototype.count = function(options) { ModelDefinition.prototype.count = function(options) {
var self = this var self = this
var emitter = new Utils.CustomEventEmitter(function() { var emitter = new Utils.CustomEventEmitter(function() {
self.query(self.QueryGenerator.countQuery(self.tableName, options), self, {plain: true}).on('success', function(obj) { self.__query(self.QueryGenerator.countQuery(self.tableName, options), self, {plain: true}).on('success', function(obj) {
emitter.emit('success', obj['count(*)']) emitter.emit('success', obj['count(*)'])
}) })
}) })
...@@ -114,7 +68,7 @@ ModelDefinition.prototype.max = function(field, options) { ...@@ -114,7 +68,7 @@ ModelDefinition.prototype.max = function(field, options) {
var self = this var self = this
var emitter = new Utils.CustomEventEmitter(function() { var emitter = new Utils.CustomEventEmitter(function() {
self.query(self.QueryGenerator.maxQuery(self.tableName, field,options), self, {plain: true}).on('success', function(obj) { self.__query(self.QueryGenerator.maxQuery(self.tableName, field,options), self, {plain: true}).on('success', function(obj) {
emitter.emit('success', obj['max']) emitter.emit('success', obj['max'])
}) })
}) })
...@@ -124,14 +78,14 @@ ModelDefinition.prototype.min = function(field, options) { ...@@ -124,14 +78,14 @@ ModelDefinition.prototype.min = function(field, options) {
var self = this var self = this
var emitter = new Utils.CustomEventEmitter(function() { var emitter = new Utils.CustomEventEmitter(function() {
self.query(self.QueryGenerator.minQuery(self.tableName, field,options), self, {plain: true}).on('success', function(obj) { self.__query(self.QueryGenerator.minQuery(self.tableName, field,options), self, {plain: true}).on('success', function(obj) {
emitter.emit('success', obj['min']) emitter.emit('success', obj['min'])
}) })
}) })
return emitter.run() return emitter.run()
} }
ModelDefinition.prototype.findAll = function(options) { ModelDefinition.prototype.findAll = function(options) {
return this.query(this.QueryGenerator.selectQuery(this.tableName, options)) return this.__query(this.QueryGenerator.selectQuery(this.tableName, options))
} }
ModelDefinition.prototype.find = function(options) { ModelDefinition.prototype.find = function(options) {
...@@ -156,7 +110,7 @@ ModelDefinition.prototype.find = function(options) { ...@@ -156,7 +110,7 @@ ModelDefinition.prototype.find = function(options) {
options.limit = 1 options.limit = 1
var query = this.QueryGenerator.selectQuery(this.tableName, options) var query = this.QueryGenerator.selectQuery(this.tableName, options)
return this.query(query, this, {plain: true}) return this.__query(query, this, {plain: true})
} }
ModelDefinition.prototype.build = function(values, options) { ModelDefinition.prototype.build = function(values, options) {
...@@ -211,4 +165,53 @@ ModelDefinition.prototype.__defineGetter__('hasPrimaryKeys', function() { ...@@ -211,4 +165,53 @@ ModelDefinition.prototype.__defineGetter__('hasPrimaryKeys', function() {
return this.primaryKeyCount > 0 return this.primaryKeyCount > 0
}) })
// private
ModelDefinition.prototype.__addOptionalClassMethods = function() {
var self = this
Utils._.each(this.options.classMethods || {}, function(fct, name) { self[name] = fct })
}
ModelDefinition.prototype.__addDefaultAttributes = function() {
var defaultAttributes = {id: {type: DataTypes.INTEGER, allowNull: false, primaryKey: true, autoIncrement: true}}
, self = this
if(this.hasPrimaryKeys) defaultAttributes = {}
if(this.options.timestamps) {
defaultAttributes[Utils._.underscoredIf('createdAt', this.options.underscored)] = {type: DataTypes.DATE, allowNull: false}
defaultAttributes[Utils._.underscoredIf('updatedAt', this.options.underscored)] = {type: DataTypes.DATE, allowNull: false}
if(this.options.paranoid)
defaultAttributes[Utils._.underscoredIf('deletedAt', this.options.underscored)] = {type: DataTypes.DATE}
}
defaultAttributes = Utils.simplifyAttributes(defaultAttributes)
Utils._.map(defaultAttributes, function(value, attr) { self.attributes[attr] = value })
}
ModelDefinition.prototype.__findAutoIncrementField = function() {
var self = this
this.autoIncrementField = null
Utils._.map(this.attributes, function(definition, name) {
if (definition && (definition.indexOf('auto_increment') > -1)) {
if (self.autoIncrementField)
throw new Error('Invalid model definition. Only one autoincrement field allowed.')
else
self.autoIncrementField = name
}
})
}
ModelDefinition.prototype.__query = function() {
var args = Utils._.map(arguments, function(arg, _) { return arg })
, s = this.modelManager.sequelize
// add this as the second argument
if(arguments.length == 1) args.push(this)
return s.query.apply(s, args)
}
Utils._.map(require("./associations/mixin").classMethods, function(fct, name) { ModelDefinition.prototype[name] = fct }) Utils._.map(require("./associations/mixin").classMethods, function(fct, name) { ModelDefinition.prototype[name] = fct })
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!