Tune async validation hooks

This commit is contained in:
Anatoliy Chakkaev 2011-11-20 15:26:36 +07:00
parent c96cf9f248
commit d7fbf1a575
2 changed files with 15 additions and 10 deletions

View File

@ -112,7 +112,8 @@ Validatable.prototype.isValid = function (callback) {
value: new Errors value: new Errors
}); });
this.trigger('validation', function () { this.trigger('validation', function (validationsDone) {
var inst = this;
this.constructor._validations.forEach(function (v) { this.constructor._validations.forEach(function (v) {
if (v[2] && v[2].async) { if (v[2] && v[2].async) {
valid = false; valid = false;
@ -124,16 +125,20 @@ Validatable.prototype.isValid = function (callback) {
valid = false; valid = false;
} }
} }
});
});
var asyncFail = false; });
function done(fail) {
asyncFail = asyncFail || fail; var asyncFail = false;
if (--wait === 0 && callback) { function done(fail) {
callback(!asyncFail); asyncFail = asyncFail || fail;
if (--wait === 0 && callback) {
validationsDone.call(inst, function () {
callback(!asyncFail);
});
}
} }
}
});
if (valid) cleanErrors(this); if (valid) cleanErrors(this);
if (!async && callback) callback(valid); if (!async && callback) callback(valid);

View File

@ -263,7 +263,7 @@ it 'should validate asynchronously', (test) ->
it 'should validate uniqueness', (test) -> it 'should validate uniqueness', (test) ->
User.validatesUniquenessOf 'email' User.validatesUniquenessOf 'email'
User.create getValidAttributes(), -> User.create getValidAttributes(), (err, user) ->
user = new User getValidAttributes() user = new User getValidAttributes()
# test.ok not user.isValid(), 'not valid because async validation' # test.ok not user.isValid(), 'not valid because async validation'