foop
Version:
interfaces that describe their intentions.
36 lines (33 loc) • 2.94 kB
JavaScript
var curry = require('../fp/curry')
var hasIn = require('../is/in')
/**
* @desc isIn + hasIn ...and also allows a predicate/matcher/specification
* @memberOf is
* @memberOf fp
* @since 5.0.0-beta.4
*
* @param {Object} predicate predicate match the property against this
* @param {Object} obj object to check
* @param {any} prop property to check in object
* @return {boolean} obj[prop] hasIn & satisfies
*
* @TODO surely would be better with focusing on a prop, then applying predicate, lense? :s
* @TODO is it better in fp/ or is/ ? needs some definitions
*
* @see https://github.com/ramda/ramda/blob/master/src/propOr.js
* @extends hasIn
* @extends isNull
* @extends isIn
*
* @example
*
* hasIn({}, 'eh') //=> false
* hasIn(null, 'eh') //=> false
* hasIn({eh: true}, 'eh') //=> true
*
*/
function hasInMatching(predicate, obj, prop) {
return hasIn(obj, prop) && predicate(obj[prop])
}
module.exports = curry(3, hasInMatching)
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFzSW5NYXRjaGluZy5qcyIsInNvdXJjZXMiOlsiaGFzSW5NYXRjaGluZy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBjdXJyeSA9IHJlcXVpcmUoJy4uL2ZwL2N1cnJ5JylcbmNvbnN0IGhhc0luID0gcmVxdWlyZSgnLi4vaXMvaW4nKVxuXG4vKipcbiAqIEBkZXNjIGlzSW4gKyBoYXNJbiAuLi5hbmQgYWxzbyBhbGxvd3MgYSBwcmVkaWNhdGUvbWF0Y2hlci9zcGVjaWZpY2F0aW9uXG4gKiBAbWVtYmVyT2YgaXNcbiAqIEBtZW1iZXJPZiBmcFxuICogQHNpbmNlIDUuMC4wLWJldGEuNFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcmVkaWNhdGUgcHJlZGljYXRlIG1hdGNoIHRoZSBwcm9wZXJ0eSBhZ2FpbnN0IHRoaXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmogb2JqZWN0IHRvIGNoZWNrXG4gKiBAcGFyYW0ge2FueX0gcHJvcCBwcm9wZXJ0eSB0byBjaGVjayBpbiBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IG9ialtwcm9wXSBoYXNJbiAmIHNhdGlzZmllc1xuICpcbiAqIEBUT0RPIHN1cmVseSB3b3VsZCBiZSBiZXR0ZXIgd2l0aCBmb2N1c2luZyBvbiBhIHByb3AsIHRoZW4gYXBwbHlpbmcgcHJlZGljYXRlLCBsZW5zZT8gOnNcbiAqIEBUT0RPIGlzIGl0IGJldHRlciBpbiBmcC8gb3IgaXMvID8gbmVlZHMgc29tZSBkZWZpbml0aW9uc1xuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3JhbWRhL3JhbWRhL2Jsb2IvbWFzdGVyL3NyYy9wcm9wT3IuanNcbiAqIEBleHRlbmRzIGhhc0luXG4gKiBAZXh0ZW5kcyBpc051bGxcbiAqIEBleHRlbmRzIGlzSW5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqICBoYXNJbih7fSwgJ2VoJykgLy89PiBmYWxzZVxuICogIGhhc0luKG51bGwsICdlaCcpIC8vPT4gZmFsc2VcbiAqICBoYXNJbih7ZWg6IHRydWV9LCAnZWgnKSAvLz0+IHRydWVcbiAqXG4gKi9cbmZ1bmN0aW9uIGhhc0luTWF0Y2hpbmcocHJlZGljYXRlLCBvYmosIHByb3ApIHtcbiAgcmV0dXJuIGhhc0luKG9iaiwgcHJvcCkgJiYgcHJlZGljYXRlKG9ialtwcm9wXSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjdXJyeSgzLCBoYXNJbk1hdGNoaW5nKVxuIl0sIm5hbWVzIjpbImNvbnN0Il0sIm1hcHBpbmdzIjoiQUFBQUEsR0FBSyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO0FBQ3BDQSxHQUFLLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE0QmpDLFNBQVMsYUFBYSxDQUFDLFNBQVMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFO0VBQzNDLE9BQU8sS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0NBQ2hEOztBQUVELE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUM7In0=