| var _curry2 = |
| /*#__PURE__*/ |
| require("./internal/_curry2"); |
| |
| var _has = |
| /*#__PURE__*/ |
| require("./internal/_has"); |
| /** |
| * Takes a spec object and a test object; returns true if the test satisfies |
| * the spec. Each of the spec's own properties must be a predicate function. |
| * Each predicate is applied to the value of the corresponding property of the |
| * test object. `where` returns true if all the predicates return true, false |
| * otherwise. |
| * |
| * `where` is well suited to declaratively expressing constraints for other |
| * functions such as [`filter`](#filter) and [`find`](#find). |
| * |
| * @func |
| * @memberOf R |
| * @since v0.1.1 |
| * @category Object |
| * @sig {String: (* -> Boolean)} -> {String: *} -> Boolean |
| * @param {Object} spec |
| * @param {Object} testObj |
| * @return {Boolean} |
| * @see R.propSatisfies, R.whereEq |
| * @example |
| * |
| * // pred :: Object -> Boolean |
| * const pred = R.where({ |
| * a: R.equals('foo'), |
| * b: R.complement(R.equals('bar')), |
| * x: R.gt(R.__, 10), |
| * y: R.lt(R.__, 20) |
| * }); |
| * |
| * pred({a: 'foo', b: 'xxx', x: 11, y: 19}); //=> true |
| * pred({a: 'xxx', b: 'xxx', x: 11, y: 19}); //=> false |
| * pred({a: 'foo', b: 'bar', x: 11, y: 19}); //=> false |
| * pred({a: 'foo', b: 'xxx', x: 10, y: 19}); //=> false |
| * pred({a: 'foo', b: 'xxx', x: 11, y: 20}); //=> false |
| */ |
| |
| |
| var where = |
| /*#__PURE__*/ |
| _curry2(function where(spec, testObj) { |
| for (var prop in spec) { |
| if (_has(prop, spec) && !spec[prop](testObj[prop])) { |
| return false; |
| } |
| } |
| |
| return true; |
| }); |
| |
| module.exports = where; |