/** * {@inheritdoc} */ public function match(TokenInterface $token) { $rules = new \SplObjectStorage(); /** @var RuleInterface $rule */ foreach ($this->repository->getNonIndexableRules() as $rule) { /** @var ConditionInterface $condition */ foreach ($rule->getConditions() as $condition) { /** @var EvaluatorInterface $evaluator */ $evaluator = $this->resolver->resolve($condition); $evaluator->evaluate($token, $condition, $rule) ? $rules->attach($rule) : $rules->detach($rule); } } return $rules; }
/** * @param string $path * @return PHPRepository */ private function createRepository($path) { if (is_null($this->repository)) { $this->repository = new PHPRepository(); $this->repository->setFilePath($path); } return $this->repository; }
/** * {@inheritdoc} */ public function find(UserAgentTokenizedToken $token) { $nodes = $token->getData(); $rules = $this->repository->getIndexableRulesByUserAgentToken($token); $occurences = new Occurrences(); /** @var RuleInterface $rule */ foreach ($rules as $rule) { /** @var NodeInterface $node */ foreach ($nodes as $node) { $conditions = $rule->getConditions(); $conditions->rewind(); /** @var ConditionInterface $condition */ foreach ($conditions as $condition) { if ($this->comparer->areEquals($node, $condition)) { $occurences->add(new Occurrence($rule, $condition, $node)); } } } } return $occurences; }