for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
namespace Xiag\Rql\Parser\NodeParser;
use Xiag\Rql\Parser\Token;
use Xiag\Rql\Parser\TokenStream;
use Xiag\Rql\Parser\NodeParserInterface;
use Xiag\Rql\Parser\Node\SortNode;
use Xiag\Rql\Parser\SubParserInterface;
class SortNodeParser implements NodeParserInterface
{
/**
* @var SubParserInterface
*/
protected $fieldNameParser;
* @param SubParserInterface $fieldNameParser
public function __construct(SubParserInterface $fieldNameParser)
$this->fieldNameParser = $fieldNameParser;
}
* @inheritdoc
public function parse(TokenStream $tokenStream)
$fields = [];
$tokenStream->expect(Token::T_OPERATOR, 'sort');
$tokenStream->expect(Token::T_OPEN_PARENTHESIS);
do {
$direction = $tokenStream->expect([Token::T_PLUS, Token::T_MINUS]);
$fields[$this->fieldNameParser->parse($tokenStream)] = $direction->test(Token::T_PLUS) ?
SortNode::SORT_ASC :
SortNode::SORT_DESC;
if (!$tokenStream->nextIf(Token::T_COMMA)) {
break;
} while (true);
$tokenStream->expect(Token::T_CLOSE_PARENTHESIS);
return new SortNode($fields);
public function supports(TokenStream $tokenStream)
return $tokenStream->test(Token::T_OPERATOR, 'sort');