/**
  * Tests if entity satisfies at least one of given rules.
  *
  * @param $entity
  * @param $rules
  * @return bool
  */
 public static function entityMatchesSomeRule($entity, $rules)
 {
     return ArrayUtils::any($rules, function ($rule) use($entity) {
         // check all parts of rule
         return ArrayUtils::all($rule, function ($values, $field) use($entity) {
             if (!isset($entity[$field])) {
                 return false;
             }
             $value = $values[0];
             // Use single value per field
             $valueTokens = QueryLanguageUtils::tokenizeValue($value);
             $isWildcard = QueryLanguageUtils::tokensContainWildcard($valueTokens);
             if ($isWildcard && preg_match(QueryLanguageUtils::tokensToRegex($valueTokens), $entity[$field])) {
                 return true;
             } elseif (strval($entity[$field]) === $value) {
                 return true;
             }
             return false;
         });
     });
 }