{"ScriptPreparationCode":"// Sort of like a recursive version of Ramda\u0027s \u0060where\u0060 (http://ramdajs.com/docs/#where).\r\nvar whereAll = R.curry((spec, obj) =\u003E {\r\n if (typeof obj === \u0022undefined\u0022) {\r\n if (spec === null || typeof spec === \u0022boolean\u0022) {\r\n return !spec\r\n }\r\n return false\r\n } else if (spec === false) {\r\n return false\r\n }\r\n var output = true\r\n R.forEachObjIndexed((v, k) =\u003E {\r\n if (v === null || typeof v === \u0022boolean\u0022 || R.keys(v).length) {\r\n if (!whereAll(v, obj[k])) {\r\n output = false\r\n }\r\n } else if (!v(obj[k])) {\r\n output = false\r\n }\r\n }, spec)\r\n return output\r\n})\r\n\r\n// -----------------------------------------------------------------------------\r\n\r\nvar pred1 = R.where({\r\n a: R.equals(\u0022foo\u0022),\r\n b: R.complement(R.equals(\u0022bar\u0022)),\r\n x: R.gt(R.__, 10),\r\n y: R.lt(R.__, 20),\r\n})\r\n\r\nvar pred2 = whereAll({\r\n a: R.equals(\u0022foo\u0022),\r\n b: R.complement(R.equals(\u0022bar\u0022)),\r\n x: R.gt(R.__, 10),\r\n y: R.lt(R.__, 20),\r\n})\r\n","TestCases":[{"Name":"Using \u0060R.where\u0060","Code":"pred1({a: \u0022foo\u0022, b: \u0022xxx\u0022, x: 11, y: 19})\r\npred1({a: \u0022xxx\u0022, b: \u0022xxx\u0022, x: 11, y: 19})\r\npred1({a: \u0022foo\u0022, b: \u0022bar\u0022, x: 11, y: 19})\r\npred1({a: \u0022foo\u0022, b: \u0022xxx\u0022, x: 10, y: 19})\r\npred1({a: \u0022foo\u0022, b: \u0022xxx\u0022, x: 11, y: 20})\r\n","IsDeferred":false},{"Name":"Using \u0060whereAll\u0060","Code":"pred2({a: \u0022foo\u0022, b: \u0022xxx\u0022, x: 11, y: 19})\r\npred2({a: \u0022xxx\u0022, b: \u0022xxx\u0022, x: 11, y: 19})\r\npred2({a: \u0022foo\u0022, b: \u0022bar\u0022, x: 11, y: 19})\r\npred2({a: \u0022foo\u0022, b: \u0022xxx\u0022, x: 10, y: 19})\r\npred2({a: \u0022foo\u0022, b: \u0022xxx\u0022, x: 11, y: 20})\r\n","IsDeferred":false}]}