Skip to content

Commit 9415614

Browse files
Merge pull request #53 from OccTherapist/2.x
Refactoring Webmozart Assert dependancy in Rank service.
2 parents 4d29acb + 5d500d9 commit 9415614

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

src/Services/Rank.php

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
use Relaticle\Flowforge\Exceptions\LastCharCantBeEqualToMinChar;
77
use Relaticle\Flowforge\Exceptions\MaxRankLength;
88
use Relaticle\Flowforge\Exceptions\PrevGreaterThanOrEquals;
9-
use Webmozart\Assert\Assert;
109

1110
use function array_filter;
1211
use function array_values;
@@ -104,7 +103,7 @@ public static function after(self $prevRank): self
104103

105104
$return = substr($prevRank->get(), 0, -1) . chr(ord($char) + 1);
106105

107-
Assert::stringNotEmpty($return);
106+
self::ensureNonEmpty($return, 'after(): computed $return');
108107

109108
return self::fromString($return);
110109
}
@@ -116,14 +115,14 @@ public static function before(self $nextRank): self
116115
if (ord($char) - 1 <= ord(self::MIN_CHAR)) {
117116
$return = substr($nextRank->get(), 0, -1) . chr(ord($char) - 1) . chr(ord(self::MAX_CHAR) - 1);
118117

119-
Assert::stringNotEmpty($return);
118+
self::ensureNonEmpty($return, 'before(): computed $return (edge case)');
120119

121120
return self::fromString($return);
122121
}
123122

124123
$return = substr($nextRank->get(), 0, -1) . chr(ord($char) - 1);
125124

126-
Assert::stringNotEmpty($return);
125+
self::ensureNonEmpty($return, 'before(): computed $return');
127126

128127
return self::fromString($return);
129128
}
@@ -153,7 +152,7 @@ public static function betweenRanks(self $prevRank, self $nextRank): self
153152
break;
154153
}
155154

156-
Assert::stringNotEmpty($rank);
155+
self::ensureNonEmpty($rank, 'betweenRanks(): computed $rank');
157156

158157
return self::fromString($rank);
159158
}
@@ -167,7 +166,7 @@ private function getChar(int $i, string $defaultChar): string
167166
{
168167
$return = $this->rank[$i] ?? $defaultChar;
169168

170-
Assert::stringNotEmpty($return);
169+
self::ensureNonEmpty($return, 'getChar(): selected $return');
171170

172171
return $return;
173172
}
@@ -187,8 +186,20 @@ private static function mid(string $prev, string $next): string
187186

188187
$return = chr((int) ((ord($prev) + ord($next)) / 2));
189188

190-
Assert::stringNotEmpty($return);
189+
self::ensureNonEmpty($return, 'mid(): computed $return');
191190

192191
return $return;
193192
}
193+
194+
/**
195+
* Ensure a string is non-empty at runtime; avoids relying on Webmozart Assert in production.
196+
*
197+
* @psalm-assert non-empty-string $value
198+
*/
199+
private static function ensureNonEmpty(string $value, string $context): void
200+
{
201+
if ($value === '') {
202+
throw new \LogicException('Rank invariant violated: ' . $context . ' must be a non-empty string.');
203+
}
204+
}
194205
}

0 commit comments

Comments
 (0)