Compare commits

...
10 Commits
Author SHA1 Message Date
Markus Podarandlaravel-ide-helper 73b1012b92 chore: prepare 2.10.0 release (#1207)
* chore: prepare 2.10.0 release

* composer fix-style

Co-authored-by: laravel-ide-helper <[email protected]>
2021-04-09 08:17:55 +02:00
Terence MarksandTerence Marks ca94ffd99a Fixing issue where incorrect autoloader unregistered (#1210)
Co-authored-by: Terence Marks <[email protected]>
2021-04-09 07:54:00 +02:00
Markus Podar c1ddd30532 Merge pull request #1198 from jenga201/master
Allowing Methods to be set or unset in ModelHooks
2021-04-03 20:55:37 +02:00
Markus Podar dcbe6c953f chore: update changelog 2021-04-03 00:17:10 +02:00
Markus Podar 867a6fd9b4 Merge branch 'master' into jenga201_master 2021-04-03 00:15:42 +02:00
Rob Porter 39a96c3b95 run composer fix-style 2021-04-02 15:30:15 -04:00
Rob Porter 057efb0ee7 Adding tests to Set / unset methods 2021-04-02 15:25:22 -04:00
Markus Podar 1010cdbd26 chore: prepare changelog for 2.9.3 release (#1203) 2021-04-02 19:55:52 +02:00
Rob Porter 9fe65e7ed3 Updating readme with a ModelHooks set/unset Method example 2021-04-01 16:04:59 -04:00
Rob Porter 16a4297992 Allowing Methods to be set in ModelHooks 2021-04-01 15:55:14 -04:00
8 changed files with 115 additions and 11 deletions
+15 -1
View File
@@ -2,9 +2,23 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
[Next release](https://github.com/barryvdh/laravel-ide-helper/compare/v2.9.3...master) [Next release](https://github.com/barryvdh/laravel-ide-helper/compare/v2.10.0...master)
-------------- --------------
2021-04-09, 2.10.0
------------------
### Added
- Allowing Methods to be set or unset in ModelHooks [\#1198 / jenga201](https://github.com/barryvdh/laravel-ide-helper/pull/1198)\
Note: the visibility of `\Barryvdh\LaravelIdeHelper\Console\ModelsCommand::setMethod` has been changed to **public**!
### Fixed
- Fixing issue where incorrect autoloader unregistered [\#1210 / tezhm](https://github.com/barryvdh/laravel-ide-helper/pull/1210)
2021-04-02, 2.9.3
-----------------
### Fixed
- Support both customized namespace factories as well as default resolvable ones [\#1201 / wimski](https://github.com/barryvdh/laravel-ide-helper/pull/1201)
2021-04-01, 2.9.2 2021-04-01, 2.9.2
----------------- -----------------
### Added ### Added
+2
View File
@@ -301,6 +301,8 @@ class MyCustomHook implements ModelHookInterface
} }
$command->setProperty('custom', 'string', true, false, 'My custom property'); $command->setProperty('custom', 'string', true, false, 'My custom property');
$command->unsetMethod('method');
$command->setMethod('method', $command->getMethodType($model, '\Some\Class'), ['$param']);
} }
} }
``` ```
+12 -8
View File
@@ -84,7 +84,7 @@ class MetaCommand extends Command
// Needs to run before exception handler is registered // Needs to run before exception handler is registered
$factories = $this->config->get('ide-helper.include_factory_builders') ? Factories::all() : []; $factories = $this->config->get('ide-helper.include_factory_builders') ? Factories::all() : [];
$this->registerClassAutoloadExceptions(); $ourAutoloader = $this->registerClassAutoloadExceptions();
$bindings = []; $bindings = [];
foreach ($this->getAbstracts() as $abstract) { foreach ($this->getAbstracts() as $abstract) {
@@ -106,7 +106,7 @@ class MetaCommand extends Command
} }
} }
$this->unregisterClassAutoloadExceptions(); $this->unregisterClassAutoloadExceptions($ourAutoloader);
$content = $this->view->make('meta', [ $content = $this->view->make('meta', [
'bindings' => $bindings, 'bindings' => $bindings,
@@ -143,12 +143,16 @@ class MetaCommand extends Command
/** /**
* Register an autoloader the throws exceptions when a class is not found. * Register an autoloader the throws exceptions when a class is not found.
*
* @return callable
*/ */
protected function registerClassAutoloadExceptions() protected function registerClassAutoloadExceptions(): callable
{ {
spl_autoload_register(function ($class) { $autoloader = function ($class) {
throw new \ReflectionException("Class '$class' not found."); throw new \ReflectionException("Class '$class' not found.");
}); };
spl_autoload_register($autoloader);
return $autoloader;
} }
/** /**
@@ -167,11 +171,11 @@ class MetaCommand extends Command
/** /**
* Remove our custom autoloader that we pushed onto the autoload stack * Remove our custom autoloader that we pushed onto the autoload stack
*
* @param callable $ourAutoloader
*/ */
private function unregisterClassAutoloadExceptions() private function unregisterClassAutoloadExceptions(callable $ourAutoloader): void
{ {
$autoloadFunctions = spl_autoload_functions();
$ourAutoloader = array_pop($autoloadFunctions);
spl_autoload_unregister($ourAutoloader); spl_autoload_unregister($ourAutoloader);
} }
} }
+13 -1
View File
@@ -749,7 +749,7 @@ class ModelsCommand extends Command
} }
} }
protected function setMethod($name, $type = '', $arguments = [], $comment = '') public function setMethod($name, $type = '', $arguments = [], $comment = '')
{ {
$methods = array_change_key_case($this->methods, CASE_LOWER); $methods = array_change_key_case($this->methods, CASE_LOWER);
@@ -761,6 +761,18 @@ class ModelsCommand extends Command
} }
} }
public function unsetMethod($name)
{
unset($this->methods[strtolower($name)]);
}
public function getMethodType(Model $model, string $classType)
{
$modelName = $this->getClassNameInDestinationFile($model, get_class($model));
$builder = $this->getClassNameInDestinationFile($model, $classType);
return $builder . '|' . $modelName;
}
/** /**
* @param string $class * @param string $class
* @return string * @return string
@@ -8,6 +8,7 @@ use Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider;
use Barryvdh\LaravelIdeHelper\Tests\TestCase; use Barryvdh\LaravelIdeHelper\Tests\TestCase;
use Illuminate\Filesystem\Filesystem; use Illuminate\Filesystem\Filesystem;
use Mockery\MockInterface; use Mockery\MockInterface;
use stdClass;
class MetaCommandTest extends TestCase class MetaCommandTest extends TestCase
{ {
@@ -37,6 +38,38 @@ class MetaCommandTest extends TestCase
self::assertStringContainsString('override(', $this->mockFilesystemOutput); self::assertStringContainsString('override(', $this->mockFilesystemOutput);
} }
public function testUnregisterAutoloader(): void
{
$current = spl_autoload_functions();
$appended = function () {
};
$this->app->bind('registers-autoloader', function () use ($appended) {
spl_autoload_register($appended);
return new stdClass();
});
$this->mockFilesystem();
/** @var Filesystem|MockInterface $mockFileSystem */
$mockFileSystem = $this->app->make(Filesystem::class);
$this->instance('files', $mockFileSystem);
$mockFileSystem
->shouldReceive('getRequire')
->andReturnUsing(function ($__path, $__data) {
return (static function () use ($__path, $__data) {
extract($__data, EXTR_SKIP);
return require $__path;
})();
});
$this->artisan('ide-helper:meta');
self::assertSame(array_merge($current, [$appended]), spl_autoload_functions());
}
/** /**
* Get package providers. * Get package providers.
* *
@@ -0,0 +1,18 @@
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\ModelHooks\Hooks;
use Barryvdh\LaravelIdeHelper\Console\ModelsCommand;
use Barryvdh\LaravelIdeHelper\Contracts\ModelHookInterface;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
class CustomMethod implements ModelHookInterface
{
public function run(ModelsCommand $command, Model $model): void
{
$command->setMethod('custom', $command->getMethodType($model, Builder::class), ['$custom']);
}
}
@@ -0,0 +1,17 @@
<?php
declare(strict_types=1);
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\ModelHooks\Hooks;
use Barryvdh\LaravelIdeHelper\Console\ModelsCommand;
use Barryvdh\LaravelIdeHelper\Contracts\ModelHookInterface;
use Illuminate\Database\Eloquent\Model;
class UnsetMethod implements ModelHookInterface
{
public function run(ModelsCommand $command, Model $model): void
{
$command->unsetMethod('query');
}
}
@@ -6,7 +6,9 @@ namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\ModelHooks;
use Barryvdh\LaravelIdeHelper\Console\ModelsCommand; use Barryvdh\LaravelIdeHelper\Console\ModelsCommand;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AbstractModelsCommand; use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AbstractModelsCommand;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\ModelHooks\Hooks\CustomMethod;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\ModelHooks\Hooks\CustomProperty; use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\ModelHooks\Hooks\CustomProperty;
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\ModelHooks\Hooks\UnsetMethod;
use Illuminate\Filesystem\Filesystem; use Illuminate\Filesystem\Filesystem;
use Mockery; use Mockery;
@@ -24,6 +26,8 @@ class Test extends AbstractModelsCommand
], ],
'model_hooks' => [ 'model_hooks' => [
CustomProperty::class, CustomProperty::class,
CustomMethod::class,
UnsetMethod::class,
], ],
]); ]);
} }
@@ -71,9 +75,9 @@ use Illuminate\Database\Eloquent\Model;
* *
* @property int $id * @property int $id
* @property-read string $custom * @property-read string $custom
* @method static \Illuminate\Database\Eloquent\Builder|Simple custom($custom)
* @method static \Illuminate\Database\Eloquent\Builder|Simple newModelQuery() * @method static \Illuminate\Database\Eloquent\Builder|Simple newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Simple newQuery() * @method static \Illuminate\Database\Eloquent\Builder|Simple newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|Simple query()
* @method static \Illuminate\Database\Eloquent\Builder|Simple whereId($value) * @method static \Illuminate\Database\Eloquent\Builder|Simple whereId($value)
* @mixin \Eloquent * @mixin \Eloquent
*/ */