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

Commit cabfdfee by Sascha Depold

big refactoring: correct emitter usage + added id as primary id

1 parent 291fde51
......@@ -10,7 +10,11 @@ var ModelDefinition = module.exports = function(name, attributes, options) {
this.tableName = name
this.attributes = attributes
this.modelManager = null // defined by model-manager during addModel
// additional attributes
this.attributes.id = 'INT NOT NULL auto_increment PRIMARY KEY'
}
Utils.addEventEmitter(ModelDefinition)
ModelDefinition.prototype.sync = function(options) {
options = options || {}
......@@ -18,13 +22,15 @@ ModelDefinition.prototype.sync = function(options) {
var self = this
var doQuery = function() {
var query = QueryGenerator.createTableQuery(self.tableName, self.attributes)
return self.modelManager.sequelize.query(query)
self.modelManager.sequelize.query(query)
.on('success', function() { self.emit('success') })
.on('failure', function() { self.emit('failure') })
}
if(options.force)
this.drop().on('end', function() { return doQuery() })
else
return doQuery()
if(options.force) this.drop().on('success', function() { doQuery() })
else doQuery()
return this
}
ModelDefinition.prototype.drop = function() {
......@@ -32,7 +38,15 @@ ModelDefinition.prototype.drop = function() {
return this.modelManager.sequelize.query(query)
}
ModelDefinition.prototype.create = function(values) {
ModelDefinition.prototype.build = function(values) {
var instance = new Model(values)
, self = this
instance.definition = this
return instance
}
ModelDefinition.prototype.create = function(values) {
return this.build(values).save()
}
\ No newline at end of file
......@@ -5,13 +5,13 @@ var Utils = require("./utils")
var Model = module.exports = function(values) {
var self = this
this.id = null // a newly created model has no id
this.definition = null // will be set on Model.build or Model.create
this.attributes = []
this.addAttribute('id', null) // a newly created model has no id
Utils._.map(values, function(value, key) {
self[key] = value
})
Utils._.map(values, function(value, key) { self.addAttribute(key, value) })
}
require("sys").inherits(Model, require('events').EventEmitter);
Utils.addEventEmitter(Model)
Utils._.map(Mixin.classMethods, function(fct, name) { Model[name] = fct })
Model.Events = {
......@@ -22,16 +22,37 @@ Model.Events = {
var instanceMethods = {
save: function() {
this.isNewRecord ? this.emit(Model.Events.insert, this) : this.emit(Model.Events.update, this)
if(this.isNewRecord) {
var query = QueryGenerator.insertQuery(this.definition.tableName, this.values)
return this.definition.modelManager.sequelize.query(query)
} else {
var query = QueryGenerate.updateQuery(this.definition.tableName, this.values, this.id)
return this.definition.modelManager.sequelize.query(query)
}
},
destroy: function() {
this.emit(Model.Events.destroy, this)
var query = QueryGenerate.deleteQuery(this.definition.tableName, this.id)
return this.definition.modelManager.sequelize.query(query)
},
addAttribute: function(attribute, value) {
this[attribute] = value
this.attributes.push(attribute)
}
}
Model.prototype.__defineGetter__('isNewRecord', function() {
return this.id == null
})
Model.prototype.__defineGetter__('values', function() {
var result = {}
, self = this
this.attributes.forEach(function(attr) {
result[attr] = self[attr]
})
return result
})
/* Add the instance methods to Model */
Utils._.map(instanceMethods, function(fct, name) { Model.prototype[name] = fct})
......
var Utils = require("./utils")
var Query = module.exports = function(databaseConfig) {
this.config = databaseConfig
}
require("sys").inherits(Query, require('events').EventEmitter)
Utils.addEventEmitter(Query)
Query.prototype.run = function(query) {
var self = this
......@@ -16,7 +17,8 @@ Query.prototype.run = function(query) {
console.log('Executing: ' + query)
client.connect()
client.query(query, function() { self.emit('end') })
client.query(query, function() { self.emit('success') })
client.on("error", function(err) { self.emit('failure', err) })
client.end()
return this
......
var Utils = module.exports = {
_: require("underscore"),
addEventEmitter: function(_class) {
require("sys").inherits(_class, require('events').EventEmitter)
},
addTicks: function(s) {
return '`' + Utils.removeTicks(s) + '`'
},
......
var config = require("./config")
, Sequelize = require("./../index")
, sequelize = new Sequelize(config.database, config.username, config.password)
var User = sequelize.define('User', {
title: Sequelize.STRING,
bio: Sequelize.TEXT
})
console.log(User)
User.sync()
User.drop()
var user = User.create({title: 'barfooz', bio: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'})
console.log(user)
console.log(user.save())
\ No newline at end of file
User.sync({force: true}).on('success', function() {
var user = User.build({title: 'barfooz', bio: 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'})
console.log(user)
user.save().on('success', function() {
console.log('just saved the user :)')
})
})
// console.log(user)
// console.log(user.save())
\ No newline at end of file
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!