From b1688c6b500436165a9854e02bf1c4c3e017694d Mon Sep 17 00:00:00 2001 From: Toby Bradshaw Date: Wed, 17 Mar 2021 09:14:20 +0000 Subject: [PATCH 1/9] add ability to chose model --- config/property-bag.php | 8 ++++++++ src/ServiceProvider.php | 6 ++++++ src/Settings/Settings.php | 22 +++++++++++++++++++++- 3 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 config/property-bag.php 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/ServiceProvider.php b/src/ServiceProvider.php index 4a19790..93d57d7 100644 --- a/src/ServiceProvider.php +++ b/src/ServiceProvider.php @@ -23,6 +23,12 @@ public function register() */ 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'); diff --git a/src/Settings/Settings.php b/src/Settings/Settings.php index 0af11dd..eabe180 100644 --- a/src/Settings/Settings.php +++ b/src/Settings/Settings.php @@ -3,8 +3,10 @@ namespace LaravelPropertyBag\Settings; use Illuminate\Database\Eloquent\Model; -use LaravelPropertyBag\Settings\Rules\RuleValidator; use LaravelPropertyBag\Exceptions\InvalidSettingsValue; +use LaravelPropertyBag\Exceptions\ResourceNotFound; +use LaravelPropertyBag\Settings\PropertyBag; +use LaravelPropertyBag\Settings\Rules\RuleValidator; class Settings { @@ -61,6 +63,24 @@ public function __construct(ResourceConfig $settingsConfig, Model $resource) $this->sync(); } + public static function determinePropertyBagModel(): string + { + $propertyBagModel = config('property-bag.property_bag_model') ?? PropertyBag::class; + + if (! is_a($propertyBagModel, Model::class, true)) { + throw ResourceNotFound($propertyBagModel); + } + + return $propertyBagModel; + } + + public static function getPropertyBagModelInstance(): Model + { + $propertyBagModelClassName = self::determinePropertyBagModel(); + + return new $propertyBagModelClassName(); + } + /** * Get the property bag relationshp off the resource. * From c72496224a26496604db3e2f122eef9b76ccda62 Mon Sep 17 00:00:00 2001 From: Toby Bradshaw Date: Wed, 17 Mar 2021 10:18:34 +0000 Subject: [PATCH 2/9] a few minor changes to service provider --- ...der.php => PropertyBagServiceProvider.php} | 25 +++++++++++++++++-- src/Settings/HasSettings.php | 3 ++- src/Settings/Settings.php | 18 ------------- 3 files changed, 25 insertions(+), 21 deletions(-) rename src/{ServiceProvider.php => PropertyBagServiceProvider.php} (60%) diff --git a/src/ServiceProvider.php b/src/PropertyBagServiceProvider.php similarity index 60% rename from src/ServiceProvider.php rename to src/PropertyBagServiceProvider.php index 93d57d7..cec5dc2 100644 --- a/src/ServiceProvider.php +++ b/src/PropertyBagServiceProvider.php @@ -2,9 +2,12 @@ namespace LaravelPropertyBag; -use Illuminate\Support\ServiceProvider as BaseProvider; +use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\ModelNotFoundException; +use Illuminate\Support\ServiceProvider; +use LaravelPropertyBag\Settings\PropertyBag; -class ServiceProvider extends BaseProvider +class PropertyBagServiceProvider extends ServiceProvider { /** * Register bindings in the container. @@ -51,4 +54,22 @@ protected function registerCommands() $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 ModelNotFoundException($propertyBagModel); + } + + return $propertyBagModel; + } + + public static function getPropertyBagModelInstance(): Model + { + $propertyBagModelClassName = self::determinePropertyBagModel(); + + return new $propertyBagModelClassName(); + } } diff --git a/src/Settings/HasSettings.php b/src/Settings/HasSettings.php index 1482b26..b8a0483 100644 --- a/src/Settings/HasSettings.php +++ b/src/Settings/HasSettings.php @@ -4,6 +4,7 @@ use LaravelPropertyBag\Helpers\NameResolver; use LaravelPropertyBag\Exceptions\ResourceNotFound; +use LaravelPropertyBag\PropertyBagServiceProvider; 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 eabe180..01db1d6 100644 --- a/src/Settings/Settings.php +++ b/src/Settings/Settings.php @@ -63,24 +63,6 @@ public function __construct(ResourceConfig $settingsConfig, Model $resource) $this->sync(); } - public static function determinePropertyBagModel(): string - { - $propertyBagModel = config('property-bag.property_bag_model') ?? PropertyBag::class; - - if (! is_a($propertyBagModel, Model::class, true)) { - throw ResourceNotFound($propertyBagModel); - } - - return $propertyBagModel; - } - - public static function getPropertyBagModelInstance(): Model - { - $propertyBagModelClassName = self::determinePropertyBagModel(); - - return new $propertyBagModelClassName(); - } - /** * Get the property bag relationshp off the resource. * From 5aedd3aad94b95be12fc74294b0369aa8afd8db5 Mon Sep 17 00:00:00 2001 From: Toby Bradshaw Date: Wed, 17 Mar 2021 10:29:30 +0000 Subject: [PATCH 3/9] update composer json --- composer.json | 2 +- src/PropertyBagServiceProvider.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) 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/src/PropertyBagServiceProvider.php b/src/PropertyBagServiceProvider.php index cec5dc2..4d12557 100644 --- a/src/PropertyBagServiceProvider.php +++ b/src/PropertyBagServiceProvider.php @@ -60,7 +60,7 @@ public static function determinePropertyBagModel(): string $propertyBagModel = config('property-bag.property_bag_model') ?? PropertyBag::class; if (! is_a($propertyBagModel, Model::class, true)) { - throw ModelNotFoundException($propertyBagModel); + throw new ModelNotFoundException($propertyBagModel); } return $propertyBagModel; From 82c6e0a8e7ea9910ac60908a95e2f70b35b0de57 Mon Sep 17 00:00:00 2001 From: Toby Bradshaw Date: Wed, 17 Mar 2021 14:16:56 +0000 Subject: [PATCH 4/9] use the specific model --- src/Settings/Settings.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Settings/Settings.php b/src/Settings/Settings.php index 01db1d6..d662a24 100644 --- a/src/Settings/Settings.php +++ b/src/Settings/Settings.php @@ -5,6 +5,7 @@ use Illuminate\Database\Eloquent\Model; use LaravelPropertyBag\Exceptions\InvalidSettingsValue; use LaravelPropertyBag\Exceptions\ResourceNotFound; +use LaravelPropertyBag\PropertyBagServiceProvider; use LaravelPropertyBag\Settings\PropertyBag; use LaravelPropertyBag\Settings\Rules\RuleValidator; @@ -335,8 +336,9 @@ 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), ]) From b48758a1d56e3227d06653a9525de1b4953d74f2 Mon Sep 17 00:00:00 2001 From: Toby Bradshaw Date: Wed, 17 Mar 2021 14:22:15 +0000 Subject: [PATCH 5/9] style changes --- src/PropertyBagServiceProvider.php | 4 ++-- src/Settings/HasSettings.php | 2 +- src/Settings/Settings.php | 4 +--- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/PropertyBagServiceProvider.php b/src/PropertyBagServiceProvider.php index 4d12557..2f1e215 100644 --- a/src/PropertyBagServiceProvider.php +++ b/src/PropertyBagServiceProvider.php @@ -3,9 +3,9 @@ namespace LaravelPropertyBag; use Illuminate\Database\Eloquent\Model; -use Illuminate\Database\Eloquent\ModelNotFoundException; use Illuminate\Support\ServiceProvider; use LaravelPropertyBag\Settings\PropertyBag; +use Illuminate\Database\Eloquent\ModelNotFoundException; class PropertyBagServiceProvider extends ServiceProvider { @@ -59,7 +59,7 @@ public static function determinePropertyBagModel(): string { $propertyBagModel = config('property-bag.property_bag_model') ?? PropertyBag::class; - if (! is_a($propertyBagModel, Model::class, true)) { + if (!is_a($propertyBagModel, Model::class, true)) { throw new ModelNotFoundException($propertyBagModel); } diff --git a/src/Settings/HasSettings.php b/src/Settings/HasSettings.php index b8a0483..349cc9e 100644 --- a/src/Settings/HasSettings.php +++ b/src/Settings/HasSettings.php @@ -3,8 +3,8 @@ namespace LaravelPropertyBag\Settings; use LaravelPropertyBag\Helpers\NameResolver; -use LaravelPropertyBag\Exceptions\ResourceNotFound; use LaravelPropertyBag\PropertyBagServiceProvider; +use LaravelPropertyBag\Exceptions\ResourceNotFound; trait HasSettings { diff --git a/src/Settings/Settings.php b/src/Settings/Settings.php index d662a24..66dab6e 100644 --- a/src/Settings/Settings.php +++ b/src/Settings/Settings.php @@ -3,11 +3,9 @@ namespace LaravelPropertyBag\Settings; use Illuminate\Database\Eloquent\Model; -use LaravelPropertyBag\Exceptions\InvalidSettingsValue; -use LaravelPropertyBag\Exceptions\ResourceNotFound; use LaravelPropertyBag\PropertyBagServiceProvider; -use LaravelPropertyBag\Settings\PropertyBag; use LaravelPropertyBag\Settings\Rules\RuleValidator; +use LaravelPropertyBag\Exceptions\InvalidSettingsValue; class Settings { From ee952a2a840c36b16004bc63412ef99d76de477d Mon Sep 17 00:00:00 2001 From: Toby Bradshaw Date: Wed, 17 Mar 2021 14:23:46 +0000 Subject: [PATCH 6/9] style changes pt 2 --- src/Settings/Settings.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Settings/Settings.php b/src/Settings/Settings.php index 66dab6e..e151cf9 100644 --- a/src/Settings/Settings.php +++ b/src/Settings/Settings.php @@ -335,6 +335,7 @@ public function isSaved($key) protected function createRecord($key, $value) { $propertyBagModel = PropertyBagServiceProvider::determinePropertyBagModel(); + return $this->propertyBag()->save( new $propertyBagModel([ 'key' => $key, From 3d5968723523094bb15277bb6df742507082bbad Mon Sep 17 00:00:00 2001 From: Toby Bradshaw Date: Wed, 17 Mar 2021 14:24:29 +0000 Subject: [PATCH 7/9] style changes pt 3 --- src/Settings/Settings.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Settings/Settings.php b/src/Settings/Settings.php index e151cf9..1a6201c 100644 --- a/src/Settings/Settings.php +++ b/src/Settings/Settings.php @@ -335,7 +335,7 @@ public function isSaved($key) protected function createRecord($key, $value) { $propertyBagModel = PropertyBagServiceProvider::determinePropertyBagModel(); - + return $this->propertyBag()->save( new $propertyBagModel([ 'key' => $key, From 4980b97124fafeda4c5d305609e6c888cca90355 Mon Sep 17 00:00:00 2001 From: Toby Bradshaw Date: Wed, 17 Mar 2021 14:29:02 +0000 Subject: [PATCH 8/9] test fixes --- tests/TestCase.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/TestCase.php b/tests/TestCase.php index a5787ed..ac22f36 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -3,7 +3,7 @@ namespace LaravelPropertyBag\tests; use Hash; -use LaravelPropertyBag\ServiceProvider; +use LaravelPropertyBag\PropertyBagServiceProvider; use Illuminate\Contracts\Console\Kernel; use LaravelPropertyBag\tests\Classes\Post; use LaravelPropertyBag\tests\Classes\User; @@ -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(); From a0a8cc2e52002b383ff8b78ce291fe679369178b Mon Sep 17 00:00:00 2001 From: Toby Bradshaw Date: Wed, 17 Mar 2021 14:30:14 +0000 Subject: [PATCH 9/9] style changes pt 4 --- tests/TestCase.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/TestCase.php b/tests/TestCase.php index ac22f36..50d0623 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -3,13 +3,13 @@ namespace LaravelPropertyBag\tests; use Hash; -use LaravelPropertyBag\PropertyBagServiceProvider; 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;