From 4f7ea31c8140079c1496284958278ad798566579 Mon Sep 17 00:00:00 2001 From: pawelkocot Date: Mon, 5 Sep 2016 22:54:27 +0200 Subject: [PATCH 1/2] "each" validator loosing context when you have fields in schema after field with "each" validator, then errors are assigned to the last field name. example: var schema = new Schemator({ books: { type : 'array', each : new Schemator({ author : { type : 'string', } }) }, name : { type: 'string' } }); var data = { books: [ {} ], name : 'name' }; result: [ [ [ 'name', 0, 'author' ], 'type', 'author field didn\'t mach the type string.' ] ] expected result: [ [ [ 'books', 0, 'author' ], 'type', 'author field didn\'t mach the type string.' ] ] --- lib/schemator.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/schemator.js b/lib/schemator.js index ac4bda7..8491ecd 100644 --- a/lib/schemator.js +++ b/lib/schemator.js @@ -134,12 +134,12 @@ Schemator.prototype.run = function(obj, callback){ var flagger = flaggers[flag[1]] || that.custom.flagger[flag[1]]; var args = Array.isArray(flag[2]) ? flag[2] : [flag[2]]; - context.key = flag[0]; + var contextCopy = Object.assign({}, context, {key: validation[0]}); if(!flagger) return callback(new Error('Unknown flagger method ' + flag[1])); - flagger.call(context, value, args, function(err){ + flagger.call(contextCopy, value, args, function(err){ callback(err); }); }); From 8300c2aad05afe72b263bb307f694f34de3349c7 Mon Sep 17 00:00:00 2001 From: pawelkocot Date: Mon, 5 Sep 2016 23:01:55 +0200 Subject: [PATCH 2/2] mistake :) --- lib/schemator.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/schemator.js b/lib/schemator.js index 8491ecd..678b555 100644 --- a/lib/schemator.js +++ b/lib/schemator.js @@ -103,12 +103,12 @@ Schemator.prototype.run = function(obj, callback){ var value = dotty.get(obj, validation[0]); var args = Array.isArray(validation[2]) ? validation[2] : [validation[2]]; - context.key = validation[0]; + var contextCopy = Object.assign({}, context, {key: validation[0]}); if(!func) return callback(new Error('Unknown validation method ' + validation[1])); - func.call(context, value, args, function(err, inv, override){ + func.call(contextCopy, value, args, function(err, inv, override){ if(err) return callback(err); @@ -133,13 +133,13 @@ Schemator.prototype.run = function(obj, callback){ var value = dotty.get(obj, flag[0]); var flagger = flaggers[flag[1]] || that.custom.flagger[flag[1]]; var args = Array.isArray(flag[2]) ? flag[2] : [flag[2]]; - - var contextCopy = Object.assign({}, context, {key: validation[0]}); + + context.key = flag[0]; if(!flagger) return callback(new Error('Unknown flagger method ' + flag[1])); - flagger.call(contextCopy, value, args, function(err){ + flagger.call(context, value, args, function(err){ callback(err); }); });