Skip to content
This repository was archived by the owner on Oct 20, 2021. It is now read-only.

Commit 82e2998

Browse files
feat(rules): Added Equals rule
1 parent ea96c8b commit 82e2998

10 files changed

Lines changed: 115 additions & 4 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ The library can be loaded either as a standalone script, or through an [AMD](htt
9696
- [DateTime](docs/date-time.md)
9797
- [Digit](docs/digit.md)
9898
- [Empty](docs/empty.md)
99+
- [Equals](docs/equals.md)
99100
- [Even](docs/even.md)
100101
- [Executable](docs/executable.md)
101102
- [Exists](docs/exists.md)

awesome-validator.min.js

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/equals.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Equals
2+
3+
Validates if the input is equal to some value.
4+
5+
Valid values:
6+
7+
```js
8+
validator.equals('foo').validate('foo');
9+
validator.equals(1).validate('1');
10+
validator.equals(1).validate(1);
11+
validator.equals([]).validate([]);
12+
validator.equals([1, 2, 3]).validate([1, 2, 3]);
13+
validator.equals([1, 2, 3]).validate(['1', 2, 3]);
14+
validator.equals(null).validate(null);
15+
```
16+
17+
Invalid values:
18+
19+
```js
20+
validator.equals('foo').validate('foobar');
21+
validator.equals(null).validate('foo');
22+
validator.equals('foo').validate(null);
23+
```

package-lock.json

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,9 @@
5858
}
5959
},
6060
"dependencies": {
61+
"@types/deep-equal": "^1.0.1",
6162
"@types/mime-types": "^2.1.0",
63+
"deep-equal": "^1.0.1",
6264
"mime-types": "^2.1.17",
6365
"moment": "^2.20.1"
6466
},

src/rules/equals.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { AbstractRule } from './abstract-rule';
2+
import { ArrayVal } from './array-val';
3+
import { ObjectTypeStrict } from './object-type-strict';
4+
5+
export class Equals extends AbstractRule {
6+
7+
/**
8+
* Equals.
9+
*/
10+
public constructor(public readonly compareTo: any) {
11+
super();
12+
}
13+
14+
/**
15+
* Validate.
16+
*/
17+
public validate(input: any): boolean {
18+
if (new ObjectTypeStrict().validate(input) || new ArrayVal().validate(input)) {
19+
return require('deep-equal')(input, this.compareTo);
20+
}
21+
22+
/* tslint:disable triple-equals */
23+
return input == this.compareTo;
24+
/* tslint:enable triple-equals */
25+
}
26+
}

src/rules/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export * from './cpf';
1717
export * from './date-time';
1818
export * from './digit';
1919
export * from './empty';
20+
export * from './equals';
2021
export * from './even';
2122
export * from './executable';
2223
export * from './exists';

test/rules/equals.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import { assert } from 'chai';
2+
3+
import { AbstractRule } from '../../src/rules/abstract-rule';
4+
import { Equals } from '../../src/rules/equals';
5+
6+
describe('Equals', () => {
7+
8+
class Foo {}
9+
10+
it('is rule', () => {
11+
assert.instanceOf(new Equals('foo'), AbstractRule);
12+
});
13+
14+
it('values is valid', () => {
15+
assert.isTrue(new Equals('foo').validate('foo'));
16+
assert.isTrue(new Equals(1).validate('1'));
17+
assert.isTrue(new Equals(1).validate(1));
18+
assert.isTrue(new Equals([]).validate([]));
19+
assert.isTrue(new Equals([1, 2, 3]).validate([1, 2, 3]));
20+
assert.isTrue(new Equals([1, 2, [1, 2]]).validate([1, 2, [1, 2]]));
21+
assert.isTrue(new Equals([1, 2, 3]).validate(['1', 2, 3]));
22+
assert.isTrue(new Equals(null).validate(null));
23+
assert.isTrue(new Equals({foo: 1}).validate({foo: 1}));
24+
assert.isTrue(new Equals({foo: 1}).validate({foo: '1'}));
25+
26+
const s: Foo = new Foo();
27+
assert.isTrue(new Equals(s).validate(s));
28+
});
29+
30+
it('values is not valid', () => {
31+
assert.isFalse(new Equals('foo').validate('foobar'));
32+
assert.isFalse(new Equals(null).validate('foo'));
33+
assert.isFalse(new Equals('foo').validate(null));
34+
assert.isFalse(new Equals([1, 2, 3]).validate(['foo']));
35+
assert.isFalse(new Equals([1, 2, [1, 2]]).validate([1, 2, [2, 1]]));
36+
assert.isFalse(new Equals({foo: 'bar'}).validate({foo: 'foo'}));
37+
assert.isFalse(new Equals({bar: 'foo'}).validate({foo: 'foo'}));
38+
assert.isFalse(new Equals(new Foo()).validate(new Foo()));
39+
});
40+
41+
});

test/rules/identical.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ describe('Identical', () => {
1717
assert.isTrue(new Identical([]).validate([]));
1818
assert.isTrue(new Identical([1, 2, 3]).validate([1, 2, 3]));
1919
assert.isTrue(new Identical(null).validate(null));
20+
assert.isTrue(new Identical({foo: 1}).validate({foo: 1}));
2021

2122
const s: Foo = new Foo();
2223
assert.isTrue(new Identical(s).validate(s));
@@ -28,6 +29,8 @@ describe('Identical', () => {
2829
assert.isFalse(new Identical([1, 2, 3]).validate(['1', 2, 3]));
2930
assert.isFalse(new Identical(null).validate('foo'));
3031
assert.isFalse(new Identical('foo').validate(null));
32+
assert.isFalse(new Identical({foo: 1}).validate({foo: '1'}));
33+
assert.isFalse(new Identical({bar: 'foo'}).validate({foo: 'foo'}));
3134
assert.isFalse(new Identical(new Foo()).validate(new Foo()));
3235
});
3336

yarn.lock

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@
5252
version "4.0.10"
5353
resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.0.10.tgz#0eb222c7353adde8e0980bea04165d4d3b6afef3"
5454

55+
"@types/deep-equal@^1.0.1":
56+
version "1.0.1"
57+
resolved "https://registry.yarnpkg.com/@types/deep-equal/-/deep-equal-1.0.1.tgz#71cfabb247c22bcc16d536111f50c0ed12476b03"
58+
5559
"@types/mime-types@^2.1.0":
5660
version "2.1.0"
5761
resolved "https://registry.yarnpkg.com/@types/mime-types/-/mime-types-2.1.0.tgz#9ca52cda363f699c69466c2a6ccdaad913ea7a73"
@@ -1144,7 +1148,7 @@ deep-eql@^3.0.0:
11441148
dependencies:
11451149
type-detect "^4.0.0"
11461150

1147-
deep-equal@~1.0.1:
1151+
deep-equal@^1.0.1, deep-equal@~1.0.1:
11481152
version "1.0.1"
11491153
resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
11501154

0 commit comments

Comments
 (0)