code: function(currentProcess, constraints)  {
      if (debugMode) {
          console.log("scanning Following objects");
          console.dir(constraints);
          console.dir(currentProcess);
      }
      for (var key in constraints) {
          if (!currentProcess.ID.hasOwnProperty(key)) {
              if (debugMode) console.log("currentProcess does not have key " +key)
              return false;
          }
  
          if (constraints[key] === null) {
              if (debugMode) console.log("process has key " + key + " and constraints is null")
              continue; // Any value is acceptable
          }
          // IF value were specified we require that at least one  matches
          var target = currentProcess.ID[key] instanceof Array ? currentProcess.ID[key] : [currentProcess.ID[key]];
          var constr = constraints[key] instanceof Array ? constraints[key] : [constraints[key]];
          //console.dir(target);
          var intersect = _intersect(target, constr);
          
          if (debugMode) {
              console.log('intersect test')
              console.dir(target)
              console.dir(constr)
              console.dir(intersect)
          }
          if (intersect.length === 0) {
              if (debugMode) console.log("empty intersection")
              return false;
          }
      }
      return true;
  }
docs: /*
  Iterate over constraints, as soon as a constraints is violated returns false
  Two type of constraints atomic one
  list