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

Commit 682ef246 by Sascha Depold

Merge branch 'master' of git://github.com/guersam/sequelize into guersam-master

2 parents 4350fae4 83e08fce
...@@ -284,13 +284,15 @@ module.exports = (function() { ...@@ -284,13 +284,15 @@ module.exports = (function() {
associationData.forEach(function(data) { associationData.forEach(function(data) {
var daoInstance = associatedDaoFactory.build(data, { isNewRecord: false }) var daoInstance = associatedDaoFactory.build(data, { isNewRecord: false })
, isEmpty = ! Utils.firstValueOfHash(daoInstance.identifiers)
if (['BelongsTo', 'HasOne'].indexOf(association.associationType) > -1) { if (['BelongsTo', 'HasOne'].indexOf(association.associationType) > -1) {
accessor = Utils.singularize(accessor) accessor = Utils.singularize(accessor)
dao[accessor] = daoInstance dao[accessor] = isEmpty ? null : daoInstance
} else { } else {
dao[accessor] = dao[accessor] || [] dao[accessor] = dao[accessor] || []
dao[accessor].push(daoInstance) if (! isEmpty)
dao[accessor].push(daoInstance)
} }
}) })
} }
......
...@@ -149,6 +149,14 @@ var Utils = module.exports = { ...@@ -149,6 +149,14 @@ var Utils = module.exports = {
} }
}, },
firstValueOfHash: function(obj) {
for (var key in obj) {
if (obj.hasOwnProperty(key))
return obj[key]
}
return null
},
inherit: function(subClass, superClass) { inherit: function(subClass, superClass) {
if (superClass.constructor == Function) { if (superClass.constructor == Function) {
// Normal Inheritance // Normal Inheritance
...@@ -164,6 +172,7 @@ var Utils = module.exports = { ...@@ -164,6 +172,7 @@ var Utils = module.exports = {
return subClass; return subClass;
} }
} }
Utils.CustomEventEmitter = require("./emitters/custom-event-emitter") Utils.CustomEventEmitter = require("./emitters/custom-event-emitter")
......
...@@ -500,6 +500,25 @@ describe(Helpers.getTestDialectTeaser("DAOFactory"), function() { ...@@ -500,6 +500,25 @@ describe(Helpers.getTestDialectTeaser("DAOFactory"), function() {
}.bind(this)) //- sequelize.sync }.bind(this)) //- sequelize.sync
}) })
it('fetches no associated object if none is set (1st direction)', function(done) {
this.User.hasOne(this.Task)
this.Task.belongsTo(this.User)
this.sequelize.sync({ force: true }).success(function() {
this.User.create({ name: 'barfooz' }).success(function(user) {
this.Task.create({ title: 'task' }).success(function(task) {
this.User.find({
where: { 'UserWithNames.id': 1 },
include: [ 'Task' ]
}).success(function(user) {
expect(user.task).toEqual(null)
done()
})
}.bind(this)) //- Task.create
}.bind(this)) //- User.create
}.bind(this)) //- sequelize.sync
})
it('fetches associated objects via "as" param (1st direction)', function(done) { it('fetches associated objects via "as" param (1st direction)', function(done) {
this.User.hasOne(this.Task, { as: 'Homework' }) this.User.hasOne(this.Task, { as: 'Homework' })
this.Task.belongsTo(this.User) this.Task.belongsTo(this.User)
...@@ -546,6 +565,27 @@ describe(Helpers.getTestDialectTeaser("DAOFactory"), function() { ...@@ -546,6 +565,27 @@ describe(Helpers.getTestDialectTeaser("DAOFactory"), function() {
}.bind(this)) //- sequelize.sync }.bind(this)) //- sequelize.sync
}) })
it('fetches no associated object if none is set (2nd direction)', function(done) {
this.User.hasOne(this.Task)
this.Task.belongsTo(this.User)
this.sequelize.sync({ force: true }).success(function() {
this.User.create({ name: 'barfooz' }).success(function(user) {
this.User.create({ name: 'another user' }).success(function(another_user) {
this.Task.create({ title: 'task' }).success(function(task) {
this.Task.find({
where: { 'Tasks.id': 1 },
include: [ 'UserWithName' ]
}).success(function(task) {
expect(task.userWithName).toEqual(null)
done()
})
}.bind(this)) //- Task.create
}.bind(this)) //- User.create
}.bind(this)) //- User.create
}.bind(this)) //- sequelize.sync
})
it('fetches associated object via "as" param (2nd direction)', function(done) { it('fetches associated object via "as" param (2nd direction)', function(done) {
this.User.hasOne(this.Task) this.User.hasOne(this.Task)
this.Task.belongsTo(this.User, { as: 'Owner' }) this.Task.belongsTo(this.User, { as: 'Owner' })
...@@ -627,6 +667,25 @@ describe(Helpers.getTestDialectTeaser("DAOFactory"), function() { ...@@ -627,6 +667,25 @@ describe(Helpers.getTestDialectTeaser("DAOFactory"), function() {
}.bind(this)) //- sequelize.sync }.bind(this)) //- sequelize.sync
}) })
it('fetches no associated objects for 1:N associations if none are set (1st direction)', function(done) {
this.User.hasMany(this.Task)
this.Task.belongsTo(this.User)
this.sequelize.sync({ force: true }).success(function() {
this.User.create({ name: 'barfooz' }).success(function(user) {
this.Task.create({ title: 'task1' }).success(function(task1) {
this.User.find({
where: { 'UserWithNames.id': 1 },
include: [ 'Task' ]
}).success(function(user) {
expect(user.tasks.length).toEqual(0)
done()
})
}.bind(this)) //- Task.create
}.bind(this)) //- User.create
}.bind(this)) //- sequelize.sync
})
it('fetches associated objects for 1:N associations (2nd direction)', function(done) { it('fetches associated objects for 1:N associations (2nd direction)', function(done) {
this.User.hasMany(this.Task) this.User.hasMany(this.Task)
this.Task.belongsTo(this.User) this.Task.belongsTo(this.User)
...@@ -705,6 +764,29 @@ describe(Helpers.getTestDialectTeaser("DAOFactory"), function() { ...@@ -705,6 +764,29 @@ describe(Helpers.getTestDialectTeaser("DAOFactory"), function() {
}.bind(this)) //- sequelize.sync }.bind(this)) //- sequelize.sync
}) })
it('fetches no associated objects for N:M associations if none are set (1st direction)', function(done) {
this.User.hasMany(this.Task)
this.Task.hasMany(this.User)
this.sequelize.sync({ force: true }).success(function() {
this.User.create({ name: 'barfooz' }).success(function(user1) {
this.Task.create({ title: 'task1' }).success(function(task1) {
this.Task.create({ title: 'task2' }).success(function(task2) {
this.User.find({
where: { 'UserWithNames.id': user1.id },
include: [ 'Task' ]
}).success(function(user) {
expect(user.tasks.length).toEqual(0)
done()
})
}.bind(this)) //- Task.create
}.bind(this)) //- Task.create
}.bind(this)) //- User.create
}.bind(this)) //- sequelize.sync
})
it('fetches associated objects via "as" param for N:M associations (1st direction)', function(done) { it('fetches associated objects via "as" param for N:M associations (1st direction)', function(done) {
this.User.hasMany(this.Task, { as: 'Homeworks' }) this.User.hasMany(this.Task, { as: 'Homeworks' })
this.Task.hasMany(this.User, { as: 'Owners' }) this.Task.hasMany(this.User, { as: 'Owners' })
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!