Skip to content

Commit 97f1f8f

Browse files
ADD resolveMorphedModel helper (#19)
1 parent f95fca8 commit 97f1f8f

File tree

5 files changed

+64
-2
lines changed

5 files changed

+64
-2
lines changed

README.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ hlp()->sanitizeUrl('mywebsite.com'); // using the helper function
6464
- [`isUrl`](#isurl)
6565
- [`modelKeyName`](#modelkeyname)
6666
- [`morphClassOf`](#morphclassof)
67+
- [`resolveMorphedModel`](#resolvemorphedmodel)
6768
- [`paginationLimit`](#paginationlimit)
6869
- [`pipe`](#pipe)
6970
- [`sanitizeArrayOfStrings`](#sanitizearrayofstrings)
@@ -170,6 +171,18 @@ hlp()->morphClassOf($model); // returns 'user'
170171
hlp()->morphClassOf(User::class); // returns 'user'
171172
```
172173

174+
### `resolveMorphedModel`
175+
176+
The `resolveMorphedModel` function returns the fully qualified model class name of a given morph class name.
177+
178+
You can either pass the singular or plural name of the morph class name.
179+
180+
```php
181+
hlp()->resolveMorphedModel('users'); // returns 'App\Models\User'
182+
183+
hlp()->resolveMorphedModel('user'); // returns 'App\Models\User'
184+
```
185+
173186
### `paginationLimit`
174187

175188
The `paginationLimit` function returns the amount of items per page.

src/Helper.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
* @method bool isUrl(mixed $url)
1414
* @method string modelKeyName(\Illuminate\Database\Eloquent\Model|string $model)
1515
* @method string morphClassOf(\Illuminate\Database\Eloquent\Model|string $model)
16+
* @method string resolveMorphedModel(string $alias)
1617
* @method int paginationLimit(int $default = 16, int $max = 48)
1718
* @method mixed pipe(mixed $passable, mixed $pipes)
1819
* @method array|null sanitizeArrayOfStrings(array|null $value, array|string|null $only = null)
@@ -39,6 +40,7 @@ public static function defaultMacros(): Collection
3940
'isUrl' => \Maize\Helpers\Macros\IsUrl::class,
4041
'modelKeyName' => \Maize\Helpers\Macros\ModelKeyName::class,
4142
'morphClassOf' => \Maize\Helpers\Macros\MorphClassOf::class,
43+
'resolveMorphedModel' => \Maize\Helpers\Macros\ResolveMorphedModel::class,
4244
'paginationLimit' => \Maize\Helpers\Macros\PaginationLimit::class,
4345
'pipe' => \Maize\Helpers\Macros\Pipe::class,
4446
'sanitizeArrayOfStrings' => \Maize\Helpers\Macros\SanitizeArrayOfStrings::class,

src/Macros/ResolveMorphedModel.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?php
2+
3+
namespace Maize\Helpers\Macros;
4+
5+
use Illuminate\Database\Eloquent\Relations\Relation;
6+
use Maize\Helpers\HelperMacro;
7+
8+
class ResolveMorphedModel implements HelperMacro
9+
{
10+
public function __invoke(): \Closure
11+
{
12+
return function (string $alias): string {
13+
return Relation::getMorphedModel(
14+
str()->singular($alias)
15+
) ?? $alias;
16+
};
17+
}
18+
}

tests/HelpersTest.php

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,17 @@
22

33
use Illuminate\Database\Eloquent\Factories\HasFactory;
44
use Illuminate\Database\Eloquent\Model;
5+
use Illuminate\Database\Eloquent\Relations\Relation;
56
use Illuminate\Foundation\Auth\User;
67
use Maize\Helpers\Tests\Support\Models\Article;
8+
use Maize\Helpers\Tests\Support\Models\Post;
79

810
use function PHPUnit\Framework\assertNotEquals;
911

12+
beforeEach(function () {
13+
Relation::morphMap(['article' => Article::class]);
14+
});
15+
1016
it('anonymizeFilename', function (?string $name, ?string $ext) {
1117
$filename = "{$name}{$ext}";
1218
$expect = expect(hlp()->anonymizeFilename($filename));
@@ -70,8 +76,16 @@
7076
it('morphClassOf', function (mixed $model, string $result) {
7177
expect(hlp()->morphClassOf($model))->toBe($result);
7278
})->with([
73-
['model' => Article::class, 'result' => Article::class],
74-
['model' => new Article(), 'result' => Article::class],
79+
['model' => Article::class, 'result' => 'article'],
80+
['model' => new Article(), 'result' => 'article'],
81+
]);
82+
83+
it('resolveMorphedModel', function (mixed $model, ?string $result) {
84+
expect(hlp()->resolveMorphedModel($model))->toBe($result);
85+
})->with([
86+
['model' => 'article', 'result' => Article::class],
87+
['model' => 'articles', 'result' => Article::class],
88+
['model' => Post::class, 'result' => Post::class],
7589
]);
7690

7791
it('paginationLimit', function (?int $limit, ?int $default, ?int $max, int $result) {

tests/Support/Models/Post.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?php
2+
3+
namespace Maize\Helpers\Tests\Support\Models;
4+
5+
use Illuminate\Database\Eloquent\Factories\HasFactory;
6+
use Illuminate\Database\Eloquent\Model;
7+
8+
class Post extends Model
9+
{
10+
use HasFactory;
11+
12+
protected $fillable = [
13+
//
14+
];
15+
}

0 commit comments

Comments
 (0)