-
Notifications
You must be signed in to change notification settings - Fork 126
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #120 from flipboxstudio/add_make_observer_command
Add make:observer command
- Loading branch information
Showing
7 changed files
with
244 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,147 @@ | ||
<?php | ||
|
||
namespace Flipbox\LumenGenerator\Console; | ||
|
||
use InvalidArgumentException; | ||
use Symfony\Component\Console\Input\InputOption; | ||
|
||
class ObserverMakeCommand extends GeneratorCommand | ||
{ | ||
/** | ||
* The console command name. | ||
* | ||
* @var string | ||
*/ | ||
protected $name = 'make:observer'; | ||
|
||
/** | ||
* The name of the console command. | ||
* | ||
* This name is used to identify the command during lazy loading. | ||
* | ||
* @var string|null | ||
*/ | ||
protected static $defaultName = 'make:observer'; | ||
|
||
/** | ||
* The console command description. | ||
* | ||
* @var string | ||
*/ | ||
protected $description = 'Create a new observer class'; | ||
|
||
/** | ||
* The type of class being generated. | ||
* | ||
* @var string | ||
*/ | ||
protected $type = 'Observer'; | ||
|
||
/** | ||
* Build the class with the given name. | ||
* | ||
* @param string $name | ||
* @return string | ||
*/ | ||
protected function buildClass($name) | ||
{ | ||
$stub = parent::buildClass($name); | ||
|
||
$model = $this->option('model'); | ||
|
||
return $model ? $this->replaceModel($stub, $model) : $stub; | ||
} | ||
|
||
/** | ||
* Replace the model for the given stub. | ||
* | ||
* @param string $stub | ||
* @param string $model | ||
* @return string | ||
*/ | ||
protected function replaceModel($stub, $model) | ||
{ | ||
$modelClass = $this->parseModel($model); | ||
|
||
$replace = [ | ||
'DummyFullModelClass' => $modelClass, | ||
'{{ namespacedModel }}' => $modelClass, | ||
'{{namespacedModel}}' => $modelClass, | ||
'DummyModelClass' => class_basename($modelClass), | ||
'{{ model }}' => class_basename($modelClass), | ||
'{{model}}' => class_basename($modelClass), | ||
'DummyModelVariable' => lcfirst(class_basename($modelClass)), | ||
'{{ modelVariable }}' => lcfirst(class_basename($modelClass)), | ||
'{{modelVariable}}' => lcfirst(class_basename($modelClass)), | ||
]; | ||
|
||
return str_replace( | ||
array_keys($replace), array_values($replace), $stub | ||
); | ||
} | ||
|
||
/** | ||
* Get the fully-qualified model class name. | ||
* | ||
* @param string $model | ||
* @return string | ||
* | ||
* @throws \InvalidArgumentException | ||
*/ | ||
protected function parseModel($model) | ||
{ | ||
if (preg_match('([^A-Za-z0-9_/\\\\])', $model)) { | ||
throw new InvalidArgumentException('Model name contains invalid characters.'); | ||
} | ||
|
||
return $this->qualifyModel($model); | ||
} | ||
|
||
/** | ||
* Get the stub file for the generator. | ||
* | ||
* @return string | ||
*/ | ||
protected function getStub() | ||
{ | ||
return $this->option('model') | ||
? $this->resolveStubPath('/stubs/observer.stub') | ||
: $this->resolveStubPath('/stubs/observer.plain.stub'); | ||
} | ||
|
||
/** | ||
* Resolve the fully-qualified path to the stub. | ||
* | ||
* @param string $stub | ||
* @return string | ||
*/ | ||
protected function resolveStubPath($stub) | ||
{ | ||
return file_exists($customPath = $this->laravel->basePath(trim($stub, '/'))) | ||
? $customPath | ||
: __DIR__.$stub; | ||
} | ||
|
||
/** | ||
* Get the default namespace for the class. | ||
* | ||
* @param string $rootNamespace | ||
* @return string | ||
*/ | ||
protected function getDefaultNamespace($rootNamespace) | ||
{ | ||
return $rootNamespace.'\Observers'; | ||
} | ||
|
||
/** | ||
* Get the console command arguments. | ||
* | ||
* @return array | ||
*/ | ||
protected function getOptions() | ||
{ | ||
return [ | ||
['model', 'm', InputOption::VALUE_OPTIONAL, 'The model that the observer applies to.'], | ||
]; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
<?php | ||
|
||
namespace DummyNamespace; | ||
|
||
class DummyClass | ||
{ | ||
// | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
<?php | ||
|
||
namespace DummyNamespace; | ||
|
||
use {{ namespacedModel }}; | ||
|
||
class DummyClass | ||
{ | ||
/** | ||
* Handle the {{ model }} "created" event. | ||
* | ||
* @param \{{ namespacedModel }} ${{ modelVariable }} | ||
* @return void | ||
*/ | ||
public function created({{ model }} ${{ modelVariable }}) | ||
{ | ||
// | ||
} | ||
|
||
/** | ||
* Handle the {{ model }} "updated" event. | ||
* | ||
* @param \{{ namespacedModel }} ${{ modelVariable }} | ||
* @return void | ||
*/ | ||
public function updated({{ model }} ${{ modelVariable }}) | ||
{ | ||
// | ||
} | ||
|
||
/** | ||
* Handle the {{ model }} "deleted" event. | ||
* | ||
* @param \{{ namespacedModel }} ${{ modelVariable }} | ||
* @return void | ||
*/ | ||
public function deleted({{ model }} ${{ modelVariable }}) | ||
{ | ||
// | ||
} | ||
|
||
/** | ||
* Handle the {{ model }} "restored" event. | ||
* | ||
* @param \{{ namespacedModel }} ${{ modelVariable }} | ||
* @return void | ||
*/ | ||
public function restored({{ model }} ${{ modelVariable }}) | ||
{ | ||
// | ||
} | ||
|
||
/** | ||
* Handle the {{ model }} "force deleted" event. | ||
* | ||
* @param \{{ namespacedModel }} ${{ modelVariable }} | ||
* @return void | ||
*/ | ||
public function forceDeleted({{ model }} ${{ modelVariable }}) | ||
{ | ||
// | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters