Skip to content

Commit f7aba05

Browse files
committed
Introducing the trait FusionBaseModelTrait
1 parent 7ba43bf commit f7aba05

7 files changed

Lines changed: 64 additions & 53 deletions

File tree

CHANGELOG.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
# Changelog
22

3-
## 1.0.1 - WIP
3+
4+
## 1.1.0 - 2025-10-19
5+
- Introducing the trait `FusionBaseModelTrait`
6+
7+
## 1.0.1 - 2025-10-18
48
- Adding Static Code Analysis via PHPStan + Larastan (Level 6)
59
- Adding env variable FUSION_CONTENT_DIRECTORY for setting the path of content folder (default is app/resources/content)
610
- Adding tests for hydrated model
11+
- Simplify and improving the DX for creating Models
712

813
## 1.0.0 - 2025-10-17
914
- Upgrading the support for Laravel 12

README.md

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,11 +80,12 @@ You can fill the file in this way:
8080

8181
namespace App\Models;
8282

83+
use HiFolks\Fusion\Traits\FusionBaseModelTrait;
84+
use Illuminate\Database\Eloquent\Model;
8385

84-
use HiFolks\Fusion\Models\FusionBaseModel;
85-
86-
class Article extends FusionBaseModel
86+
class Article extends Model
8787
{
88+
use FusionBaseModelTrait;
8889

8990
public function frontmatterFields(): array
9091
{
@@ -285,7 +286,7 @@ php artisan fusion:check
285286

286287
### Using the Check Model command
287288

288-
To inspect the Model file and check if it extends the right class and uses the proper Traits to be a Model compatible with Markdown files, you can use the `fusion:check-model` command:
289+
To inspect the Model file and check if it extends the right class to be a Model compatible with Markdown files, you can use the `fusion:check-model` command:
289290

290291

291292
```shell
@@ -301,7 +302,22 @@ App\Models\Article extends correctly the class HiFolks\Fusion\Models\FusionBaseM
301302
App\Models\Article uses HiFolks\Fusion\Traits\FusionModelTrait
302303
```
303304

305+
## Upgrading from version 0.* to 1.*
306+
307+
With the version 1 we simplified and we reduced the requirements of a Model class.
308+
Now you can extend the classic Model sub class for Eloquent Models and just use the traits FusionBaseModelTrait for enabling the "hidrate" logic provided by Fusion.
304309

310+
```php
311+
<?php
312+
namespace App\Models;
313+
use HiFolks\Fusion\Traits\FusionBaseModelTrait;
314+
use Illuminate\Database\Eloquent\Model;
315+
316+
class Page extends Model
317+
{
318+
use FusionBaseModelTrait;
319+
320+
```
305321
## Testing
306322

307323
```bash

src/Console/Commands/CheckModel.php

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@
44

55
namespace HiFolks\Fusion\Console\Commands;
66

7-
use HiFolks\Fusion\Models\FusionBaseModel;
8-
use HiFolks\Fusion\Traits\SushiModelTrait;
7+
use HiFolks\Fusion\Traits\FusionBaseModelTrait;
98
use Illuminate\Console\Command;
9+
use Illuminate\Database\Eloquent\Model;
1010

11+
/** @package HiFolks\Fusion\Console\Commands */
1112
class CheckModel extends Command
1213
{
1314
/**
@@ -51,28 +52,28 @@ public function handle(): int
5152
return Command::INVALID;
5253
}
5354

54-
if (is_subclass_of($model, FusionBaseModel::class)) {
55+
if (is_subclass_of($model, Model::class)) {
5556
$this->components->twoColumnDetail(
5657
'<info>' . $model . '</info>',
57-
'<info>Extends correctly the class ' . FusionBaseModel::class . '</info>',
58+
'<info>Extends correctly the class ' . Model::class . '</info>',
5859
);
5960

6061
} else {
6162
$this->components->twoColumnDetail(
6263
'<info>' . $model . '</info>',
63-
'<error>Does not extend correctly the class ' . FusionBaseModel::class . '</error>',
64+
'<error>Does not extend correctly the class ' . Model::class . '</error>',
6465
);
6566
}
6667

67-
if (trait_exists(SushiModelTrait::class) && in_array(SushiModelTrait::class, class_uses($model))) {
68+
if (trait_exists(FusionBaseModelTrait::class) && in_array(FusionBaseModelTrait::class, class_uses($model))) {
6869
$this->components->twoColumnDetail(
6970
'<info>' . $model . '</info>',
70-
'<info>Uses correctly the trait ' . SushiModelTrait::class . '</info>',
71+
'<info>Uses correctly the trait ' . FusionBaseModelTrait::class . '</info>',
7172
);
7273
} else {
7374
$this->components->twoColumnDetail(
7475
'<info>' . $model . '</info>',
75-
'<error>Does not use correctly the trait ' . SushiModelTrait::class . '</error>',
76+
'<error>Does not use correctly the trait ' . FusionBaseModelTrait::class . '</error>',
7677
);
7778

7879
}

src/Models/Page.php

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,18 @@
44

55
namespace HiFolks\Fusion\Models;
66

7-
class Page extends FusionBaseModel
7+
use HiFolks\Fusion\Traits\FusionBaseModelTrait;
8+
use Illuminate\Database\Eloquent\Model;
9+
10+
class Page extends Model
811
{
12+
use FusionBaseModelTrait;
13+
14+
/**
15+
* Return the list of the field names managed by the Page Model class
16+
*
17+
* @return array<int, string>
18+
*/
919
public function frontmatterFields(): array
1020
{
1121
return [
Lines changed: 14 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,10 @@
22

33
declare(strict_types=1);
44

5-
namespace HiFolks\Fusion\Models;
5+
namespace HiFolks\Fusion\Traits;
66

7-
use HiFolks\Fusion\Traits\SushiModelTrait;
87
use Illuminate\Contracts\Container\BindingResolutionException;
98
use Illuminate\Contracts\Filesystem\FileNotFoundException;
10-
use Illuminate\Database\Eloquent\Model;
119
use Illuminate\Filesystem\Filesystem;
1210
use Illuminate\Support\Facades\File;
1311
use Illuminate\Support\Str;
@@ -21,15 +19,15 @@
2119
use Spatie\CommonMarkHighlighter\FencedCodeRenderer;
2220
use Spatie\CommonMarkHighlighter\IndentedCodeRenderer;
2321
use Spatie\YamlFrontMatter\YamlFrontMatter;
22+
use Sushi\Sushi;
2423
use Symfony\Component\Yaml\Exception\ParseException;
2524

26-
abstract class FusionBaseModel extends Model
25+
trait FusionBaseModelTrait
2726
{
28-
use SushiModelTrait;
27+
use Sushi;
2928

3029
public function getResourceFolder(): string
3130
{
32-
3331
$folderName = str_replace(
3432
['App\\Models\\', 'HiFolks\\Fusion\\Models\\'],
3533
'',
@@ -38,18 +36,23 @@ public function getResourceFolder(): string
3836
$folderName = Str::snake($folderName);
3937

4038
$resourceDirectory = resource_path('content' . DIRECTORY_SEPARATOR);
41-
if (! is_null(config('fusion.content_directory'))) {
39+
if (!is_null(config('fusion.content_directory'))) {
4240
$resourceDirectory = __DIR__ . '/../../' . config('fusion.content_directory');
4341
}
4442

4543
return $resourceDirectory . $folderName;
4644
}
4745

48-
public function getRouteKeyName()
46+
public function getRouteKeyName(): string
4947
{
5048
return 'slug';
5149
}
5250

51+
public function getTable()
52+
{
53+
return parent::getTable();
54+
}
55+
5356
/**
5457
* @return array<int, string>
5558
*/
@@ -98,26 +101,19 @@ public function getRows(): array
98101
*/
99102
public function getFrontmatterRows(array $columns = []): array
100103
{
101-
102104
$environment = (new Environment())
103105
->addExtension(new CommonMarkCoreExtension());
104106

105-
// $environment->addExtension(new CommonMarkCoreExtension());
106107
$environment->addRenderer(FencedCode::class, new FencedCodeRenderer());
107108
$environment->addRenderer(IndentedCode::class, new IndentedCodeRenderer());
108109

109110
$converter = new MarkdownConverter($environment);
110-
111-
$filesystem = new FileSystem();
111+
$filesystem = new Filesystem();
112112
$markdowns = [];
113113

114114
foreach (File::allFiles($this->getResourceFolder()) as $file) {
115-
// default slug as filename
116115
$slug = $file->getFilenameWithoutExtension();
117-
118-
$filename = $file->getRelativePathName();
119116
$fileContent = $filesystem->get($file->getRealPath());
120-
121117
$object = YamlFrontMatter::parse($fileContent);
122118

123119
if (array_key_exists('slug', $object->matter())) {
@@ -132,8 +128,8 @@ public function getFrontmatterRows(array $columns = []): array
132128
];
133129

134130
foreach ($columns as $column) {
135-
$row[$column] = is_array($object->matter($column)) ? json_encode($object->matter($column)) : $object->matter($column);
136-
131+
$value = $object->matter($column);
132+
$row[$column] = is_array($value) ? json_encode($value) : $value;
137133
}
138134

139135
$markdowns[] = $row;

src/Traits/SushiModelTrait.php

Lines changed: 0 additions & 17 deletions
This file was deleted.

stubs/app/Models/BasicFusionTemplateModel.stub

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33
namespace {{ namespace }};
44

5-
use HiFolks\Fusion\Traits\FusionModelTrait;
6-
use HiFolks\Fusion\Models\FusionBaseModel;
5+
use HiFolks\Fusion\Traits\FusionBaseModelTrait;
6+
use Illuminate\Database\Eloquent\Model;
77

8-
class {{ class }} extends FusionBaseModel
8+
class {{ class }} extends Model
99
{
10-
use FusionModelTrait;
10+
use FusionBaseModelTrait;
1111

1212
public function frontmatterFields(): array
1313
{

0 commit comments

Comments
 (0)