mirror of
https://github.com/ZorgCC/lumen-generators.git
synced 2024-12-26 14:05:29 +03:00
preparing release 1.3.0
This commit is contained in:
parent
55fcf27362
commit
482cc3f8c4
32
README.md
32
README.md
@ -79,7 +79,7 @@ wn:route Generates RESTful routes.
|
||||
To generate a RESTful resource for your application (model, migration, controller and RESTful routes), you simply need to run one single command. For example:
|
||||
|
||||
```
|
||||
php artisan wn:resource task "name;string;required;fillable project_id;integer:unsigned;numeric;fillable,key due;date;;date" --belongs-to=project
|
||||
php artisan wn:resource task "name;string;required;fillable project_id;integer:unsigned;numeric;fillable,key due;date;;date" --add=timestamps --belongs-to=project
|
||||
```
|
||||
|
||||
will generate these files:
|
||||
@ -257,7 +257,7 @@ More then that, you can generate multiple resources with only one command ! [Cli
|
||||
The `wn:model` command is used to generate a model class based on Eloquent. It has the following syntax:
|
||||
|
||||
```
|
||||
wn:model name [--fillable=...] [--dates=...] [--has-many=...] [--has-one=...] [--belongs-to=...] [--belongs-to-many=...] [--rules=...] [--path=...] [--force=true]
|
||||
wn:model name [--fillable=...] [--dates=...] [--has-many=...] [--has-one=...] [--belongs-to=...] [--belongs-to-many=...] [--rules=...] [--timestamps=false] [--path=...] [--force=true]
|
||||
```
|
||||
|
||||
- **name**: the name of the model.
|
||||
@ -357,6 +357,8 @@ gives:
|
||||
];
|
||||
```
|
||||
|
||||
- **--timestamps**: Enables timestamps on the model. Giving `--timestamps=false` will add `public $timestamps = false;` to the generated model. The default value is `true`.
|
||||
|
||||
- **--force**: tells the generator to override the existing file. By default, if the model file already exists, it will not be overriden and the output will be something like:
|
||||
|
||||
```
|
||||
@ -368,7 +370,7 @@ TestingModel model already exists; use --force option to override it !
|
||||
The `wn:migration` command is used to generate a migration to create a table with schema. It has the following syntax:
|
||||
|
||||
```
|
||||
wn:migration table [--schema=...] [--keys=...] [--force=true] [--file=...]
|
||||
wn:migration table [--schema=...] [--add=...] [--keys=...] [--force=true] [--file=...]
|
||||
```
|
||||
|
||||
- **table**: the name of the table to create.
|
||||
@ -398,7 +400,7 @@ class CreateTasksMigration extends Migration
|
||||
$table->decimal('amount', 5, 2)->after('size')->default(8);
|
||||
$table->string('title')->nullable();
|
||||
// Constraints declaration
|
||||
$table->timestamps();
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
@ -409,6 +411,8 @@ class CreateTasksMigration extends Migration
|
||||
}
|
||||
```
|
||||
|
||||
- **--add**: Specifies additional columns like `timestamps`, `softDeletes`, `rememberToken` and `nullableTimestamps`.
|
||||
|
||||
- **--keys**: the foreign keys of the table following the syntax `field:column:table:on_delete:on_update ...`. The `column` is optional ("id" by default). The `table` is optional if the field follows the naming convention `singular_table_name_id`. `on_delete` and `on_update` are optional too.
|
||||
|
||||
```
|
||||
@ -433,15 +437,17 @@ $table->foreign('user_id')
|
||||
The `wn:pivot-table` command is used to generate a migration to create a pivot table between two models. It has the following syntax:
|
||||
|
||||
```
|
||||
wn:pivot-table model1 model2 [--force=true] [--file=...]
|
||||
wn:pivot-table model1 model2 [--add=...] [--force=true] [--file=...]
|
||||
```
|
||||
|
||||
- **model1** and **model2**: names of the two models (or the two tables if the models don't follow the naming conventions)
|
||||
|
||||
- **--add**: Specifies additional columns like `timestamps`, `softDeletes`, `rememberToken` and `nullableTimestamps`.
|
||||
|
||||
- **--file**: The migration file name. By default the name follows the patern `date_time_create_table_name.php`.
|
||||
|
||||
```
|
||||
php artisan wn:pivot-table Tag Project
|
||||
php artisan wn:pivot-table Tag Project --add=timestamps
|
||||
```
|
||||
gives:
|
||||
|
||||
@ -541,7 +547,7 @@ $app->delete('project-type/{id}', 'ProjectTypesController@remove');
|
||||
|
||||
### Resource Generator
|
||||
|
||||
The `wn:resource` command makes it very easy to generate a RESTful resource. It generates a model, migration, controller and routes. The syntax is : `wn:resource name fields [--has-many=...] [--has-one=...] [--belongs-to=...] [--migration-file=...] [--path=...] [--force=true]`
|
||||
The `wn:resource` command makes it very easy to generate a RESTful resource. It generates a model, migration, controller and routes. The syntax is : `wn:resource name fields [--add=...] [--has-many=...] [--has-one=...] [--belongs-to=...] [--migration-file=...] [--path=...] [--force=true]`
|
||||
|
||||
- **name**: the name of the resource used in the URLs and to determine the model, table and controller names.
|
||||
|
||||
@ -561,6 +567,8 @@ The `wn:resource` command makes it very easy to generate a RESTful resource. It
|
||||
|
||||
- `key`: this field is a foreign key.
|
||||
|
||||
- **--add**: Specifies additional columns like `timestamps`, `softDeletes`, `rememberToken` and `nullableTimestamps` of the migration and if the list contains no timestamps, the model with contain `public $timestamps = false;`.
|
||||
|
||||
- **--has-one**, **--has-many** and **--belongs-to** are the same as for the `wn:model` command.
|
||||
|
||||
- **--migration-file**: passed to the `wn:migration` as the `--file` option.
|
||||
@ -623,13 +631,17 @@ To test the generators, I included a fresh lumen installation under the folder `
|
||||
## Development Notes
|
||||
|
||||
- **Comming versions**
|
||||
|
||||
|
||||
- **Seeder and Test generators**
|
||||
|
||||
- Requested Feature: [Disabling timestamps](https://github.com/webNeat/lumen-generators/issues/15)
|
||||
|
||||
- Requested Feature: [Custom Templates](https://github.com/webNeat/lumen-generators/issues/13)
|
||||
|
||||
- **Version 1.3.0**
|
||||
|
||||
- Requested Feature: [Disabling timestamps](https://github.com/webNeat/lumen-generators/issues/15)
|
||||
|
||||
- Requested Feature: [Lumen 5.3 routes support](https://github.com/webNeat/lumen-generators/issues/21)
|
||||
|
||||
- **Version 1.2.0**
|
||||
|
||||
- Tests fixed.
|
||||
|
@ -1,10 +1,10 @@
|
||||
<?php
|
||||
<?php
|
||||
$I = new AcceptanceTester($scenario);
|
||||
|
||||
$I->wantTo('generate the REST actions trait');
|
||||
$I->runShellCommand('php artisan wn:controller:rest-actions');
|
||||
$I->runShellCommand('php artisan wn:controller:rest-actions --force=true');
|
||||
$I->seeInShellOutput('REST actions trait generated');
|
||||
$I->seeFileFound('./app/Http/Controllers/RESTActions.php');
|
||||
$I->openFile('./app/Http/Controllers/RESTActions.php');
|
||||
$I->seeInThisFile('trait RESTActions {');
|
||||
$I->deleteFile('./app/Http/Controllers/RESTActions.php');
|
||||
$I->deleteFile('./app/Http/Controllers/RESTActions.php');
|
||||
|
@ -2,7 +2,7 @@
|
||||
$I = new AcceptanceTester($scenario);
|
||||
|
||||
$I->wantTo('generate a migration without schema');
|
||||
$I->runShellCommand('php artisan wn:migration tasks --file=create_tasks');
|
||||
$I->runShellCommand('php artisan wn:migration tasks --add=timestamps --file=create_tasks');
|
||||
$I->seeInShellOutput('tasks migration generated');
|
||||
$I->seeFileFound('./database/migrations/create_tasks.php');
|
||||
$I->openFile('./database/migrations/create_tasks.php');
|
||||
@ -32,8 +32,39 @@ class CreateTasksTable extends Migration
|
||||
');
|
||||
$I->deleteFile('./database/migrations/create_tasks.php');
|
||||
|
||||
$I->wantTo('generate a migration without schema or timestamps');
|
||||
$I->runShellCommand('php artisan wn:migration tasks --file=create_tasks');
|
||||
$I->seeInShellOutput('tasks migration generated');
|
||||
$I->seeFileFound('./database/migrations/create_tasks.php');
|
||||
$I->openFile('./database/migrations/create_tasks.php');
|
||||
$I->seeFileContentsEqual('<?php
|
||||
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
|
||||
class CreateTasksTable extends Migration
|
||||
{
|
||||
|
||||
public function up()
|
||||
{
|
||||
Schema::create(\'tasks\', function(Blueprint $table) {
|
||||
$table->increments(\'id\');
|
||||
// Schema declaration
|
||||
// Constraints declaration
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
public function down()
|
||||
{
|
||||
Schema::drop(\'tasks\');
|
||||
}
|
||||
}
|
||||
');
|
||||
$I->deleteFile('./database/migrations/create_tasks.php');
|
||||
|
||||
$I->wantTo('generate a migration with schema');
|
||||
$I->runShellCommand('php artisan wn:migration tasks --file=create_tasks --schema="amount:decimal.5,2:after.\'size\':default.8 title:string:nullable"');
|
||||
$I->runShellCommand('php artisan wn:migration tasks --add=timestamps --file=create_tasks --schema="amount:decimal.5,2:after.\'size\':default.8 title:string:nullable"');
|
||||
$I->seeInShellOutput('tasks migration generated');
|
||||
$I->seeFileFound('./database/migrations/create_tasks.php');
|
||||
$I->openFile('./database/migrations/create_tasks.php');
|
||||
|
@ -27,6 +27,34 @@ class TestingModel extends Model {
|
||||
');
|
||||
$I->deleteFile('./tests/tmp/TestingModel.php');
|
||||
|
||||
$I->wantTo('generate a model without fillable fields, dates or timestamps');
|
||||
$I->runShellCommand('php artisan wn:model TestingModel --path=tests/tmp --force=true --timestamps=false');
|
||||
$I->seeInShellOutput('TestingModel model generated');
|
||||
$I->seeFileFound('./tests/tmp/TestingModel.php');
|
||||
$I->openFile('./tests/tmp/TestingModel.php');
|
||||
|
||||
$I->seeFileContentsEqual('<?php namespace Tests\Tmp;
|
||||
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class TestingModel extends Model {
|
||||
|
||||
protected $fillable = [];
|
||||
|
||||
protected $dates = [];
|
||||
|
||||
public static $rules = [
|
||||
// Validation rules
|
||||
];
|
||||
|
||||
public $timestamps = false;
|
||||
|
||||
// Relationships
|
||||
|
||||
}
|
||||
');
|
||||
$I->deleteFile('./tests/tmp/TestingModel.php');
|
||||
|
||||
$I->wantTo('generate a model with fillable fields');
|
||||
$I->runShellCommand('php artisan wn:model TestingModel --fillable=name,title --path=tests/tmp');
|
||||
$I->seeFileFound('./tests/tmp/TestingModel.php');
|
||||
@ -77,4 +105,4 @@ $I->seeInThisFile(
|
||||
" ];"
|
||||
);
|
||||
|
||||
$I->deleteFile('./tests/tmp/TestingModel.php');
|
||||
$I->deleteFile('./tests/tmp/TestingModel.php');
|
||||
|
@ -2,7 +2,7 @@
|
||||
$I = new AcceptanceTester($scenario);
|
||||
|
||||
$I->wantTo('generate a pivot table');
|
||||
$I->runShellCommand('php artisan wn:pivot-table Tag Project --file=pivot_table');
|
||||
$I->runShellCommand('php artisan wn:pivot-table Tag Project --add=timestamps --file=pivot_table');
|
||||
$I->seeInShellOutput('project_tag migration generated');
|
||||
$I->seeFileFound('./database/migrations/pivot_table.php');
|
||||
$I->openFile('./database/migrations/pivot_table.php');
|
||||
@ -36,4 +36,4 @@ class CreateProjectTagTable extends Migration
|
||||
}
|
||||
}
|
||||
');
|
||||
$I->deleteFile('./database/migrations/pivot_table.php');
|
||||
$I->deleteFile('./database/migrations/pivot_table.php');
|
||||
|
@ -2,7 +2,7 @@
|
||||
$I = new AcceptanceTester($scenario);
|
||||
|
||||
$I->wantTo('generate a RESTful resource');
|
||||
$I->runShellCommand('php artisan wn:resource task_category "name;string:unique;requied;fillable;word descr;text:nullable;;fillable;paragraph due;timestamp;;fillable,date;date" --has-many="tags,tasks" --belongs-to="project,creator:User" --migration-file=create_task_categories');
|
||||
$I->runShellCommand('php artisan wn:resource task_category "name;string:unique;requied;fillable;word descr;text:nullable;;fillable;paragraph due;timestamp;;fillable,date;date" --has-many="tags,tasks" --belongs-to="project,creator:User" --add=timestamps --migration-file=create_task_categories');
|
||||
|
||||
// Checking the model
|
||||
$I->seeInShellOutput('TaskCategory model generated');
|
||||
@ -157,4 +157,4 @@ $I->writeToFile('./database/factories/ModelFactory.php', "<?php
|
||||
// factory(App\TaskCategory::class, 10)->create();
|
||||
// }
|
||||
// }');
|
||||
// $I->deleteFile('./database/seeds/TaskCategoriesTableSeeder.php');
|
||||
// $I->deleteFile('./database/seeds/TaskCategoriesTableSeeder.php');
|
||||
|
@ -6,7 +6,7 @@ class MigrationCommand extends BaseCommand {
|
||||
protected $signature = 'wn:migration
|
||||
{table : The table name.}
|
||||
{--schema= : the schema.}
|
||||
{--add= : specifies additional columns like softDeletes, rememberToken and nullableTimestamps.}
|
||||
{--add= : specifies additional columns like timestamps, softDeletes, rememberToken and nullableTimestamps.}
|
||||
{--keys= : foreign keys.}
|
||||
{--file= : name of the migration file (to use only for testing purpose).}
|
||||
{--parsed : tells the command that arguments have been already parsed. To use when calling the command from an other command and passing the parsed arguments and options}
|
||||
@ -64,7 +64,7 @@ class MigrationCommand extends BaseCommand {
|
||||
{
|
||||
$additionals = $this->option('add');
|
||||
if (empty($additionals)) {
|
||||
$additionals = 'timestamps';
|
||||
return '';
|
||||
}
|
||||
|
||||
$additionals = explode(',', $additionals);
|
||||
@ -146,4 +146,4 @@ class MigrationCommand extends BaseCommand {
|
||||
return $constraint . ';';
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -12,6 +12,7 @@ class ModelCommand extends BaseCommand {
|
||||
{--belongs-to= : belongsTo relationships.}
|
||||
{--belongs-to-many= : belongsToMany relationships.}
|
||||
{--rules= : fields validation rules.}
|
||||
{--timestamps=true : enables timestamps on the model.}
|
||||
{--path=app : where to store the model php file.}
|
||||
{--parsed : tells the command that arguments have been already parsed. To use when calling the command from an other command and passing the parsed arguments and options}
|
||||
{--force= : override the existing files}
|
||||
@ -31,7 +32,8 @@ class ModelCommand extends BaseCommand {
|
||||
'fillable' => $this->getAsArrayFields('fillable'),
|
||||
'dates' => $this->getAsArrayFields('dates'),
|
||||
'relations' => $this->getRelations(),
|
||||
'rules' => $this->getRules()
|
||||
'rules' => $this->getRules(),
|
||||
'additional' => $this->getAdditional()
|
||||
])
|
||||
->get();
|
||||
|
||||
@ -114,4 +116,11 @@ class ModelCommand extends BaseCommand {
|
||||
return implode(PHP_EOL, $rules);
|
||||
}
|
||||
|
||||
}
|
||||
protected function getAdditional()
|
||||
{
|
||||
return $this->option('timestamps') == 'false'
|
||||
? " public \$timestamps = false;" . PHP_EOL . PHP_EOL
|
||||
: '';
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -6,6 +6,7 @@ class PivotTableCommand extends BaseCommand {
|
||||
protected $signature = 'wn:pivot-table
|
||||
{model1 : Name of the first model or table}
|
||||
{model2 : Name of the second model or table}
|
||||
{--add= : specifies additional columns like timestamps, softDeletes, rememberToken and nullableTimestamps.}
|
||||
{--file= : name of the migration file (to use only for testing purpose).}
|
||||
{--force= : override the existing files}
|
||||
';
|
||||
@ -24,7 +25,8 @@ class PivotTableCommand extends BaseCommand {
|
||||
'--keys' => $this->keys(),
|
||||
'--file' => $this->option('file'),
|
||||
'--parsed' => false,
|
||||
'--force' => $this->option('force')
|
||||
'--force' => $this->option('force'),
|
||||
'--add' => $this->option('add')
|
||||
]);
|
||||
}
|
||||
|
||||
@ -51,4 +53,4 @@ class PivotTableCommand extends BaseCommand {
|
||||
}, $this->tables));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -11,6 +11,7 @@ class ResourceCommand extends BaseCommand {
|
||||
{--belongs-to= : belongsTo relationships.}
|
||||
{--belongs-to-many= : belongsToMany relationships.}
|
||||
{--migration-file= : the migration file name.}
|
||||
{--add= : specifies additional columns like timestamps, softDeletes, rememberToken and nullableTimestamps.}
|
||||
{--path=app : where to store the model file.}
|
||||
{--parsed : tells the command that arguments have been already parsed. To use when calling the command from an other command and passing the parsed arguments and options}
|
||||
{--force= : override the existing files}
|
||||
@ -40,6 +41,7 @@ class ResourceCommand extends BaseCommand {
|
||||
'--rules' => $this->rules(),
|
||||
'--path' => $this->option('path'),
|
||||
'--force' => $this->option('force'),
|
||||
'--timestamps' => $this->hasTimestamps() ? 'true' : 'false',
|
||||
'--parsed' => true
|
||||
]);
|
||||
|
||||
@ -50,6 +52,7 @@ class ResourceCommand extends BaseCommand {
|
||||
'--keys' => $this->migrationKeys(),
|
||||
'--file' => $this->option('migration-file'),
|
||||
'--force' => $this->option('force'),
|
||||
'--add' => $this->option('add'),
|
||||
'--parsed' => true
|
||||
]);
|
||||
|
||||
@ -180,4 +183,12 @@ class ResourceCommand extends BaseCommand {
|
||||
}));
|
||||
}
|
||||
|
||||
protected function hasTimestamps()
|
||||
{
|
||||
$additionals = explode(',', $this->option('add'));
|
||||
return in_array('nullableTimestamps', $additionals)
|
||||
|| in_array('timestamps', $additionals)
|
||||
|| in_array('timestampsTz', $additionals);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -12,6 +12,6 @@ class {{name}} extends Model {
|
||||
{{rules}}
|
||||
];
|
||||
|
||||
{{relations}}
|
||||
{{additional}}{{relations}}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user