From 839d425746ee94fac4d8a0350aac2b96324f6f0c Mon Sep 17 00:00:00 2001 From: ycjcl868 <45808948@qq.com> Date: Wed, 8 Aug 2018 14:37:20 +0800 Subject: [PATCH 1/4] feat: add defaultRequired config --- index.js | 5 +++-- test/index.test.js | 30 ++++++++++++++++++++++++++---- 2 files changed, 29 insertions(+), 6 deletions(-) diff --git a/index.js b/index.js index f844bec..ada8897 100644 --- a/index.js +++ b/index.js @@ -33,6 +33,7 @@ class Parameter { if (opts.validateRoot) { this.validateRoot = true; } + this.defaultRequired = opts.defaultRequired !== undefined ? opts.defaultRequired : true; } t() { @@ -71,9 +72,9 @@ class Parameter { for (var key in rules) { var rule = formatRule(rules[key]); var has = obj.hasOwnProperty(key); - if (!has) { - if (rule.required !== false) { + var required = rule.required !== undefined ? rule.required : this.defaultRequired; + if (required) { errors.push({ message: this.t('required'), field: key, diff --git a/test/index.test.js b/test/index.test.js index ddbd1d2..31ab983 100644 --- a/test/index.test.js +++ b/test/index.test.js @@ -8,13 +8,16 @@ var parameter = new Parameter(); var parameterWithRootValidate = new Parameter({ validateRoot: true, }); +var parameterWithDefaultRequiredValidate = new Parameter({ + defaultRequired: false, +}); describe('parameter', function () { describe('required', function () { it('should required work fine', function () { - var value = {int: 1}; + var value = {}; var rule = {int: {type: 'int', required: true}}; - parameter.validate(rule, {})[0].should.eql({ + parameter.validate(rule, value)[0].should.eql({ code: 'missing_field', field: 'int', message: 'required' @@ -22,9 +25,9 @@ describe('parameter', function () { }); it('should not required work fine', function () { - var value = {int: 1}; + var value = {}; var rule = {int: {type: 'int', required: false}}; - should.not.exist(parameter.validate(rule, {})); + should.not.exist(parameter.validate(rule, value)); }); it('should not required check ok', function () { @@ -727,3 +730,22 @@ describe('validate with option.validateRoot', function () { parameterWithRootValidate.validate(rule, value)[0].message.should.equal('the validated value should be a object');; }); }); + + +describe('validate with option.defaultNotRequired', function () { + it('should not required work fine', function () { + var value = {}; + var rule = {int: {type: 'int'}}; + should.not.exist(parameterWithDefaultRequiredValidate.validate(rule, value)); + }); + + it('should required check ok', function () { + var value = {int: 1.1}; + var rule = {int: {type: 'int', required: true}}; + parameterWithDefaultRequiredValidate.validate(rule, value)[0].should.eql({ + code: 'invalid', + field: 'int', + message: 'should be an integer' + }); + }); +}); From a0c7cd5c3dc276ffa41479b1b65eda215389836b Mon Sep 17 00:00:00 2001 From: ycjcl868 <45808948@qq.com> Date: Wed, 8 Aug 2018 14:43:36 +0800 Subject: [PATCH 2/4] fix: code style --- index.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/index.js b/index.js index ada8897..b6822ef 100644 --- a/index.js +++ b/index.js @@ -33,7 +33,9 @@ class Parameter { if (opts.validateRoot) { this.validateRoot = true; } - this.defaultRequired = opts.defaultRequired !== undefined ? opts.defaultRequired : true; + this.defaultRequired = opts.defaultRequired !== undefined ? + opts.defaultRequired : + true; } t() { @@ -73,7 +75,9 @@ class Parameter { var rule = formatRule(rules[key]); var has = obj.hasOwnProperty(key); if (!has) { - var required = rule.required !== undefined ? rule.required : this.defaultRequired; + var required = rule.required !== undefined ? + rule.required : + this.defaultRequired; if (required) { errors.push({ message: this.t('required'), From 85e257bf21dbb1c522f0d6212e0c96d27cd01c83 Mon Sep 17 00:00:00 2001 From: ycjcl868 <45808948@qq.com> Date: Thu, 9 Aug 2018 07:28:10 +0800 Subject: [PATCH 3/4] fix: codeStyle and params condition --- index.js | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/index.js b/index.js index b6822ef..a231c7f 100644 --- a/index.js +++ b/index.js @@ -33,9 +33,7 @@ class Parameter { if (opts.validateRoot) { this.validateRoot = true; } - this.defaultRequired = opts.defaultRequired !== undefined ? - opts.defaultRequired : - true; + this.defaultRequired = opts.defaultRequired !== false; } t() { @@ -74,10 +72,9 @@ class Parameter { for (var key in rules) { var rule = formatRule(rules[key]); var has = obj.hasOwnProperty(key); + if (!has) { - var required = rule.required !== undefined ? - rule.required : - this.defaultRequired; + var required = rule.required !== undefined ? rule.required : this.defaultRequired; if (required) { errors.push({ message: this.t('required'), From b8d4fa64fb457bb7c4411edfbb0490ca65ffbfda Mon Sep 17 00:00:00 2001 From: ycjcl868 <45808948@qq.com> Date: Thu, 9 Aug 2018 07:55:33 +0800 Subject: [PATCH 4/4] fix: required logic docs: options.defaultRequired --- README.md | 2 ++ index.js | 2 +- test/index.test.js | 26 +++++++++++++++++++++++--- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 4ee2237..2f81c30 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,7 @@ $ npm install parameter --save - `constructor([options])` - new Class `Parameter` instance - `options.translate` - translate function - `options.validateRoot` - config whether to validate the passed in value must be a object. + - `options.defaultRequired` - config whether to require the property, default to `true` - `validate(rule, value)` - validate the `value` conforms to `rule`. return an array of errors if break rule. - `addRule(type, check)` - add custom rules. - `type` - rule type, required and must be string type. @@ -50,6 +51,7 @@ var parameter = new Parameter({ return I18n.t.apply(I18n, args); }, validateRoot: true, // restrict the being validate value must be a object + defaultRequired: false, // default to true }); var data = { diff --git a/index.js b/index.js index a231c7f..64665ef 100644 --- a/index.js +++ b/index.js @@ -74,7 +74,7 @@ class Parameter { var has = obj.hasOwnProperty(key); if (!has) { - var required = rule.required !== undefined ? rule.required : this.defaultRequired; + var required = rule.hasOwnProperty('required') ? rule.required : this.defaultRequired; if (required) { errors.push({ message: this.t('required'), diff --git a/test/index.test.js b/test/index.test.js index 31ab983..a21ce5a 100644 --- a/test/index.test.js +++ b/test/index.test.js @@ -8,9 +8,12 @@ var parameter = new Parameter(); var parameterWithRootValidate = new Parameter({ validateRoot: true, }); -var parameterWithDefaultRequiredValidate = new Parameter({ +var parameterWithDefaultNotRequiredValidate = new Parameter({ defaultRequired: false, }); +var parameterWithDefaultRequiredValidate = new Parameter({ + defaultRequired: true, +}); describe('parameter', function () { describe('required', function () { @@ -736,16 +739,33 @@ describe('validate with option.defaultNotRequired', function () { it('should not required work fine', function () { var value = {}; var rule = {int: {type: 'int'}}; - should.not.exist(parameterWithDefaultRequiredValidate.validate(rule, value)); + should.not.exist(parameterWithDefaultNotRequiredValidate.validate(rule, value)); }); it('should required check ok', function () { var value = {int: 1.1}; - var rule = {int: {type: 'int', required: true}}; + var rule = {int: {type: 'int'}}; parameterWithDefaultRequiredValidate.validate(rule, value)[0].should.eql({ code: 'invalid', field: 'int', message: 'should be an integer' }); }); + + it('should required check ok', function () { + var value = {int: 1.1}; + var rule = {int: {type: 'int', required: true}}; + parameterWithDefaultNotRequiredValidate.validate(rule, value)[0].should.eql({ + code: 'invalid', + field: 'int', + message: 'should be an integer' + }); + }); + + it('should not required work fine', function () { + var value = {}; + var rule = {int: {type: 'int', required: false}}; + should.not.exist(parameterWithDefaultRequiredValidate.validate(rule, value)); + }); + });