Skip to content

Commit 096a0a9

Browse files
committed
feat: convert SqlEntity to interface
1 parent 22958f4 commit 096a0a9

File tree

11 files changed

+92
-46
lines changed

11 files changed

+92
-46
lines changed

src/SqlEntity.php renamed to src/Concerns/DefaultSqlEntityBehaviour.php

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,60 +2,59 @@
22

33
declare(strict_types=1);
44

5-
namespace CalebDW\SqlEntities;
5+
namespace CalebDW\SqlEntities\Concerns;
66

7+
use CalebDW\SqlEntities\Contracts\SqlEntity;
78
use Illuminate\Database\Connection;
8-
use Illuminate\Database\Query\Builder;
99
use Illuminate\Support\Str;
10-
use Stringable;
10+
use Override;
1111

12-
abstract class SqlEntity implements Stringable
12+
/** @phpstan-require-implements SqlEntity */
13+
trait DefaultSqlEntityBehaviour
1314
{
14-
/** The entity definition. */
15-
abstract public function definition(): Builder|string;
15+
/** The connection name. */
16+
protected ?string $connection = null;
1617

1718
/** The entity name. */
19+
protected ?string $name = null;
20+
21+
#[Override]
1822
public function name(): string
1923
{
20-
return Str::snake(class_basename($this));
24+
return $this->name ?? Str::snake(class_basename($this));
2125
}
2226

23-
/** The entity connection name. */
27+
#[Override]
2428
public function connectionName(): ?string
2529
{
26-
return null;
30+
return $this->connection;
2731
}
2832

29-
/**
30-
* Hook before creating the entity.
31-
*
32-
* @return bool true to create the entity, false to skip.
33-
*/
33+
#[Override]
3434
public function creating(Connection $connection): bool
3535
{
3636
return true;
3737
}
3838

39-
/** Hook after creating the entity. */
39+
#[Override]
4040
public function created(Connection $connection): void
4141
{
42+
return;
4243
}
4344

44-
/**
45-
* Hook before dropping the entity.
46-
*
47-
* @return bool true to drop the entity, false to skip.
48-
*/
45+
#[Override]
4946
public function dropping(Connection $connection): bool
5047
{
5148
return true;
5249
}
5350

54-
/** Hook after dropping the entity. */
51+
#[Override]
5552
public function dropped(Connection $connection): void
5653
{
54+
return;
5755
}
5856

57+
#[Override]
5958
public function toString(): string
6059
{
6160
$definition = $this->definition();
@@ -67,6 +66,7 @@ public function toString(): string
6766
return $definition->toRawSql();
6867
}
6968

69+
#[Override]
7070
public function __toString(): string
7171
{
7272
return $this->toString();

src/Contracts/SqlEntity.php

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace CalebDW\SqlEntities\Contracts;
6+
7+
use Illuminate\Database\Connection;
8+
use Illuminate\Database\Query\Builder;
9+
use Stringable;
10+
11+
interface SqlEntity extends Stringable
12+
{
13+
/** The entity definition. */
14+
public function definition(): Builder|string;
15+
16+
/** The entity name. */
17+
public function name(): string;
18+
19+
/** The entity connection name. */
20+
public function connectionName(): ?string;
21+
22+
/**
23+
* Hook before creating the entity.
24+
*
25+
* @return bool true to create the entity, false to skip.
26+
*/
27+
public function creating(Connection $connection): bool;
28+
29+
/** Hook after creating the entity. */
30+
public function created(Connection $connection): void;
31+
32+
/**
33+
* Hook before dropping the entity.
34+
*
35+
* @return bool true to drop the entity, false to skip.
36+
*/
37+
public function dropping(Connection $connection): bool;
38+
39+
/** Hook after dropping the entity. */
40+
public function dropped(Connection $connection): void;
41+
42+
/** Returns a string representation of the entity. */
43+
public function toString(): string;
44+
}

src/Facades/SqlEntity.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44

55
namespace CalebDW\SqlEntities\Facades;
66

7-
use CalebDW\SqlEntities\SqlEntity as SqlEntityBase;
7+
use CalebDW\SqlEntities\Contracts\SqlEntity as SqlEntityContract;
88
use CalebDW\SqlEntities\SqlEntityManager;
99
use Illuminate\Support\Facades\Facade;
1010
use Override;
1111

1212
/**
13-
* @method static SqlEntityBase get(string $name)
14-
* @method static void create(SqlEntityBase|class-string<SqlEntityBase>|string $entity)
15-
* @method static void drop(SqlEntityBase|class-string<SqlEntityBase>|string $entity)
13+
* @method static SqlEntityContract get(string $name)
14+
* @method static void create(SqlEntityContract|class-string<SqlEntityContract>|string $entity)
15+
* @method static void drop(SqlEntityContract|class-string<SqlEntityContract>|string $entity)
1616
* @method static void createAll(?string $type = null, ?string $connection = null)
1717
* @method static void dropAll(?string $type = null, ?string $connection = null)
1818
*

src/Grammars/Grammar.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace CalebDW\SqlEntities\Grammars;
66

7-
use CalebDW\SqlEntities\SqlEntity;
7+
use CalebDW\SqlEntities\Contracts\SqlEntity;
88
use CalebDW\SqlEntities\View;
99
use Illuminate\Database\Connection;
1010
use InvalidArgumentException;

src/ServiceProvider.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace CalebDW\SqlEntities;
66

7-
use CalebDW\SqlEntities\SqlEntity;
7+
use CalebDW\SqlEntities\Contracts\SqlEntity;
88
use CalebDW\SqlEntities\Support\Composer;
99
use Illuminate\Contracts\Foundation\Application;
1010
use Illuminate\Contracts\Support\DeferrableProvider;
@@ -33,7 +33,7 @@ public function register(): void
3333
}
3434

3535
/** @return Collection<int, SqlEntity> */
36-
private function getEntities(Application $app): Collection
36+
protected function getEntities(Application $app): Collection
3737
{
3838
$composer = new Composer($app->make('files'), $app->basePath());
3939

src/SqlEntityManager.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
namespace CalebDW\SqlEntities;
66

7-
use CalebDW\SqlEntities\SqlEntity;
7+
use CalebDW\SqlEntities\Contracts\SqlEntity;
88
use CalebDW\SqlEntities\Grammars\Grammar;
99
use CalebDW\SqlEntities\Grammars\PostgresGrammar;
1010
use CalebDW\SqlEntities\Grammars\SQLiteGrammar;

src/View.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44

55
namespace CalebDW\SqlEntities;
66

7-
abstract class View extends SqlEntity
7+
use CalebDW\SqlEntities\Concerns\DefaultSqlEntityBehaviour;
8+
use CalebDW\SqlEntities\Contracts\SqlEntity;
9+
10+
abstract class View implements SqlEntity
811
{
12+
use Concerns\DefaultSqlEntityBehaviour;
913
}

tests/Feature/SqlEntityManagerTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
declare(strict_types=1);
44

5-
use CalebDW\SqlEntities\SqlEntity;
5+
use CalebDW\SqlEntities\Contracts\SqlEntity;
66
use CalebDW\SqlEntities\SqlEntityManager;
77
use CalebDW\SqlEntities\View;
88
use Illuminate\Database\Connection;

tests/Feature/SqlEntityTest.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
declare(strict_types=1);
44

5-
use CalebDW\SqlEntities\SqlEntity;
5+
use CalebDW\SqlEntities\Concerns\DefaultSqlEntityBehaviour;
6+
use CalebDW\SqlEntities\Contracts\SqlEntity;
67
use Illuminate\Database\Eloquent\Model;
78
use Illuminate\Database\Query\Builder;
89

@@ -25,8 +26,10 @@ class Foo extends Model
2526
protected $table = 'foo';
2627
}
2728

28-
class FooEntity extends SqlEntity
29+
class FooEntity implements SqlEntity
2930
{
31+
use DefaultSqlEntityBehaviour;
32+
3033
public function definition(): Builder|string
3134
{
3235
return Foo::query()

tests/Unit/Grammars/GrammarTest.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
declare(strict_types=1);
44

5-
use CalebDW\SqlEntities\SqlEntity;
5+
use CalebDW\SqlEntities\Concerns\DefaultSqlEntityBehaviour;
6+
use CalebDW\SqlEntities\Contracts\SqlEntity;
67
use CalebDW\SqlEntities\View;
78
use CalebDW\SqlEntities\Grammars\Grammar;
89
use Illuminate\Database\Connection;
@@ -39,8 +40,10 @@ public function compileViewDrop(View $view): string
3940
}
4041
}
4142

42-
class UnknownSqlEntity extends SqlEntity
43+
class UnknownSqlEntity implements SqlEntity
4344
{
45+
use DefaultSqlEntityBehaviour;
46+
4447
public function definition(): Builder|string
4548
{
4649
return '';

0 commit comments

Comments
 (0)