Skip to content

Commit 0c2e4be

Browse files
nafieslLIQRGV
authored andcommitted
Add setModel Feature (#10)
* Add setModel feature
1 parent a2605c8 commit 0c2e4be

File tree

2 files changed

+42
-2
lines changed

2 files changed

+42
-2
lines changed

src/RequestParser.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ class RequestParser
2828
"!in",
2929
"between",
3030
];
31+
/**
32+
* @var string
33+
*/
34+
protected $modelName;
3135
/**
3236
* @var array
3337
*/
@@ -49,6 +53,13 @@ public function __construct(Request $request)
4953
$this->request = $request;
5054
}
5155

56+
public function setModel(string $modelName): RequestParser
57+
{
58+
$this->modelName = $modelName;
59+
60+
return $this;
61+
}
62+
5263
public function getBuilder(): Builder
5364
{
5465
$modelBuilderStruct = $this->createModelBuilderStruct($this->request);
@@ -79,6 +90,10 @@ private function createModelBuilderStruct(Request $request): ModelBuilderStruct
7990

8091
private function getBaseModelName(Request $request): string
8192
{
93+
if ($this->modelName) {
94+
return $this->modelName;
95+
}
96+
8297
$modelCandidates = [];
8398
$route = $request->route();
8499
$controller = $this->getControllerFromRoute($route);

tests/RequestParserTest.php

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
use Illuminate\Support\Facades\Config;
88
use LIQRGV\QueryFilter\Exception\ModelNotFoundException;
99
use LIQRGV\QueryFilter\Exception\NotModelException;
10+
use LIQRGV\QueryFilter\Mocks\MockClosureModel;
11+
use LIQRGV\QueryFilter\Mocks\MockModel;
1012
use LIQRGV\QueryFilter\Mocks\MockModelController;
1113
use LIQRGV\QueryFilter\RequestParser;
1214
use Symfony\Component\HttpFoundation\ParameterBag;
@@ -36,7 +38,7 @@ function testRequestViaController()
3638
Config::request_parser($requestParserOptions);
3739
$requestParser = new RequestParser($request);
3840
$builderStruct = $requestParser->createModelBuilderStruct($request);
39-
$this->assertEquals('LIQRGV\QueryFilter\Mocks\MockModel', $builderStruct->baseModelName);
41+
$this->assertEquals(MockModel::class, $builderStruct->baseModelName);
4042
}
4143

4244
function testRequestViaClosure()
@@ -60,7 +62,30 @@ function testRequestViaClosure()
6062
Config::request_parser($requestParserOptions);
6163
$requestParser = new RequestParser($request);
6264
$builderStruct = $requestParser->createModelBuilderStruct($request);
63-
$this->assertEquals('LIQRGV\QueryFilter\Mocks\MockClosureModel', $builderStruct->baseModelName);
65+
$this->assertEquals(MockClosureModel::class, $builderStruct->baseModelName);
66+
}
67+
68+
function testModelSetter()
69+
{
70+
$uri = 'some_model';
71+
$controllerClass = MockModelController::class;
72+
$query = new ParameterBag([
73+
"sort" => "-name",
74+
]);
75+
$requestParserOptions = [
76+
'model_namespaces' => [
77+
'LIQRGV\QueryFilter\Mocks',
78+
]
79+
];
80+
81+
$request = $this->createControllerRequest($uri, $controllerClass, $query, $requestParserOptions);
82+
83+
$requestParser = new RequestParser($request);
84+
$requestParser->setModel(MockModel::class);
85+
$builder = $requestParser->getBuilder();
86+
87+
$query = $builder->getQuery();
88+
$this->assertEquals("mock_models", $query->from);
6489
}
6590

6691
function testSortBy()

0 commit comments

Comments
 (0)