From d7fbf1a5750fc4069a6c5dd1fbc1d6c6bab67072 Mon Sep 17 00:00:00 2001 From: Anatoliy Chakkaev Date: Sun, 20 Nov 2011 15:26:36 +0700 Subject: [PATCH] Tune async validation hooks --- lib/validatable.js | 23 ++++++++++++++--------- test/validations_test.coffee | 2 +- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/lib/validatable.js b/lib/validatable.js index 51705ec8..f1469f06 100644 --- a/lib/validatable.js +++ b/lib/validatable.js @@ -112,7 +112,8 @@ Validatable.prototype.isValid = function (callback) { value: new Errors }); - this.trigger('validation', function () { + this.trigger('validation', function (validationsDone) { + var inst = this; this.constructor._validations.forEach(function (v) { if (v[2] && v[2].async) { valid = false; @@ -124,16 +125,20 @@ Validatable.prototype.isValid = function (callback) { valid = false; } } - }); - }); - var asyncFail = false; - function done(fail) { - asyncFail = asyncFail || fail; - if (--wait === 0 && callback) { - callback(!asyncFail); + }); + + var asyncFail = false; + function done(fail) { + asyncFail = asyncFail || fail; + if (--wait === 0 && callback) { + validationsDone.call(inst, function () { + callback(!asyncFail); + }); + } } - } + + }); if (valid) cleanErrors(this); if (!async && callback) callback(valid); diff --git a/test/validations_test.coffee b/test/validations_test.coffee index ecc3f53b..926fcf5d 100644 --- a/test/validations_test.coffee +++ b/test/validations_test.coffee @@ -263,7 +263,7 @@ it 'should validate asynchronously', (test) -> it 'should validate uniqueness', (test) -> User.validatesUniquenessOf 'email' - User.create getValidAttributes(), -> + User.create getValidAttributes(), (err, user) -> user = new User getValidAttributes() # test.ok not user.isValid(), 'not valid because async validation'