Skip to content

Commit

Permalink
Detect Registered Middlewares
Browse files Browse the repository at this point in the history
  • Loading branch information
stefanzweifel committed Oct 11, 2017
1 parent ef1a0b0 commit 2cef3b5
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 1 deletion.
1 change: 0 additions & 1 deletion src/ComponentConfiguration.php
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,6 @@ public function get() : Collection
],
[
'name' => 'Middlewares',
// TODO
],
[
'name' => 'PHPUnit Tests',
Expand Down
35 changes: 35 additions & 0 deletions src/ReflectionClass.php
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ public function getLaravelComponentName()
return $componentName;
} elseif ($componentName = $this->isRegisteredPolicy($this->class)) {
return $componentName;
} elseif ($componentName = $this->isRegisteredMiddleware($this->class)) {
return $componentName;
}
}

Expand Down Expand Up @@ -193,4 +195,37 @@ public function isRegisteredPolicy(\ReflectionClass $reflection)

return false;
}

/**
* Determine if the given class is a registered Middleware
*
* @param \ReflectionClass $reflection
*
* @return boolean
*/
public function isRegisteredMiddleware(\ReflectionClass $reflection)
{
// The Router Instance returns emtpy array, if I don't resolve the
// HTTP Kernel here. Why is that? This seems weird ...
resolve(\Illuminate\Contracts\Http\Kernel::class);
$router = resolve('router');

$middlewares = collect($router->getMiddleware())->flatten();
$groupMiddlewares = collect($router->getMiddlewareGroups())->flatten();
$mergedMiddlewares = $middlewares->merge($groupMiddlewares);

if ($mergedMiddlewares->contains($reflection->getName())) {
return 'Middlewares';
}

$hasParentClass = $reflection->getParentClass();

// Does the Class have a Parent Class?
// If yes, recursively call this method
if ($hasParentClass !== false) {
return $this->isRegisteredMiddleware($hasParentClass);
}

return false;
}
}
1 change: 1 addition & 0 deletions tests/Commands/StatsListCommandTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ public function it_works()
$this->artisan('stats');
$resultAsText = Artisan::output();

$this->assertContains('Middlewares', $resultAsText);
$this->assertContains('Controllers', $resultAsText);
$this->assertContains('Total', $resultAsText);
}
Expand Down
22 changes: 22 additions & 0 deletions tests/ReflectionClassTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use Illuminate\Support\Facades\Gate;
use Wnx\LaravelStats\ReflectionClass;
use Wnx\LaravelStats\Tests\Stubs\Controllers\ProjectsController;
use Wnx\LaravelStats\Tests\Stubs\Middlewares\DemoMiddleware;
use Wnx\LaravelStats\Tests\Stubs\Models\Project;
use Wnx\LaravelStats\Tests\Stubs\Policies\DemoPolicy;
use Wnx\LaravelStats\Tests\Stubs\Rules\DemoRule;
Expand Down Expand Up @@ -81,4 +82,25 @@ public function it_returns_component_name_for_policies()

$this->assertEquals('Policies', $reflection->getLaravelComponentName());
}

/** @test */
public function it_returns_component_name_for_middlewares()
{
$reflection = new ReflectionClass(DemoMiddleware::class);

$this->assertTrue($reflection->isLaravelComponent());
$this->assertEquals('Middlewares', $reflection->getLaravelComponentName());
}

/** @test */
public function it_currently_does_not_recognize_middlewares_which_are_only_defined_in_the_global_middleware_array()
{
// TODO: The TrimStrings-Middleware should also be recognized as a Middleware, even though
// it has only been declared in the `$middleware` variable

$reflection = new ReflectionClass(\Illuminate\Foundation\Http\Middleware\TrimStrings::class);

$this->assertFalse($reflection->isLaravelComponent());
$this->assertEquals(null, $reflection->getLaravelComponentName());
}
}

0 comments on commit 2cef3b5

Please sign in to comment.