-
Notifications
You must be signed in to change notification settings - Fork 730
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
7 changed files
with
203 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
<?php | ||
|
||
namespace Elastica\ResultSet; | ||
|
||
use Elastica\ResultSet; | ||
|
||
/** | ||
* Allows multiple ProcessorInterface instances to operate on the same | ||
* ResultSet, calling each in turn. | ||
*/ | ||
class ChainProcessor implements ProcessorInterface | ||
{ | ||
/** | ||
* @var ProcessorInterface[] | ||
*/ | ||
private $processors; | ||
|
||
/** | ||
* @param ProcessorInterface[] $processors | ||
*/ | ||
public function __construct($processors) | ||
{ | ||
$this->processors = $processors; | ||
} | ||
|
||
/** | ||
* @inheritdoc | ||
*/ | ||
public function process(ResultSet $resultSet) | ||
{ | ||
foreach ($this->processors as $processor) { | ||
$processor->process($resultSet); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
<?php | ||
|
||
namespace Elastica\ResultSet; | ||
|
||
use Elastica\Query; | ||
use Elastica\Response; | ||
use Elastica\ResultSet; | ||
|
||
class ProcessingBuilder implements BuilderInterface | ||
{ | ||
/** | ||
* @var BuilderInterface | ||
*/ | ||
private $builder; | ||
|
||
/** | ||
* @var ProcessorInterface | ||
*/ | ||
private $processor; | ||
|
||
/** | ||
* @param BuilderInterface $builder | ||
* @param ProcessorInterface $processor | ||
*/ | ||
public function __construct(BuilderInterface $builder, ProcessorInterface $processor) | ||
{ | ||
$this->builder = $builder; | ||
$this->processor = $processor; | ||
} | ||
|
||
/** | ||
* Runs any registered transformers on the ResultSet before | ||
* returning it, allowing the transformers to inject additional | ||
* data into each Result. | ||
* | ||
* @param Response $response | ||
* @param Query $query | ||
* @return ResultSet | ||
*/ | ||
public function buildResultSet(Response $response, Query $query) | ||
{ | ||
$resultSet = $this->builder->buildResultSet($response, $query); | ||
|
||
$this->processor->process($resultSet); | ||
|
||
return $resultSet; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
<?php | ||
|
||
namespace Elastica\ResultSet; | ||
|
||
use Elastica\ResultSet; | ||
|
||
interface ProcessorInterface | ||
{ | ||
/** | ||
* Iterates over a ResultSet allowing a processor to iterate over any | ||
* Results as required. | ||
* | ||
* @param ResultSet $resultSet | ||
*/ | ||
public function process(ResultSet $resultSet); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
<?php | ||
|
||
namespace Elastica\Test\Transformer; | ||
|
||
use Elastica\Query; | ||
use Elastica\Response; | ||
use Elastica\ResultSet; | ||
use Elastica\ResultSet\ChainProcessor; | ||
use Elastica\Test\Base as BaseTest; | ||
|
||
/** | ||
* @group unit | ||
*/ | ||
class ChainProcessorTest extends BaseTest | ||
{ | ||
public function testProcessor() | ||
{ | ||
$processor = new ChainProcessor([ | ||
$processor1 = $this->getMock('Elastica\\ResultSet\\ProcessorInterface'), | ||
$processor2 = $this->getMock('Elastica\\ResultSet\\ProcessorInterface') | ||
]); | ||
$resultSet = new ResultSet(new Response(''), new Query(), []); | ||
|
||
$processor1->expects($this->once()) | ||
->method('process') | ||
->with($resultSet); | ||
$processor2->expects($this->once()) | ||
->method('process') | ||
->with($resultSet); | ||
|
||
$processor->process($resultSet); | ||
} | ||
} |
57 changes: 57 additions & 0 deletions
57
test/lib/Elastica/Test/ResultSet/ProcessingBuilderTest.php
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
<?php | ||
|
||
namespace Elastica\Test\ResultSet; | ||
|
||
use Elastica\Query; | ||
use Elastica\Response; | ||
use Elastica\ResultSet; | ||
use Elastica\ResultSet\BuilderInterface; | ||
use Elastica\Test\Base as BaseTest; | ||
|
||
/** | ||
* @group unit | ||
*/ | ||
class ProcessingBuilderTest extends BaseTest | ||
{ | ||
/** | ||
* @var ResultSet\ProcessingBuilder | ||
*/ | ||
private $builder; | ||
|
||
/** | ||
* @var BuilderInterface | ||
*/ | ||
private $innerBuilder; | ||
|
||
/** | ||
* @var ResultSet\ProcessorInterface | ||
*/ | ||
private $processor; | ||
|
||
protected function setUp() | ||
{ | ||
parent::setUp(); | ||
|
||
$this->innerBuilder = $this->getMock('Elastica\\ResultSet\\BuilderInterface'); | ||
$this->processor = $this->getMock('Elastica\\ResultSet\\ProcessorInterface'); | ||
|
||
$this->builder = new ResultSet\ProcessingBuilder($this->innerBuilder, $this->processor); | ||
} | ||
|
||
public function testProcessors() | ||
{ | ||
$response = new Response(''); | ||
$query = new Query(); | ||
$resultSet = new ResultSet($response, $query, []); | ||
|
||
$this->innerBuilder->expects($this->once()) | ||
->method('buildResultSet') | ||
->with($response, $query) | ||
->willReturn($resultSet); | ||
$this->processor->expects($this->once()) | ||
->method('process') | ||
->with($resultSet); | ||
|
||
$this->builder->buildResultSet($response, $query); | ||
} | ||
} |