Skip to content

Commit

Permalink
Merge 910b405 into 7d193d1
Browse files Browse the repository at this point in the history
  • Loading branch information
pvsaintpe committed Jul 17, 2019
2 parents 7d193d1 + 910b405 commit fee24ee
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 46 deletions.
4 changes: 2 additions & 2 deletions README.md
Expand Up @@ -138,13 +138,13 @@ class SomeExtension extends AbstractExtension

```php
use Illuminate\Support\ServiceProvider;
use Umbrellio\Postgres\UmbrellioPostgresProvider;
use Umbrellio\Postgres\PostgresConnection;

class SomeServiceProvider extends ServiceProvider
{
public function register(): void
{
UmbrellioPostgresProvider::registerExtension(SomeExtension::class);
PostgresConnection::registerExtension(SomeExtension::class);
}
}
```
Expand Down
40 changes: 40 additions & 0 deletions src/PostgresConnection.php
Expand Up @@ -6,13 +6,33 @@

use Illuminate\Database\PostgresConnection as BasePostgresConnection;
use Illuminate\Support\Traits\Macroable;
use Umbrellio\Postgres\Extensions\AbstractExtension;
use Umbrellio\Postgres\Extensions\Exceptions\ExtensionInvalidException;
use Umbrellio\Postgres\Schema\Builder;
use Umbrellio\Postgres\Schema\Grammars\PostgresGrammar;

class PostgresConnection extends BasePostgresConnection
{
use Macroable;

private static $extensions = [];

/**
* @param AbstractExtension|string $extension
* @codeCoverageIgnore
*/
final public static function registerExtension(string $extension): void
{
if (!is_subclass_of($extension, AbstractExtension::class)) {
throw new ExtensionInvalidException(sprintf(
'Class %s must be implemented from %s',
$extension,
AbstractExtension::class
));
}
self::$extensions[$extension::getName()] = $extension;
}

public function getSchemaBuilder()
{
if ($this->schemaGrammar === null) {
Expand All @@ -21,8 +41,28 @@ public function getSchemaBuilder()
return new Builder($this);
}

public function useDefaultPostProcessor()
{
parent::useDefaultPostProcessor();
$this->registerExtensions();
}

protected function getDefaultSchemaGrammar()
{
return $this->withTablePrefix(new PostgresGrammar());
}

/**
* @codeCoverageIgnore
*/
final private function registerExtensions(): void
{
collect(self::$extensions)->each(function ($extension, $key) {
/** @var AbstractExtension $extension */
$extension::register();
foreach ($extension::getTypes() as $type => $typeClass) {
$this->getSchemaBuilder()->registerCustomDoctrineType($typeClass, $type, $type);
}
});
}
}
40 changes: 2 additions & 38 deletions src/UmbrellioPostgresProvider.php
Expand Up @@ -6,37 +6,13 @@

use Illuminate\Database\DatabaseManager;
use Illuminate\Database\DatabaseServiceProvider;
use Illuminate\Support\Facades\DB;
use Umbrellio\Postgres\Connectors\ConnectionFactory;
use Umbrellio\Postgres\Extensions\AbstractExtension;
use Umbrellio\Postgres\Extensions\Exceptions\ExtensionInvalidException;

class UmbrellioPostgresProvider extends DatabaseServiceProvider
{
private static $extensions = [];

/**
* @param AbstractExtension|string $extension
* @codeCoverageIgnore
*/
final public static function registerExtension(string $extension): void
{
if (!is_subclass_of($extension, AbstractExtension::class)) {
throw new ExtensionInvalidException(sprintf(
'Class %s must be implemented from %s',
$extension,
AbstractExtension::class
));
}
self::$extensions[$extension::getName()] = $extension;
}

public function boot()
{
parent::boot();
self::registerExtensions();
}

protected function registerConnectionServices(): void
{
$this->app->singleton('db.factory', function ($app) {
Expand All @@ -46,21 +22,9 @@ protected function registerConnectionServices(): void
$this->app->singleton('db', function ($app) {
return new DatabaseManager($app, $app['db.factory']);
});
}

/**
* @codeCoverageIgnore
*/
final private static function registerExtensions(): void
{
/** @var PostgresConnection $connection */
$connection = DB::connection();
collect(self::$extensions)->each(function ($extension, $key) use ($connection) {
/** @var AbstractExtension $extension */
$extension::register();
foreach ($extension::getTypes() as $type => $typeClass) {
$connection->getSchemaBuilder()->registerCustomDoctrineType($typeClass, $type, $type);
}
$this->app->bind('db.connection', function ($app) {
return $app['db']->connection();
});
}
}
9 changes: 3 additions & 6 deletions tests/Unit/Schema/Grammars/GrammarTest.php
Expand Up @@ -17,7 +17,7 @@ public function addingGinIndex()
{
$blueprint = new Blueprint('test');
$blueprint->gin('foo');
$statements = $blueprint->toSql($this->getConnection(), $this->getGrammar());
$statements = $blueprint->toSql($this->getConnectionMock(), $this->getGrammar());
$this->assertCount(1, $statements);
$this->assertStringContainsString('CREATE INDEX', $statements[0]);
$this->assertStringContainsString('GIN("foo")', $statements[0]);
Expand All @@ -28,16 +28,13 @@ public function addingGistIndex()
{
$blueprint = new Blueprint('test');
$blueprint->gist('foo');
$statements = $blueprint->toSql($this->getConnection(), $this->getGrammar());
$statements = $blueprint->toSql($this->getConnectionMock(), $this->getGrammar());
$this->assertCount(1, $statements);
$this->assertStringContainsString('CREATE INDEX', $statements[0]);
$this->assertStringContainsString('GIST("foo")', $statements[0]);
}

/**
* @return PostgresConnection
*/
protected function getConnection()
protected function getConnectionMock()
{
return Mockery::mock(PostgresConnection::class);
}
Expand Down

0 comments on commit fee24ee

Please sign in to comment.