Skip to content

Commit

Permalink
Merge pull request #9 from alphard29/main
Browse files Browse the repository at this point in the history
update limit
  • Loading branch information
cacing69 authored Sep 11, 2023
2 parents 30db9be + 99864df commit e71c423
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 3 deletions.
17 changes: 14 additions & 3 deletions src/Parser.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ class Parser
use HasRawProperty;
use HasDefinersProperty;
use HasFiltersProperty;
public $limit;
protected $limit;
public $onDocumentLoaded;
// 1). \s*from\s*\(\s*(.*?)\s*\)\s*define\s*(.*?)\s*filter\s*(.*)\s*limit\s*(.*)\s*

Expand Down Expand Up @@ -52,9 +52,16 @@ public function __construct($raw)
$this->source = new Source($_from[1]);

if (preg_match("/define\s*(.*)/is", $raw, $_definer)) {
if (preg_match("/filter\s*(.*)\s*limit/i", $_definer[1], $_filter)) {
if (preg_match("/filter\s*(.*)\s*limit/is", $_definer[1], $_filter)) {
// get limit
if (preg_match("/limit\s(\d)/is", $_filter[1], $_limit)) {
preg_match("/(.*?)\s*filter/is", $_definer[1], $_extractDefinerFromFilter);
// extract definer
$this->makeDefiners($_extractDefinerFromFilter[1]);

// extract filter
$this->makeFilters($_filter[1]);

if (preg_match("/limit\s*(\d+)\s*/is", $_definer[1], $_limit)) {
$this->limit = intval($_limit[1]);
}
} elseif (preg_match("/filter\s*(.*)/is", $_definer[1], $_filter)) {
Expand Down Expand Up @@ -177,4 +184,8 @@ public function getDefiners()
{
return $this->definers;
}

public function getLimit() {
return $this->limit;
}
}
25 changes: 25 additions & 0 deletions tests/ParserTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -240,4 +240,29 @@ public function testParseQueryWithReplaceAndAttrAndAppendNodeDefinerReverse2ButW
$this->assertSame('attr(href, div > h1 > span > a)', $parser->getDefiners()[1]);
$this->assertSame("replace('i am', 'you are', div > h1 > span > a)", $parser->getDefiners()[2]);
}

public function testParseWithLimit()
{
$query = "
from ( .item )
define
append_node(.list > .item, li) as list,
attr(href, div > h1 > span > a),
replace('i am', 'you are', div > h1 > span > a)
filter
span > a.title has 'lorem' and
attr(id, span > a) > 9
limit 1
";

$parser = new Parser($query);

$this->assertSame('.item', $parser->getSource()->getRaw());
$this->assertCount(3, $parser->getDefiners(), 'should have 2 definers');
$this->assertCount(2, $parser->getFilters()['and'], 'should have 2 filters');
$this->assertSame(1, $parser->getLimit());
$this->assertSame('append_node(.list > .item, li) as list', $parser->getDefiners()[0]);
$this->assertSame('attr(href, div > h1 > span > a)', $parser->getDefiners()[1]);
$this->assertSame("replace('i am', 'you are', div > h1 > span > a)", $parser->getDefiners()[2]);
}
}

0 comments on commit e71c423

Please # to comment.