Skip to content

Commit a51f0e4

Browse files
committed
refactor!: prioritise code in error constructor arguments
1 parent 024c7f9 commit a51f0e4

3 files changed

Lines changed: 39 additions & 35 deletions

File tree

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ All notable changes to this project will be documented in this file. This projec
1212

1313
### Changed
1414

15+
- **BREAKING**: The constructor argument order for the `Error` class has changed. The new order is `code`, `message`,
16+
`key`. Previously it was `key`, `message`, `code` because code was added later. However, in most instances `code` is
17+
the most important property as it is used to programmatically detect specific error scenarios. This hopefully will not
18+
be breaking, as the docs specified that named arguments should be used when constructing error objects.
1519
- **BREAKING** The error and error list interfaces now accept `UnitEnum` instead of `BackedEnum` for error codes.
1620
Although technically breaking, this will only affect your implementation if you have implemented these interfaces. All
1721
concrete classes provided by this package have been updated.

src/Toolkit/Result/Error.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,14 @@
2626
/**
2727
* Error constructor.
2828
*
29-
* @param UnitEnum|string|null $key
30-
* @param string $message
3129
* @param UnitEnum|null $code
30+
* @param string $message
31+
* @param UnitEnum|string|null $key
3232
*/
3333
public function __construct(
34-
UnitEnum|string|null $key = null,
35-
private string $message = '',
3634
private ?UnitEnum $code = null,
35+
private string $message = '',
36+
UnitEnum|string|null $key = null,
3737
) {
3838
Contracts::assert(!empty($message) || $code !== null, 'Error must have a message or a code.');
3939
$this->key = $key ?: null;

tests/Unit/Toolkit/Result/KeyedSetOfErrorsTest.php

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,14 @@ class KeyedSetOfErrorsTest extends TestCase
2626
public function test(): void
2727
{
2828
$errors = new KeyedSetOfErrors(
29-
$a = new Error('foo', 'Message A'),
30-
$b = new Error('bar', 'Message B'),
31-
$c = new Error('foo', 'Message C'),
32-
$d = new Error(null, 'Message D'),
33-
$e = new Error(null, 'Message E'),
34-
$f = new Error(TestUnitEnum::Baz, 'Message F'),
35-
$g = new Error(TestUnitEnum::Bat, 'Message G'),
36-
$h = new Error(TestUnitEnum::Baz, 'Message H'),
29+
$a = new Error(message: 'Message A', key: 'foo'),
30+
$b = new Error(message: 'Message B', key: 'bar'),
31+
$c = new Error(message: 'Message C', key: 'foo'),
32+
$d = new Error(message: 'Message D'),
33+
$e = new Error(message: 'Message E'),
34+
$f = new Error(message: 'Message F', key: TestUnitEnum::Baz),
35+
$g = new Error(message: 'Message G', key: TestUnitEnum::Bat),
36+
$h = new Error(message: 'Message H', key: TestUnitEnum::Baz),
3737
);
3838

3939
$expected = [
@@ -73,12 +73,12 @@ public function testEmpty(): void
7373
public function testPutNewKey(): void
7474
{
7575
$original = new KeyedSetOfErrors(
76-
$a = new Error('foo', 'Message A'),
77-
$b = new Error('bar', 'Message B'),
78-
$c = new Error('foo', 'Message C'),
76+
$a = new Error(message: 'Message A', key: 'foo'),
77+
$b = new Error(message: 'Message B', key: 'bar'),
78+
$c = new Error(message: 'Message C', key: 'foo'),
7979
);
8080

81-
$actual = $original->put($d = new Error('baz', 'Message D'));
81+
$actual = $original->put($d = new Error(message: 'Message D', key: 'baz'));
8282

8383
$this->assertNotSame($original, $actual);
8484
$this->assertEquals([
@@ -99,12 +99,12 @@ public function testPutNewKey(): void
9999
public function testPutExistingKey(): void
100100
{
101101
$original = new KeyedSetOfErrors(
102-
$a = new Error('foo', 'Message A'),
103-
$b = new Error('bar', 'Message B'),
104-
$c = new Error('foo', 'Message C'),
102+
$a = new Error(message: 'Message A', key: 'foo'),
103+
$b = new Error(message: 'Message B', key: 'bar'),
104+
$c = new Error(message: 'Message C', key: 'foo'),
105105
);
106106

107-
$actual = $original->put($d = new Error('bar', 'Message D'));
107+
$actual = $original->put($d = new Error(message: 'Message D', key: 'bar'));
108108

109109
$this->assertNotSame($original, $actual);
110110
$this->assertEquals([
@@ -124,12 +124,12 @@ public function testPutExistingKey(): void
124124
public function testPutErrorWithoutKey1(): void
125125
{
126126
$original = new KeyedSetOfErrors(
127-
$a = new Error('foo', 'Message A'),
128-
$b = new Error('bar', 'Message B'),
129-
$c = new Error('foo', 'Message C'),
127+
$a = new Error(message: 'Message A', key: 'foo'),
128+
$b = new Error(message: 'Message B', key: 'bar'),
129+
$c = new Error(message: 'Message C', key: 'foo'),
130130
);
131131

132-
$actual = $original->put($d = new Error(null, 'Message D'));
132+
$actual = $original->put($d = new Error(message: 'Message D'));
133133

134134
$this->assertNotSame($original, $actual);
135135
$this->assertEquals([
@@ -150,12 +150,12 @@ public function testPutErrorWithoutKey1(): void
150150
public function testPutErrorWithoutKey2(): void
151151
{
152152
$original = new KeyedSetOfErrors(
153-
$a = new Error(null, 'Message A'),
154-
$b = new Error('foo', 'Message B'),
155-
$c = new Error(null, 'Message C'),
153+
$a = new Error(message: 'Message A'),
154+
$b = new Error(message: 'Message B', key: 'foo'),
155+
$c = new Error(message: 'Message C'),
156156
);
157157

158-
$actual = $original->put($d = new Error(null, 'Message D'));
158+
$actual = $original->put($d = new Error(message: 'Message D'));
159159

160160
$this->assertNotSame($original, $actual);
161161
$this->assertEquals([
@@ -175,16 +175,16 @@ public function testPutErrorWithoutKey2(): void
175175
public function testMerge(): void
176176
{
177177
$set1 = new KeyedSetOfErrors(
178-
$a = new Error('foo', 'Message A'),
179-
$b = new Error('bar', 'Message B'),
180-
$c = new Error('foo', 'Message C'),
178+
$a = new Error(message: 'Message A', key: 'foo'),
179+
$b = new Error(message: 'Message B', key: 'bar'),
180+
$c = new Error(message: 'Message C', key: 'foo'),
181181
);
182182

183183
$set2 = new KeyedSetOfErrors(
184-
$d = new Error('bar', 'Message D'),
185-
$e = new Error('baz', 'Message E'),
186-
$f = new Error('bar', 'Message F'),
187-
$g = new Error(null, 'Message G'),
184+
$d = new Error(message: 'Message D', key: 'bar'),
185+
$e = new Error(message: 'Message E', key: 'baz'),
186+
$f = new Error(message: 'Message F', key: 'bar'),
187+
$g = new Error(message: 'Message G'),
188188
);
189189

190190
$actual = $set1->merge($set2);

0 commit comments

Comments
 (0)