Skip to content

Commit

Permalink
feat: spark filter:check shows "Required Filters"
Browse files Browse the repository at this point in the history
  • Loading branch information
kenjis committed Nov 29, 2023
1 parent 507c79c commit 631fdea
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 2 deletions.
27 changes: 27 additions & 0 deletions system/Commands/Utilities/FilterCheck.php
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,8 @@ public function run(array $params)
return EXIT_ERROR;
}

$filters = $this->addRequiredFilters($filterCollector, $filters);

$tbody[] = [
strtoupper($method),
$route,
Expand All @@ -124,4 +126,29 @@ public function run(array $params)

return EXIT_SUCCESS;
}

private function addRequiredFilters(FilterCollector $filterCollector, array $filters): array
{
$output = [];

$required = $filterCollector->getRequiredFilters();

$colored = [];

foreach ($required['before'] as $filter) {
$filter = CLI::color($filter, 'yellow');
$colored[] = $filter;
}
$output['before'] = array_merge($colored, $filters['before']);

$colored = [];

foreach ($required['after'] as $filter) {
$filter = CLI::color($filter, 'yellow');
$colored[] = $filter;
}
$output['after'] = array_merge($filters['after'], $colored);

return $output;
}
}
21 changes: 21 additions & 0 deletions system/Commands/Utilities/Routes/FilterCollector.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@

use CodeIgniter\Config\Services;
use CodeIgniter\Filters\Filters;
use CodeIgniter\HTTP\Method;
use CodeIgniter\HTTP\Request;
use CodeIgniter\Router\Router;
use Config\Filters as FiltersConfig;
Expand All @@ -37,6 +38,8 @@ public function __construct(bool $resetRoutes = false)
}

/**
* Returns filters for the URI
*
* @param string $method HTTP verb like `GET`,`POST` or `CLI`.
* @param string $uri URI path to find filters for
*
Expand Down Expand Up @@ -76,6 +79,24 @@ public function get(string $method, string $uri): array
return $finder->find($uri);
}

/**
* Returns Required Filters
*
* @return array{before: list<string>, after: list<string>} array of filter alias or classname
*/
public function getRequiredFilters(): array
{
$request = Services::incomingrequest(null, false);
$request->setMethod(Method::GET);

$router = $this->createRouter($request);
$filters = $this->createFilters($request);

$finder = new FilterFinder($router, $filters);

return $finder->getRequiredFilters();
}

private function createRouter(Request $request): Router
{
$routes = Services::routes();
Expand Down
16 changes: 16 additions & 0 deletions system/Commands/Utilities/Routes/FilterFinder.php
Original file line number Diff line number Diff line change
Expand Up @@ -77,4 +77,20 @@ public function find(string $uri): array
];
}
}

/**
* Returns Required Filters
*
* @return array{before: list<string>, after:list<string>}
*/
public function getRequiredFilters(): array
{
[$requiredBefore] = $this->filters->getRequiredFilters('before');
[$requiredAfter] = $this->filters->getRequiredFilters('after');

return [
'before' => $requiredBefore,
'after' => $requiredAfter,
];
}
}
4 changes: 2 additions & 2 deletions tests/system/Commands/FilterCheckTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ public function testFilterCheckDefinedRoute(): void
command('filter:check GET /');

$this->assertStringContainsString(
'|GET|/|||',
str_replace(' ', '', $this->getBuffer())
'| GET | / | forcehttps pagecache | pagecache performance toolbar |',
preg_replace('/\033\[.+?m/u', '', $this->getBuffer())
);
}

Expand Down

0 comments on commit 631fdea

Please sign in to comment.