-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: add support for AsCollection and AsArrayObject casts (#1393)
* feat: add support for AsCollection and AsArrayObject casts * update changelog * improve tests * remove change * composer fix-style * snapshot --------- Co-authored-by: Barry vd. Heuvel <barry@fruitcake.nl> Co-authored-by: laravel-ide-helper <laravel-ide-helper@users.noreply.github.com>
- Loading branch information
1 parent
cee441c
commit 341c0ab
Showing
6 changed files
with
162 additions
and
0 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
29 changes: 29 additions & 0 deletions
29
tests/Console/ModelsCommand/AdvancedCasts/Models/AdvancedCast.php
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,29 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AdvancedCasts\Models; | ||
|
||
use Illuminate\Database\Eloquent\Casts\AsArrayObject; | ||
use Illuminate\Database\Eloquent\Casts\AsCollection; | ||
use Illuminate\Database\Eloquent\Model; | ||
|
||
class AdvancedCast extends Model | ||
{ | ||
protected $casts = [ | ||
'cast_to_date_serialization' => 'date:Y-m-d', | ||
'cast_to_datetime_serialization' => 'datetime:Y-m-d H:i:s', | ||
'cast_to_custom_datetime' => 'custom_datetime:Y-m-d H:i:s', | ||
'cast_to_immutable_date' => 'immutable_date', | ||
'cast_to_immutable_custom_datetime' => 'immutable_custom_datetime:Y-m-d H:i:s', | ||
'cast_to_immutable_datetime' => 'immutable_datetime', | ||
'cast_to_timestamp' => 'timestamp', | ||
'cast_to_encrypted' => 'encrypted', | ||
'cast_to_encrypted_array' => 'encrypted:array', | ||
'cast_to_encrypted_collection' => 'encrypted:collection', | ||
'cast_to_encrypted_json' => 'encrypted:json', | ||
'cast_to_encrypted_object' => 'encrypted:object', | ||
'cast_to_as_collection' => AsCollection::class, | ||
'cast_to_as_array_object' => AsArrayObject::class, | ||
]; | ||
} |
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,31 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AdvancedCasts; | ||
|
||
use Barryvdh\LaravelIdeHelper\Console\ModelsCommand; | ||
use Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AbstractModelsCommand; | ||
use Illuminate\Foundation\Application; | ||
|
||
class Test extends AbstractModelsCommand | ||
{ | ||
public function test(): void | ||
{ | ||
if (!version_compare(Application::VERSION, '8.28', '>=')) { | ||
$this->markTestSkipped( | ||
'This test only works in Laravel >= 8.28' | ||
); | ||
} | ||
|
||
$command = $this->app->make(ModelsCommand::class); | ||
|
||
$tester = $this->runCommand($command, [ | ||
'--write' => true, | ||
]); | ||
|
||
$this->assertSame(0, $tester->getStatusCode()); | ||
$this->assertStringContainsString('Written new phpDocBlock to', $tester->getDisplay()); | ||
$this->assertMatchesMockedSnapshot(); | ||
} | ||
} |
65 changes: 65 additions & 0 deletions
65
tests/Console/ModelsCommand/AdvancedCasts/__snapshots__/Test__test__1.php
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,65 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
namespace Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AdvancedCasts\Models; | ||
|
||
use Illuminate\Database\Eloquent\Casts\AsArrayObject; | ||
use Illuminate\Database\Eloquent\Casts\AsCollection; | ||
use Illuminate\Database\Eloquent\Model; | ||
|
||
/** | ||
* Barryvdh\LaravelIdeHelper\Tests\Console\ModelsCommand\AdvancedCasts\Models\AdvancedCast | ||
* | ||
* @property \Illuminate\Support\Carbon $cast_to_date_serialization | ||
* @property \Illuminate\Support\Carbon $cast_to_datetime_serialization | ||
* @property \Illuminate\Support\Carbon $cast_to_custom_datetime | ||
* @property \Carbon\CarbonImmutable $cast_to_immutable_date | ||
* @property \Carbon\CarbonImmutable $cast_to_immutable_custom_datetime | ||
* @property \Carbon\CarbonImmutable $cast_to_immutable_datetime | ||
* @property integer $cast_to_timestamp | ||
* @property mixed $cast_to_encrypted | ||
* @property array $cast_to_encrypted_array | ||
* @property \Illuminate\Support\Collection $cast_to_encrypted_collection | ||
* @property array $cast_to_encrypted_json | ||
* @property object $cast_to_encrypted_object | ||
* @property \Illuminate\Support\Collection $cast_to_as_collection | ||
* @property \ArrayObject $cast_to_as_array_object | ||
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast newModelQuery() | ||
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast newQuery() | ||
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast query() | ||
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToAsArrayObject($value) | ||
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToAsCollection($value) | ||
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToCustomDatetime($value) | ||
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToDateSerialization($value) | ||
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToDatetimeSerialization($value) | ||
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToEncrypted($value) | ||
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToEncryptedArray($value) | ||
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToEncryptedCollection($value) | ||
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToEncryptedJson($value) | ||
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToEncryptedObject($value) | ||
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToImmutableCustomDatetime($value) | ||
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToImmutableDate($value) | ||
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToImmutableDatetime($value) | ||
* @method static \Illuminate\Database\Eloquent\Builder|AdvancedCast whereCastToTimestamp($value) | ||
* @mixin \Eloquent | ||
*/ | ||
class AdvancedCast extends Model | ||
{ | ||
protected $casts = [ | ||
'cast_to_date_serialization' => 'date:Y-m-d', | ||
'cast_to_datetime_serialization' => 'datetime:Y-m-d H:i:s', | ||
'cast_to_custom_datetime' => 'custom_datetime:Y-m-d H:i:s', | ||
'cast_to_immutable_date' => 'immutable_date', | ||
'cast_to_immutable_custom_datetime' => 'immutable_custom_datetime:Y-m-d H:i:s', | ||
'cast_to_immutable_datetime' => 'immutable_datetime', | ||
'cast_to_timestamp' => 'timestamp', | ||
'cast_to_encrypted' => 'encrypted', | ||
'cast_to_encrypted_array' => 'encrypted:array', | ||
'cast_to_encrypted_collection' => 'encrypted:collection', | ||
'cast_to_encrypted_json' => 'encrypted:json', | ||
'cast_to_encrypted_object' => 'encrypted:object', | ||
'cast_to_as_collection' => AsCollection::class, | ||
'cast_to_as_array_object' => AsArrayObject::class, | ||
]; | ||
} |
30 changes: 30 additions & 0 deletions
30
tests/Console/ModelsCommand/migrations/____advanced_casts_table.php
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,30 @@ | ||
<?php | ||
|
||
declare(strict_types=1); | ||
|
||
use Illuminate\Database\Migrations\Migration; | ||
use Illuminate\Database\Schema\Blueprint; | ||
use Illuminate\Support\Facades\Schema; | ||
|
||
class AdvancedCastsTable extends Migration | ||
{ | ||
public function up(): void | ||
{ | ||
Schema::create('advanced_casts', static function (Blueprint $table) { | ||
$table->string('cast_to_date_serialization'); | ||
$table->string('cast_to_datetime_serialization'); | ||
$table->string('cast_to_custom_datetime'); | ||
$table->string('cast_to_immutable_date'); | ||
$table->string('cast_to_immutable_custom_datetime'); | ||
$table->string('cast_to_immutable_datetime'); | ||
$table->string('cast_to_timestamp'); | ||
$table->string('cast_to_encrypted'); | ||
$table->string('cast_to_encrypted_array'); | ||
$table->string('cast_to_encrypted_collection'); | ||
$table->string('cast_to_encrypted_json'); | ||
$table->string('cast_to_encrypted_object'); | ||
$table->string('cast_to_as_collection'); | ||
$table->string('cast_to_as_array_object'); | ||
}); | ||
} | ||
} |