diff --git a/composer.json b/composer.json index 3db02ef..3090499 100644 --- a/composer.json +++ b/composer.json @@ -39,7 +39,7 @@ "extra":{ "laravel":{ "providers":[ - "LaravelPropertyBag\\ServiceProvider" + "LaravelPropertyBag\\PropertyBagServiceProvider" ] } } diff --git a/config/property-bag.php b/config/property-bag.php new file mode 100644 index 0000000..99cceaa --- /dev/null +++ b/config/property-bag.php @@ -0,0 +1,8 @@ + \LaravelPropertyBag\Settings\PropertyBag::class, +]; diff --git a/src/PropertyBagServiceProvider.php b/src/PropertyBagServiceProvider.php new file mode 100644 index 0000000..2f1e215 --- /dev/null +++ b/src/PropertyBagServiceProvider.php @@ -0,0 +1,75 @@ +registerCommands(); + } + + /** + * Register any other events for your application. + * + * @return void + */ + public function boot() + { + $this->publishes([ + __DIR__.'/../config/property-bag.php' => config_path('property-bag.php'), + ], 'config'); + + $this->mergeConfigFrom(__DIR__.'/../config/property-bag.php', 'property-bag'); + + $this->publishes([ + __DIR__.'/Migrations/' => database_path('migrations'), + ], 'migrations'); + } + + /** + * Register Artisan commands. + */ + protected function registerCommands() + { + $this->app->singleton('command.pbag.make', function ($app) { + return $app['LaravelPropertyBag\Commands\PublishSettingsConfig']; + }); + + $this->app->singleton('command.pbag.rules', function ($app) { + return $app['LaravelPropertyBag\Commands\PublishRulesFile']; + }); + + $this->commands('command.pbag.make'); + + $this->commands('command.pbag.rules'); + } + + public static function determinePropertyBagModel(): string + { + $propertyBagModel = config('property-bag.property_bag_model') ?? PropertyBag::class; + + if (!is_a($propertyBagModel, Model::class, true)) { + throw new ModelNotFoundException($propertyBagModel); + } + + return $propertyBagModel; + } + + public static function getPropertyBagModelInstance(): Model + { + $propertyBagModelClassName = self::determinePropertyBagModel(); + + return new $propertyBagModelClassName(); + } +} diff --git a/src/ServiceProvider.php b/src/ServiceProvider.php deleted file mode 100644 index 4a19790..0000000 --- a/src/ServiceProvider.php +++ /dev/null @@ -1,48 +0,0 @@ -registerCommands(); - } - - /** - * Register any other events for your application. - * - * @return void - */ - public function boot() - { - $this->publishes([ - __DIR__.'/Migrations/' => database_path('migrations'), - ], 'migrations'); - } - - /** - * Register Artisan commands. - */ - protected function registerCommands() - { - $this->app->singleton('command.pbag.make', function ($app) { - return $app['LaravelPropertyBag\Commands\PublishSettingsConfig']; - }); - - $this->app->singleton('command.pbag.rules', function ($app) { - return $app['LaravelPropertyBag\Commands\PublishRulesFile']; - }); - - $this->commands('command.pbag.make'); - - $this->commands('command.pbag.rules'); - } -} diff --git a/src/Settings/HasSettings.php b/src/Settings/HasSettings.php index 1482b26..349cc9e 100644 --- a/src/Settings/HasSettings.php +++ b/src/Settings/HasSettings.php @@ -3,6 +3,7 @@ namespace LaravelPropertyBag\Settings; use LaravelPropertyBag\Helpers\NameResolver; +use LaravelPropertyBag\PropertyBagServiceProvider; use LaravelPropertyBag\Exceptions\ResourceNotFound; trait HasSettings @@ -21,7 +22,7 @@ trait HasSettings */ public function propertyBag() { - return $this->morphMany(PropertyBag::class, 'resource'); + return $this->morphMany(PropertyBagServiceProvider::determinePropertyBagModel(), 'resource'); } /** diff --git a/src/Settings/Settings.php b/src/Settings/Settings.php index 0af11dd..1a6201c 100644 --- a/src/Settings/Settings.php +++ b/src/Settings/Settings.php @@ -3,6 +3,7 @@ namespace LaravelPropertyBag\Settings; use Illuminate\Database\Eloquent\Model; +use LaravelPropertyBag\PropertyBagServiceProvider; use LaravelPropertyBag\Settings\Rules\RuleValidator; use LaravelPropertyBag\Exceptions\InvalidSettingsValue; @@ -333,8 +334,10 @@ public function isSaved($key) */ protected function createRecord($key, $value) { + $propertyBagModel = PropertyBagServiceProvider::determinePropertyBagModel(); + return $this->propertyBag()->save( - new PropertyBag([ + new $propertyBagModel([ 'key' => $key, 'value' => $this->valueToJson($value), ]) diff --git a/tests/TestCase.php b/tests/TestCase.php index a5787ed..50d0623 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -3,13 +3,13 @@ namespace LaravelPropertyBag\tests; use Hash; -use LaravelPropertyBag\ServiceProvider; use Illuminate\Contracts\Console\Kernel; use LaravelPropertyBag\tests\Classes\Post; use LaravelPropertyBag\tests\Classes\User; use LaravelPropertyBag\tests\Classes\Admin; use LaravelPropertyBag\tests\Classes\Group; use LaravelPropertyBag\tests\Classes\Comment; +use LaravelPropertyBag\PropertyBagServiceProvider; use Laravel\BrowserKitTesting\TestCase as BaseTestCase; use LaravelPropertyBag\tests\Migrations\CreatePostsTable; use LaravelPropertyBag\tests\Migrations\CreateUsersTable; @@ -34,7 +34,7 @@ public function createApplication() { $app = require __DIR__.'/../vendor/laravel/laravel/bootstrap/app.php'; - $app->register(ServiceProvider::class); + $app->register(PropertyBagServiceProvider::class); $app->make(Kernel::class)->bootstrap();