Skip to content

Commit

Permalink
feat: add isTrue, isFalse (#435)
Browse files Browse the repository at this point in the history
 - use `isTrue` and `isFalse` in lib
 - fix lensSatisfies example

Closes #255
  • Loading branch information
Undistraction authored and char0n committed Mar 14, 2018
1 parent 8d62dc1 commit 9687b51
Show file tree
Hide file tree
Showing 8 changed files with 157 additions and 8 deletions.
11 changes: 11 additions & 0 deletions src/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -799,6 +799,17 @@ declare namespace RamdaAdjunct {
*/
isPromise(val: any): val is Promise<any>;

/**
* Checks if input value is the Boolean primitive `true`. Will return false for Boolean
* objects created using the `Boolean` function as a constructor.
*/
isTrue(val: any): boolean;

/**
* Checks if input value is the Boolean primitive `false`. Will return false for Boolean objects created using the `Boolean` function as a constructor.
*/
isFalse(val: any): boolean;

/**
* In JavaScript, a `truthy` value is a value that is considered true
* when evaluated in a Boolean context. All values are truthy unless
Expand Down
2 changes: 2 additions & 0 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ export { default as isPair } from './isPair';
export { default as isNotPair } from './isNotPair';
export { default as isThenable } from './isThenable';
export { default as isPromise } from './isPromise';
export { default as isTrue } from './isTrue';
export { default as isFalse } from './isFalse';
export { default as isTruthy } from './isTruthy';
export { default as isFalsy } from './isFalsy';
export { default as isRegExp } from './isRegExp';
Expand Down
29 changes: 29 additions & 0 deletions src/isFalse.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import { equals } from 'ramda';

/**
* Checks if input value is the Boolean primitive `false`. Will return false for all values created
* using the `Boolean` function as a constructor.
*
* @func isFalse
* @memberOf RA
* @since {@link https://char0n.github.io/ramda-adjunct/2.6.0|v2.6.0}
* @category Type
* @sig * -> Boolean
* @param {*} val The value to test
* @return {boolean}
* @see {@link RA.isTrue|isTrue}, {@link RA.isTruthy|isTruthy}, {@link RA.isFalsy|isFalsy}
* @example
*
* RA.isFalse(false); // => true
* RA.isFalse(Boolean(false)); // => true
* RA.isFalse(true); // => false
* RA.isFalse(0); // => false
* RA.isFalse(''); // => false
* RA.isFalse(null); // => false
* RA.isFalse(undefined); // => false
* RA.isFalse(NaN); // => false
* RA.isFalse([]); // => false
* RA.isFalse(new Boolean(false)); // => false
*/

export default equals(false);
25 changes: 25 additions & 0 deletions src/isTrue.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import { equals } from 'ramda';

/**
* Checks if input value is the Boolean primitive `true`. Will return false for Boolean objects
* created using the `Boolean` function as a constructor.
*
* @func isTrue
* @memberOf RA
* @since {@link https://char0n.github.io/ramda-adjunct/2.6.0|v2.6.0}
* @category Type
* @sig * -> Boolean
* @param {*} val The value to test
* @return {boolean}
* @see {@link RA.isFalse|isFalse}, {@link RA.isTruthy|isTruthy}, {@link RA.isFalsy|isFalsy}
* @example
*
* RA.isTrue(true); // => true
* RA.isTrue(Boolean(true)); // => true
* RA.isTrue(false); // => false
* RA.isTrue(1); // => false
* RA.isTrue('true'); // => false
* RA.isTrue(new Boolean(true)); // => false
*/

export default equals(true);
6 changes: 3 additions & 3 deletions src/lensNotSatisfy.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ import lensSatisfies from './lensSatisfies';
*
* @example
*
* RA.lensNotSatisfy(R.equals(true), R.lensIndex(0), [false, true, 1]); // => true
* RA.lensNotSatisfy(R.equals(true), R.lensIndex(1), [false, true, 1]); // => false
* RA.lensNotSatisfy(R.equals(true), R.lensIndex(2), [false, true, 1]); // => true
* RA.lensNotSatisfy(RA.isTrue, R.lensIndex(0), [false, true, 1]); // => true
* RA.lensNotSatisfy(RA.isTrue, R.lensIndex(1), [false, true, 1]); // => false
* RA.lensNotSatisfy(RA.isTrue, R.lensIndex(2), [false, true, 1]); // => true
* RA.lensNotSatisfy(R.identity, R.lensProp('x'), { x: 1 }); // => true
*/
const lensNotSatisfy = complement(lensSatisfies);
Expand Down
12 changes: 7 additions & 5 deletions src/lensSatisfies.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import { view, curryN, equals, pipe } from 'ramda';
import { view, curryN, pipe } from 'ramda';

import isTrue from './isTrue';

/**
* Returns `true` if data structure focused by the given lens satisfies the predicate.
Expand All @@ -19,13 +21,13 @@ import { view, curryN, equals, pipe } from 'ramda';
*
* @example
*
* RA.lensSatisfies(R.equals(true), R.lensIndex(0), [false, true, 1]); // => false
* RA.lensSatisfies(R.equals(true), R.lensIndex(1), [false, true, 1]); // => true
* RA.lensSatisfies(R.equals(true), R.lensIndex(2), [false, true, 1]); // => false
* RA.lensSatisfies(RA.isTrue, R.lensIndex(0), [false, true, 1]); // => false
* RA.lensSatisfies(RA.isTrue, R.lensIndex(1), [false, true, 1]); // => true
* RA.lensSatisfies(RA.isTrue, R.lensIndex(2), [false, true, 1]); // => false
* RA.lensSatisfies(R.identity, R.lensProp('x'), { x: 1 }); // => false
*/
const lensSatisfies = curryN(3, (predicate, lens, data) =>
pipe(view(lens), predicate, equals(true))(data)
pipe(view(lens), predicate, isTrue)(data)
);

export default lensSatisfies;
40 changes: 40 additions & 0 deletions test/isFalse.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import * as RA from '../src/index';
import eq from './shared/eq';
import Symbol from './shared/Symbol';
import args from './shared/arguments';

describe('isFalse', function() {
it("tests whether a value is 'false' primative", function() {
eq(RA.isFalse(false), true);
eq(RA.isFalse(Boolean(false)), true);

eq(RA.isFalse(true), false);
eq(RA.isFalse(Boolean(true)), false);
eq(RA.isTrue(new Boolean(true)), false);
eq(RA.isTrue(new Boolean(false)), false);
eq(RA.isFalse('false'), false);
eq(RA.isFalse('abc'), false);
eq(RA.isFalse(Object('abc')), false);
eq(RA.isFalse(args), false);
eq(RA.isFalse([1, 2, 3]), false);
eq(RA.isFalse(new Date()), false);
eq(RA.isFalse(new Error()), false);
eq(RA.isFalse(Array.prototype.slice), false);
eq(RA.isFalse({ 0: 1, length: 1 }), false);
eq(RA.isFalse(/x/), false);
eq(RA.isFalse({}), false);
eq(RA.isFalse([]), false);
eq(RA.isFalse(Infinity), false);
eq(RA.isFalse(-0), false);
eq(RA.isFalse(0), false);
eq(RA.isFalse(1), false);
eq(RA.isFalse(''), false);
eq(RA.isFalse(null), false);
eq(RA.isFalse(undefined), false);
eq(RA.isFalse(NaN), false);

if (Symbol !== 'undefined') {
eq(RA.isFalse(Symbol), false);
}
});
});
40 changes: 40 additions & 0 deletions test/isTrue.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import * as RA from '../src/index';
import eq from './shared/eq';
import Symbol from './shared/Symbol';
import args from './shared/arguments';

describe('isTrue', function() {
it("tests whether a value is 'true' primative", function() {
eq(RA.isTrue(true), true);
eq(RA.isTrue(Boolean(true)), true);

eq(RA.isTrue(false), false);
eq(RA.isTrue(Boolean(false)), false);
eq(RA.isTrue(new Boolean(true)), false);
eq(RA.isTrue(new Boolean(false)), false);
eq(RA.isTrue('true'), false);
eq(RA.isTrue('abc'), false);
eq(RA.isTrue(Object('abc')), false);
eq(RA.isTrue(args), false);
eq(RA.isTrue([1, 2, 3]), false);
eq(RA.isTrue(new Date()), false);
eq(RA.isTrue(new Error()), false);
eq(RA.isTrue(Array.prototype.slice), false);
eq(RA.isTrue({ 0: 1, length: 1 }), false);
eq(RA.isTrue(/x/), false);
eq(RA.isTrue({}), false);
eq(RA.isTrue([]), false);
eq(RA.isTrue(Infinity), false);
eq(RA.isTrue(-0), false);
eq(RA.isTrue(0), false);
eq(RA.isTrue(1), false);
eq(RA.isTrue(''), false);
eq(RA.isTrue(null), false);
eq(RA.isTrue(undefined), false);
eq(RA.isTrue(NaN), false);

if (Symbol !== 'undefined') {
eq(RA.isTrue(Symbol), false);
}
});
});

0 comments on commit 9687b51

Please sign in to comment.