Skip to content

Commit 1e32afb

Browse files
authored
Merge pull request #311 from Propaganistas/main
Support Illuminate\Support\Carbon as cast
2 parents f2cba84 + 394a552 commit 1e32afb

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

src/SettingsCasts/DateTimeInterfaceCast.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use DateTimeImmutable;
99
use DateTimeInterface;
1010
use Exception;
11+
use Illuminate\Support\Carbon as IlluminateCarbon;
1112

1213
class DateTimeInterfaceCast implements SettingsCast
1314
{
@@ -32,6 +33,10 @@ public function get($payload): ?DateTimeInterface
3233
return new CarbonImmutable($payload);
3334
}
3435

36+
if ($this->type === IlluminateCarbon::class) {
37+
return new IlluminateCarbon($payload);
38+
}
39+
3540
if ($this->type === DateTimeImmutable::class) {
3641
return new DateTimeImmutable($payload);
3742
}

tests/SettingsTest.php

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use DateTimeZone;
1010
use ErrorException;
1111
use Illuminate\Database\Events\SchemaLoaded;
12+
use Illuminate\Support\Carbon as IlluminateCarbon;
1213
use Illuminate\Support\Collection;
1314
use Illuminate\Support\Facades\Cache;
1415
use Illuminate\Support\Facades\DB;
@@ -48,6 +49,7 @@
4849
it('will handle loading settings correctly', function () {
4950
$dateTime = new DateTimeImmutable('16-05-1994 12:00:00');
5051
$carbon = new Carbon('16-05-1994 12:00:00');
52+
$illuminateCarbon = new IlluminateCarbon('20-05-1994 12:00:00');
5153

5254
$this->migrator->inGroup('dummy', function (SettingsBlueprint $blueprint) use ($carbon, $dateTime): void {
5355
$blueprint->add('string', 'Ruben');
@@ -64,6 +66,7 @@
6466

6567
$blueprint->add('date_time', $dateTime->format(DATE_ATOM));
6668
$blueprint->add('carbon', $carbon->toAtomString());
69+
$blueprint->add('illuminate_carbon', $illuminateCarbon->toAtomString());
6770
$blueprint->add('nullable_date_time_zone', null);
6871
});
6972

@@ -82,7 +85,8 @@
8285
DummyData::from(['name' => 'Adriaan']),
8386
])
8487
->date_time->toEqual($dateTime)
85-
->carbon->toEqual($carbon);
88+
->carbon->toEqual($carbon)
89+
->illuminate_carbon->toEqual($illuminateCarbon);
8690
});
8791

8892
it('will fail loading when settings are missing', function () {
@@ -98,6 +102,7 @@
98102
it('can save settings', function () {
99103
$dateTime = new DateTimeImmutable('16-05-1994 12:00:00');
100104
$carbon = new Carbon('16-05-1994 12:00:00');
105+
$illuminateCarbon = new IlluminateCarbon('20-05-1994 12:00:00');
101106
$dateTimeZone = new DateTimeZone('europe/brussels');
102107

103108
$this->migrator->inGroup('dummy', function (SettingsBlueprint $blueprint) use ($dateTimeZone, $carbon, $dateTime): void {
@@ -118,6 +123,7 @@
118123
]);
119124
$blueprint->add('date_time', $dateTime->format(DATE_ATOM));
120125
$blueprint->add('carbon', $carbon->toAtomString());
126+
$blueprint->add('illuminate_carbon', $illuminateCarbon->toAtomString());
121127
$blueprint->add('nullable_date_time_zone', $dateTimeZone->getName());
122128
});
123129

@@ -159,6 +165,7 @@
159165
expect($settings)
160166
->date_time->toEqual($dateTime)
161167
->carbon->toEqual($carbon)
168+
->illuminate_carbon->toEqual($illuminateCarbon)
162169
->nullable_date_time_zone->toBeNull();
163170
});
164171

@@ -174,6 +181,7 @@
174181
'dto' => DummyData::from(['name' => 'Rias']),
175182
'date_time' => new DateTimeImmutable(),
176183
'carbon' => Carbon::now(),
184+
'illuminate_carbon' => IlluminateCarbon::now(),
177185
]);
178186

179187
$settings->save();

0 commit comments

Comments
 (0)