Skip to content

Commit 839d425

Browse files
committed
feat: add defaultRequired config
1 parent 157712a commit 839d425

2 files changed

Lines changed: 29 additions & 6 deletions

File tree

index.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class Parameter {
3333
if (opts.validateRoot) {
3434
this.validateRoot = true;
3535
}
36+
this.defaultRequired = opts.defaultRequired !== undefined ? opts.defaultRequired : true;
3637
}
3738

3839
t() {
@@ -71,9 +72,9 @@ class Parameter {
7172
for (var key in rules) {
7273
var rule = formatRule(rules[key]);
7374
var has = obj.hasOwnProperty(key);
74-
7575
if (!has) {
76-
if (rule.required !== false) {
76+
var required = rule.required !== undefined ? rule.required : this.defaultRequired;
77+
if (required) {
7778
errors.push({
7879
message: this.t('required'),
7980
field: key,

test/index.test.js

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,26 @@ var parameter = new Parameter();
88
var parameterWithRootValidate = new Parameter({
99
validateRoot: true,
1010
});
11+
var parameterWithDefaultRequiredValidate = new Parameter({
12+
defaultRequired: false,
13+
});
1114

1215
describe('parameter', function () {
1316
describe('required', function () {
1417
it('should required work fine', function () {
15-
var value = {int: 1};
18+
var value = {};
1619
var rule = {int: {type: 'int', required: true}};
17-
parameter.validate(rule, {})[0].should.eql({
20+
parameter.validate(rule, value)[0].should.eql({
1821
code: 'missing_field',
1922
field: 'int',
2023
message: 'required'
2124
});
2225
});
2326

2427
it('should not required work fine', function () {
25-
var value = {int: 1};
28+
var value = {};
2629
var rule = {int: {type: 'int', required: false}};
27-
should.not.exist(parameter.validate(rule, {}));
30+
should.not.exist(parameter.validate(rule, value));
2831
});
2932

3033
it('should not required check ok', function () {
@@ -727,3 +730,22 @@ describe('validate with option.validateRoot', function () {
727730
parameterWithRootValidate.validate(rule, value)[0].message.should.equal('the validated value should be a object');;
728731
});
729732
});
733+
734+
735+
describe('validate with option.defaultNotRequired', function () {
736+
it('should not required work fine', function () {
737+
var value = {};
738+
var rule = {int: {type: 'int'}};
739+
should.not.exist(parameterWithDefaultRequiredValidate.validate(rule, value));
740+
});
741+
742+
it('should required check ok', function () {
743+
var value = {int: 1.1};
744+
var rule = {int: {type: 'int', required: true}};
745+
parameterWithDefaultRequiredValidate.validate(rule, value)[0].should.eql({
746+
code: 'invalid',
747+
field: 'int',
748+
message: 'should be an integer'
749+
});
750+
});
751+
});

0 commit comments

Comments
 (0)