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

Commit 345610a

Browse files
feat(rules): Added Factor rule
1 parent 34a69b5 commit 345610a

6 files changed

Lines changed: 116 additions & 3 deletions

File tree

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ The library can be loaded either as a standalone script, or through an [AMD](htt
9797
- [Digit](docs/digit.md)
9898
- [Empty](docs/empty.md)
9999
- [Even](docs/even.md)
100+
- [Factor](docs/factor.md)
100101
- [FalseVal](docs/false-val.md)
101102
- [Fibonacci](docs/fibonacci.md)
102103
- [File](docs/file.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/factor.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Factor
2+
3+
Validates if the input is a factor of the defined dividend.
4+
5+
Valid values:
6+
7+
```js
8+
validator.factor(1).validate('1');
9+
validator.factor(0).validate(5);
10+
validator.factor(4).validate(2);
11+
validator.factor(0).validate(1);
12+
```
13+
14+
Invalid values:
15+
16+
```js
17+
validator.factor(1).validate('.2');
18+
validator.factor(1).validate(1.1);
19+
validator.factor(4).validate(3);
20+
validator.factor(1).validate(0);
21+
```

src/rules/factor.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import { AbstractRule } from './abstract-rule';
2+
import { IntVal } from './int-val';
3+
4+
export class Factor extends AbstractRule {
5+
6+
/**
7+
* Factor.
8+
*/
9+
public constructor(public readonly dividend: number) {
10+
super();
11+
}
12+
13+
/**
14+
* Validate.
15+
*/
16+
public validate(input: any): boolean {
17+
if (this.dividend === 0) {
18+
return true;
19+
}
20+
21+
const intval: IntVal = new IntVal();
22+
23+
if (!intval.validate(this.dividend) || !intval.validate(input)) {
24+
return false;
25+
}
26+
27+
const n: number = Number(input);
28+
29+
return n !== 0 && intval.validate(Math.abs(this.dividend) / Math.abs(n));
30+
}
31+
}

src/rules/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export * from './date-time';
1818
export * from './digit';
1919
export * from './empty';
2020
export * from './even';
21+
export * from './factor';
2122
export * from './false-val';
2223
export * from './fibonacci';
2324
export * from './file';

test/rules/factor.ts

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import { assert } from 'chai';
2+
3+
import { AbstractRule } from '../../src/rules/abstract-rule';
4+
import { Factor } from '../../src/rules/factor';
5+
6+
describe('Factor', () => {
7+
8+
it('is rule', () => {
9+
assert.instanceOf(new Factor(0), AbstractRule);
10+
});
11+
12+
it('values is valid', () => {
13+
assert.isTrue(new Factor(1).validate('1'));
14+
assert.isTrue(new Factor(6).validate('1'));
15+
assert.isTrue(new Factor(1).validate(1));
16+
assert.isTrue(new Factor(2).validate(1));
17+
assert.isTrue(new Factor(2).validate(2));
18+
assert.isTrue(new Factor(3).validate(1));
19+
assert.isTrue(new Factor(3).validate(3));
20+
assert.isTrue(new Factor(4).validate(1));
21+
assert.isTrue(new Factor(4).validate(2));
22+
assert.isTrue(new Factor(4).validate(4));
23+
assert.isTrue(new Factor(5).validate(1));
24+
assert.isTrue(new Factor(5).validate(5));
25+
assert.isTrue(new Factor(6).validate(1));
26+
assert.isTrue(new Factor(6).validate(2));
27+
assert.isTrue(new Factor(6).validate(3));
28+
assert.isTrue(new Factor(6).validate(6));
29+
assert.isTrue(new Factor(0).validate(0));
30+
assert.isTrue(new Factor(0).validate(1));
31+
});
32+
33+
it('values is not valid', () => {
34+
assert.isFalse(new Factor(1).validate(1.1));
35+
assert.isFalse(new Factor(1).validate(-1.1));
36+
assert.isFalse(new Factor(1).validate('0.2'));
37+
assert.isFalse(new Factor(1).validate('.2'));
38+
assert.isFalse(new Factor(1).validate('-.2'));
39+
assert.isFalse(new Factor(1).validate('165.7'));
40+
assert.isFalse(new Factor(1).validate(''));
41+
assert.isFalse(new Factor(1).validate(null));
42+
assert.isFalse(new Factor(1).validate('a'));
43+
assert.isFalse(new Factor(1).validate(' '));
44+
assert.isFalse(new Factor(1).validate('Foo'));
45+
assert.isFalse(new Factor(3).validate(2));
46+
assert.isFalse(new Factor(4).validate(3));
47+
assert.isFalse(new Factor(5).validate(2));
48+
assert.isFalse(new Factor(5).validate(3));
49+
assert.isFalse(new Factor(5).validate(4));
50+
assert.isFalse(new Factor(1).validate(0));
51+
assert.isFalse(new Factor(2).validate(0));
52+
assert.isFalse(new Factor(0.5).validate(null));
53+
assert.isFalse(new Factor(1.5).validate(null));
54+
assert.isFalse(new Factor(-0.5).validate(null));
55+
assert.isFalse(new Factor(-1.5).validate(null));
56+
assert.isFalse(new Factor(Number.MAX_SAFE_INTEGER + 1).validate(null));
57+
});
58+
59+
});

0 commit comments

Comments
 (0)