Skip to content
This repository was archived by the owner on Dec 25, 2017. It is now read-only.

Commit 541411e

Browse files
committed
⭐ new(validator): toogle support for required validator
Closes #258
1 parent 6963747 commit 541411e

File tree

2 files changed

+133
-18
lines changed

2 files changed

+133
-18
lines changed

src/validators.js

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -7,32 +7,33 @@
77
* required
88
* This function validate whether the value has been filled out.
99
*/
10-
export function required (val: any): boolean {
10+
export function required (val: any, arg?: boolean): boolean {
11+
const isRequired: boolean = arg === undefined ? true : arg
1112
if (Array.isArray(val)) {
1213
if (val.length !== 0) {
1314
let valid: boolean = true
1415
for (let i = 0, l = val.length; i < l; i++) {
15-
valid = required(val[i])
16-
if (!valid) {
16+
valid = required(val[i], isRequired)
17+
if ((isRequired && !valid) || (!isRequired && valid)) {
1718
break
1819
}
1920
}
2021
return valid
2122
} else {
22-
return false
23+
return !isRequired
2324
}
2425
} else if (typeof val === 'number' || typeof val === 'function') {
25-
return true
26+
return isRequired
2627
} else if (typeof val === 'boolean') {
27-
return val
28+
return val === isRequired
2829
} else if (typeof val === 'string') {
29-
return val.length > 0
30+
return isRequired ? (val.length > 0) : (val.length <= 0)
3031
} else if (val !== null && typeof val === 'object') {
31-
return Object.keys(val).length > 0
32+
return isRequired ? (Object.keys(val).length > 0) : (Object.keys(val).length <= 0)
3233
} else if (val === null || val === undefined) {
33-
return false
34+
return !isRequired
3435
} else {
35-
return false
36+
return !isRequired
3637
}
3738
}
3839

test/unit/validators/required.test.js

Lines changed: 122 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ describe('required', () => {
44
describe('string', () => {
55
describe('not empty', () => {
66
it('should be true', () => {
7-
assert(required('hello'))
7+
assert(required('hello') === true)
88
})
99
})
1010

@@ -18,7 +18,7 @@ describe('required', () => {
1818
describe('boolean', () => {
1919
describe('true', () => {
2020
it('should be true', () => {
21-
assert(required(true))
21+
assert(required(true) === true)
2222
})
2323
})
2424

@@ -32,19 +32,19 @@ describe('required', () => {
3232
describe('numeric', () => {
3333
describe('integer', () => {
3434
it('should be true', () => {
35-
assert(required(11))
35+
assert(required(11) === true)
3636
})
3737
})
3838

3939
describe('float', () => {
4040
it('should be true', () => {
41-
assert(required(0.11))
41+
assert(required(0.11) === true)
4242
})
4343
})
4444

4545
describe('0', () => {
4646
it('should be true', () => {
47-
assert(required(0))
47+
assert(required(0) === true)
4848
})
4949
})
5050
})
@@ -58,7 +58,7 @@ describe('required', () => {
5858

5959
describe('not empty', () => {
6060
it('should be true', () => {
61-
assert(required({ foo: 'bar' }))
61+
assert(required({ foo: 'bar' }) === true)
6262
})
6363
})
6464
})
@@ -72,7 +72,7 @@ describe('required', () => {
7272

7373
describe('not empty', () => {
7474
it('should be true', () => {
75-
assert(required([1, 'foo']))
75+
assert(required([1, 'foo']) === true)
7676
})
7777
})
7878

@@ -97,7 +97,7 @@ describe('required', () => {
9797

9898
describe('function', () => {
9999
it('should be true', () => {
100-
assert(required(() => {}))
100+
assert(required(() => {}) === true)
101101
})
102102
})
103103

@@ -112,4 +112,118 @@ describe('required', () => {
112112
assert(required(null) === false)
113113
})
114114
})
115+
116+
describe('toggle', () => {
117+
describe('string', () => {
118+
describe('not empty', () => {
119+
it('should be false', () => {
120+
assert(required('hello', false) === false)
121+
})
122+
})
123+
124+
describe('empty', () => {
125+
it('should be true', () => {
126+
assert(required('', false) === true)
127+
})
128+
})
129+
})
130+
131+
describe('boolean', () => {
132+
describe('true', () => {
133+
it('should be false', () => {
134+
assert(required(true, false) === false)
135+
})
136+
})
137+
138+
describe('false', () => {
139+
it('should be true', () => {
140+
assert(required(false, false) === true)
141+
})
142+
})
143+
})
144+
145+
describe('numeric', () => {
146+
describe('integer', () => {
147+
it('should be false', () => {
148+
assert(required(11, false) === false)
149+
})
150+
})
151+
152+
describe('float', () => {
153+
it('should be false', () => {
154+
assert(required(0.11, false) === false)
155+
})
156+
})
157+
158+
describe('0', () => {
159+
it('should be false', () => {
160+
assert(required(0, false) === false)
161+
})
162+
})
163+
})
164+
165+
describe('object', () => {
166+
describe('empty', () => {
167+
it('should be true', () => {
168+
assert(required({}, false) === true)
169+
})
170+
})
171+
172+
describe('not empty', () => {
173+
it('should be false', () => {
174+
assert(required({ foo: 'bar' }, false) === false)
175+
})
176+
})
177+
})
178+
179+
describe('array', () => {
180+
describe('empty', () => {
181+
it('should be true', () => {
182+
assert(required([], false) === true)
183+
})
184+
})
185+
186+
describe('not empty', () => {
187+
it('should be false', () => {
188+
assert(required([1, 'foo'], false) === false)
189+
})
190+
})
191+
192+
describe('include empty string', () => {
193+
it('should be true', () => {
194+
assert(required([1, ''], false) === true)
195+
})
196+
})
197+
198+
describe('include null', () => {
199+
it('should be true', () => {
200+
assert(required([1, null], false) === true)
201+
})
202+
})
203+
204+
describe('include undefined', () => {
205+
it('should be true', () => {
206+
assert(required([1, '2', undefined], false) === true)
207+
})
208+
})
209+
})
210+
211+
describe('function', () => {
212+
it('should be false', () => {
213+
assert(required(() => {}, false) === false)
214+
})
215+
})
216+
217+
describe('undefined', () => {
218+
it('should be true', () => {
219+
assert(required(undefined, false) === true)
220+
})
221+
})
222+
223+
describe('null', () => {
224+
it('should be true', () => {
225+
assert(required(null, false) === true)
226+
})
227+
})
228+
})
115229
})

0 commit comments

Comments
 (0)