Skip to content

Commit

Permalink
Merge pull request #62 from jerguslejko/classifiers
Browse files Browse the repository at this point in the history
Introduce Classifiers
  • Loading branch information
stefanzweifel authored Oct 16, 2017
2 parents b33af01 + c41f44b commit ffbc799
Show file tree
Hide file tree
Showing 25 changed files with 493 additions and 453 deletions.
37 changes: 37 additions & 0 deletions src/Classifiers/Classifier.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<?php

namespace Wnx\LaravelStats\Classifiers;

use Wnx\LaravelStats\ReflectionClass;

class Classifier
{
const CLASSIFIERS = [
ControllerClassifier::class,
ModelClassifier::class,
CommandClassifier::class,
RuleClassifier::class,
PolicyClassifier::class,
MiddlewareClassifier::class,
EventClassifier::class,
MailClassifier::class,
NotificationClassifier::class,
JobClassifier::class,
MigrationClassifier::class,
RequestClassifier::class,
ResourceClassifier::class,
SeederClassifier::class,
ServiceProviderClassifier::class,
];

public function classify(ReflectionClass $class)
{
foreach (self::CLASSIFIERS as $classifier) {
$c = new $classifier;

if ($c->satisfies($class)) {
return $c->getName();
}
}
}
}
18 changes: 18 additions & 0 deletions src/Classifiers/CommandClassifier.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

namespace Wnx\LaravelStats\Classifiers;

use Wnx\LaravelStats\ReflectionClass;

class CommandClassifier extends Classifier
{
public function getName()
{
return 'Commands';
}

public function satisfies(ReflectionClass $class)
{
return $class->isSubclassOf(\Illuminate\Console\Command::class);
}
}
18 changes: 18 additions & 0 deletions src/Classifiers/ControllerClassifier.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

namespace Wnx\LaravelStats\Classifiers;

use Wnx\LaravelStats\ReflectionClass;

class ControllerClassifier extends Classifier
{
public function getName()
{
return 'Controllers';
}

public function satisfies(ReflectionClass $class)
{
return $class->isSubclassOf(\Illuminate\Routing\Controller::class);
}
}
24 changes: 24 additions & 0 deletions src/Classifiers/EventClassifier.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?php

namespace Wnx\LaravelStats\Classifiers;

use Wnx\LaravelStats\ReflectionClass;

class EventClassifier extends Classifier
{
public function getName()
{
return 'Events';
}

public function satisfies(ReflectionClass $class)
{
foreach ($class->getTraits() as $trait) {
if ($trait->name == \Illuminate\Foundation\Events\Dispatchable::class) {
return true;
}
}

return false;
}
}
24 changes: 24 additions & 0 deletions src/Classifiers/JobClassifier.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
<?php

namespace Wnx\LaravelStats\Classifiers;

use Wnx\LaravelStats\ReflectionClass;

class JobClassifier extends Classifier
{
public function getName()
{
return 'Jobs';
}

public function satisfies(ReflectionClass $class)
{
foreach ($class->getTraits() as $trait) {
if ($trait->name == \Illuminate\Foundation\Bus\Dispatchable::class) {
return true;
}
}

return false;
}
}
18 changes: 18 additions & 0 deletions src/Classifiers/MailClassifier.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

namespace Wnx\LaravelStats\Classifiers;

use Wnx\LaravelStats\ReflectionClass;

class MailClassifier extends Classifier
{
public function getName()
{
return 'Mails';
}

public function satisfies(ReflectionClass $class)
{
return $class->isSubclassOf(\Illuminate\Mail\Mailable::class);
}
}
30 changes: 30 additions & 0 deletions src/Classifiers/MiddlewareClassifier.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<?php

namespace Wnx\LaravelStats\Classifiers;

use Wnx\LaravelStats\ReflectionClass;
use Illuminate\Contracts\Auth\Access\Gate;

class MiddlewareClassifier extends Classifier
{
public function getName()
{
return 'Middlewares';
}

public function satisfies(ReflectionClass $class)
{
$kernel = resolve(\Illuminate\Contracts\Http\Kernel::class);

if ($kernel->hasMiddleware($class->getName())) {
return true;
}

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

return $mergedMiddlewares->contains($class->getName());
}
}
18 changes: 18 additions & 0 deletions src/Classifiers/MigrationClassifier.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

namespace Wnx\LaravelStats\Classifiers;

use Wnx\LaravelStats\ReflectionClass;

class MigrationClassifier extends Classifier
{
public function getName()
{
return 'Migrations';
}

public function satisfies(ReflectionClass $class)
{
return $class->isSubclassOf(\Illuminate\Database\Migrations\Migration::class);
}
}
18 changes: 18 additions & 0 deletions src/Classifiers/ModelClassifier.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

namespace Wnx\LaravelStats\Classifiers;

use Wnx\LaravelStats\ReflectionClass;

class ModelClassifier extends Classifier
{
public function getName()
{
return 'Models';
}

public function satisfies(ReflectionClass $class)
{
return $class->isSubclassOf(\Illuminate\Database\Eloquent\Model::class);
}
}
18 changes: 18 additions & 0 deletions src/Classifiers/NotificationClassifier.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

namespace Wnx\LaravelStats\Classifiers;

use Wnx\LaravelStats\ReflectionClass;

class NotificationClassifier extends Classifier
{
public function getName()
{
return 'Notifications';
}

public function satisfies(ReflectionClass $class)
{
return $class->isSubclassOf(\Illuminate\Notifications\Notification::class);
}
}
21 changes: 21 additions & 0 deletions src/Classifiers/PolicyClassifier.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<?php

namespace Wnx\LaravelStats\Classifiers;

use Wnx\LaravelStats\ReflectionClass;
use Illuminate\Contracts\Auth\Access\Gate;

class PolicyClassifier extends Classifier
{
public function getName()
{
return 'Policies';
}

public function satisfies(ReflectionClass $class)
{
return in_array(
$class->getName(), resolve(Gate::class)->policies()
);
}
}
18 changes: 18 additions & 0 deletions src/Classifiers/RequestClassifier.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

namespace Wnx\LaravelStats\Classifiers;

use Wnx\LaravelStats\ReflectionClass;

class RequestClassifier extends Classifier
{
public function getName()
{
return 'Requests';
}

public function satisfies(ReflectionClass $class)
{
return $class->isSubclassOf(\Illuminate\Foundation\Http\FormRequest::class);
}
}
18 changes: 18 additions & 0 deletions src/Classifiers/ResourceClassifier.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

namespace Wnx\LaravelStats\Classifiers;

use Wnx\LaravelStats\ReflectionClass;

class ResourceClassifier extends Classifier
{
public function getName()
{
return 'Resources';
}

public function satisfies(ReflectionClass $class)
{
return $class->isSubclassOf(\Illuminate\Http\Resources\Json\Resource::class);
}
}
18 changes: 18 additions & 0 deletions src/Classifiers/RuleClassifier.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

namespace Wnx\LaravelStats\Classifiers;

use Wnx\LaravelStats\ReflectionClass;

class RuleClassifier extends Classifier
{
public function getName()
{
return 'Rules';
}

public function satisfies(ReflectionClass $class)
{
return $class->implementsInterface(\Illuminate\Contracts\Validation\Rule::class);
}
}
18 changes: 18 additions & 0 deletions src/Classifiers/SeederClassifier.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

namespace Wnx\LaravelStats\Classifiers;

use Wnx\LaravelStats\ReflectionClass;

class SeederClassifier extends Classifier
{
public function getName()
{
return 'Seeders';
}

public function satisfies(ReflectionClass $class)
{
return $class->isSubclassOf(\Illuminate\Database\Seeder::class);
}
}
18 changes: 18 additions & 0 deletions src/Classifiers/ServiceProviderClassifier.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?php

namespace Wnx\LaravelStats\Classifiers;

use Wnx\LaravelStats\ReflectionClass;

class ServiceProviderClassifier extends Classifier
{
public function getName()
{
return 'Service Providers';
}

public function satisfies(ReflectionClass $class)
{
return $class->isSubclassOf(\Illuminate\Support\ServiceProvider::class);
}
}
Loading

0 comments on commit ffbc799

Please sign in to comment.