/** @test */
 public function registeredOperatorParser()
 {
     $operatorParserMock = $this->getMockBuilder('Superruzafa\\Rules\\Loader\\Xml\\OperatorParser')->setMethods(array('getElementName'))->getMockForAbstractClass();
     $operatorParserMock->expects($this->exactly(2))->method('getElementName')->will($this->returnValue('JARL'));
     OperatorParserFactoryMethod::registerParser($operatorParserMock);
     $this->assertSame($operatorParserMock, OperatorParserFactoryMethod::create('JARL'));
     OperatorParserFactoryMethod::unregisterParser($operatorParserMock);
 }
Ejemplo n.º 2
0
 /**
  * Parses the operands defined in an XML element and adds them to an operator
  *
  * @param Operator $operator
  * @param \DOMElement $operatorElement
  * @param \DOMXPath $xpath
  * @return Operator
  */
 protected function parseOperands(Operator $operator, \DOMElement $operatorElement, \DOMXPath $xpath)
 {
     foreach ($operatorElement->attributes as $attribute) {
         $operator->addOperand(Primitive::create($attribute->nodeValue));
     }
     $nodes = $xpath->query(sprintf('*[namespace-uri() = "%s"]', XmlLoader::XMLNS_LOADER), $operatorElement);
     foreach ($nodes as $node) {
         $parser = OperatorParserFactoryMethod::create($node->localName);
         $operator->addOperand($parser->parse($node, $xpath));
     }
     return $operator;
 }
Ejemplo n.º 3
0
 private function parseConditionElement(DOMElement $conditionElement)
 {
     $operatorElements = $this->xpath->query(sprintf('*[namespace-uri() = "%s"]', self::XMLNS_LOADER), $conditionElement);
     $operators = array();
     foreach ($operatorElements as $operatorElement) {
         $operatorParser = OperatorParserFactoryMethod::create($operatorElement->localName);
         $operators[] = $operatorParser->parse($operatorElement, $this->xpath);
     }
     switch (count($operators)) {
         case 0:
             return Boolean::true();
         case 1:
             return $operators[0];
         default:
             $and = new AndOp();
             array_map(function ($operator) use($and) {
                 $and->addOperand($operator);
             }, $operators);
             return $and;
     }
 }