Skip to content

Commit 964f145

Browse files
committed
Add doctrine/collections integration
1 parent f9badf3 commit 964f145

File tree

7 files changed

+95
-6
lines changed

7 files changed

+95
-6
lines changed

CHANGELOG-1.x.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
55
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

77
## [Unreleased]
8+
### Added
9+
- `doctrine/collections` `ArrayCollection` implementation
10+
811
### Updated
912
- Change `php` requirement from `^7.2|^8` to `>=7.2`
1013

README.md

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
Big thanks [happy-types/enumerable-type](https://packagist.org/packages/happy-types/enumerable-type) for the original idea. Take a look if it suits your needs better.
1313

1414
This package adds `meta` field, provides a few more methods like `options`, `keys`, `json`, etc.
15-
and there are simple php array, `illuminate/collection` and `arrayy` collection implementations to choose from.
15+
and there are simple php array, `illuminate/collection`, `arrayy` and `doctrine` collection implementations to choose from.
1616

1717
## Benefits
1818

@@ -30,6 +30,7 @@ Create enums by extending one of:
3030
* `EKvedaras\PHPEnum\PHPArray\Enum`
3131
* `EKvedaras\PHPEnum\Illuminate\Collection\Enum`
3232
* `EKvedaras\PHPEnum\Arrayy\Enum`
33+
* `EKvedaras\PHPEnum\Doctrine\Enum`
3334

3435
```php
3536
use EKvedaras\PHPEnum\PHPArray\Enum;
@@ -401,10 +402,6 @@ changed it can be done in one place only (if storage APIs match).
401402

402403
* [ekvedaras/laravel-enum](https://packagist.org/packages/ekvedaras/laravel-enum)
403404

404-
## Coming soon
405-
406-
* More implementations of collections in other frameworks
407-
408405
## Changelog
409406

410407
See changes in changelog files:

composer.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,16 @@
3232
"ext-json": "*"
3333
},
3434
"require-dev": {
35+
"doctrine/collections": "^1.6",
3536
"illuminate/support": "^6|^7|^8",
3637
"phpunit/phpunit": "^8.5.8",
3738
"voku/arrayy": "^7.0"
3839
},
3940
"suggest": {
4041
"illuminate/collections": "Required for \\EKvedaras\\PHPEnum\\Illuminate\\Collection\\Enum implementation. Provides standalone Laravel collections",
4142
"illuminate/support": "Required for \\EKvedaras\\PHPEnum\\Illuminate\\Collection\\Enum implementation. Use if illuminate/collections can't be installed due to version contstraints",
42-
"voku/arrayy": "Required for \\EKvedaras\\PHPEnum\\Arrayy\\Enum implementation"
43+
"voku/arrayy": "Required for \\EKvedaras\\PHPEnum\\Arrayy\\Enum implementation",
44+
"doctrine/collections": "Required for \\EKvedaras\\PHPEnum\\Doctrine\\Enum implementation"
4345
},
4446
"scripts": {
4547
"test": "phpunit",

src/Doctrine/Enum.php

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
<?php
2+
3+
namespace EKvedaras\PHPEnum\Doctrine;
4+
5+
use Doctrine\Common\Collections\ArrayCollection;
6+
use EKvedaras\PHPEnum\BaseEnum;
7+
use EKvedaras\PHPEnum\Storage\GenericArrayAccessibleObjectStorage;
8+
9+
/**
10+
* Class Enum
11+
* @package EKvedaras\PHPEnum\Doctrine
12+
* @method static ArrayCollection|static[] enum()
13+
* @method static ArrayCollection|string[] options()
14+
*/
15+
class Enum extends BaseEnum
16+
{
17+
use GenericArrayAccessibleObjectStorage;
18+
19+
/**
20+
* @inheritDoc
21+
*/
22+
protected static function getNewStorage()
23+
{
24+
return new ArrayCollection();
25+
}
26+
27+
/**
28+
* @return ArrayCollection|int[]|string[]
29+
*/
30+
public static function keys()
31+
{
32+
return new ArrayCollection(static::enum()->getKeys());
33+
}
34+
35+
/**
36+
* @inheritDoc
37+
*/
38+
public static function keyString(string $glue = ',')
39+
{
40+
return implode($glue, static::keys()->toArray());
41+
}
42+
}

tests/BaseEnumTest.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
use RuntimeException;
88
use Tests\Enums\PaymentStatusArrayEnum;
99
use Tests\Enums\PaymentStatusArrayyEnum;
10+
use Tests\Enums\PaymentStatusDoctrineEnum;
1011
use Tests\Enums\PaymentStatusIlluminateCollectionEnum;
1112
use Tests\Enums\PaymentStatusOptions;
1213

@@ -47,6 +48,7 @@ public function enums(): array
4748
'array-storage' => [PaymentStatusArrayEnum::class],
4849
'collection-storage' => [PaymentStatusIlluminateCollectionEnum::class],
4950
'arrayy' => [PaymentStatusArrayyEnum::class],
51+
'doctrine' => [PaymentStatusDoctrineEnum::class],
5052
];
5153
}
5254

tests/Doctrine/EnumTest.php

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
<?php
2+
3+
namespace Tests\Doctrine;
4+
5+
use Doctrine\Common\Collections\ArrayCollection;
6+
use Tests\BaseEnumTest;
7+
use Tests\Enums\PaymentStatusDoctrineEnum;
8+
use Tests\TestCase;
9+
10+
/**
11+
* Class EnumTest
12+
* @package Tests\Doctrine
13+
*/
14+
class EnumTest extends TestCase
15+
{
16+
/** @test */
17+
public function it_returns_doctrine_storage()
18+
{
19+
$this->assertInstanceOf(ArrayCollection::class, PaymentStatusDoctrineEnum::enum());
20+
$this->assertInstanceOf(ArrayCollection::class, PaymentStatusDoctrineEnum::options());
21+
$this->assertInstanceOf(ArrayCollection::class, PaymentStatusDoctrineEnum::keys());
22+
}
23+
24+
/** @test */
25+
public function it_fetches_keys()
26+
{
27+
$this->assertEquals(array_values(BaseEnumTest::PAYMENT_STATUS_IDS), PaymentStatusDoctrineEnum::keys()->toArray());
28+
}
29+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
namespace Tests\Enums;
4+
5+
use EKvedaras\PHPEnum\Doctrine\Enum;
6+
7+
/**
8+
* Class PaymentStatusDoctrineEnum
9+
* @package Tests\Enums
10+
*/
11+
class PaymentStatusDoctrineEnum extends Enum
12+
{
13+
use PaymentStatusOptions;
14+
}

0 commit comments

Comments
 (0)