Skip to content

Commit

Permalink
Refactor code to remove potential nullability issues
Browse files Browse the repository at this point in the history
Updated method signatures across codebase to remove nullable string types for validation input. These changes ensure consistency in handling input values from CSV files. The prior handling could potentially lead to null value related errors, thus this update improves the overall stability of the CSV validation process.
  • Loading branch information
Denis Smet committed Mar 13, 2024
1 parent 5f4c4ac commit 2757bb1
Show file tree
Hide file tree
Showing 41 changed files with 71 additions and 77 deletions.
4 changes: 2 additions & 2 deletions src/Rules/AbstarctRule.php
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ abstract class AbstarctRule
private string $columnNameId;
private string $ruleCode;

abstract public function validateRule(?string $cellValue): ?string;
abstract public function validateRule(string $cellValue): ?string;

public function __construct(string $columnNameId, null|array|bool|float|int|string $options = null)
{
Expand All @@ -42,7 +42,7 @@ public function __construct(string $columnNameId, null|array|bool|float|int|stri
$this->ruleCode = $this->getRuleCode();
}

public function validate(?string $cellValue, int $line = 0): ?Error
public function validate(string $cellValue, int $line = 0): ?Error
{
$error = $this->validateRule($cellValue);
if ($error !== null) {
Expand Down
4 changes: 2 additions & 2 deletions src/Rules/AllMustContain.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,15 @@

final class AllMustContain extends AbstarctRule
{
public function validateRule(?string $cellValue): ?string
public function validateRule(string $cellValue): ?string
{
$inclusions = $this->getOptionAsArray();
if (\count($inclusions) === 0) {
return null;
}

foreach ($inclusions as $inclusion) {
if (\strpos((string)$cellValue, (string)$inclusion) === false) {
if (\strpos($cellValue, (string)$inclusion) === false) {
return "Value \"<c>{$cellValue}</c>\" must contain all of the following:" .
' "<green>["' . \implode('", "', $inclusions) . '"]</green>"';
}
Expand Down
2 changes: 1 addition & 1 deletion src/Rules/AllowValues.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

class AllowValues extends AbstarctRule
{
public function validateRule(?string $cellValue): ?string
public function validateRule(string $cellValue): ?string
{
$allowedValues = $this->getOptionAsArray();

Expand Down
4 changes: 2 additions & 2 deletions src/Rules/AtLeastContains.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,15 @@

final class AtLeastContains extends AbstarctRule
{
public function validateRule(?string $cellValue): ?string
public function validateRule(string $cellValue): ?string
{
$inclusions = $this->getOptionAsArray();
if (\count($inclusions) === 0) {
return null;
}

foreach ($inclusions as $inclusion) {
if (\strpos((string)$cellValue, (string)$inclusion) !== false) {
if (\strpos($cellValue, (string)$inclusion) !== false) {
return null;
}
}
Expand Down
4 changes: 2 additions & 2 deletions src/Rules/CardinalDirection.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@

final class CardinalDirection extends AllowValues
{
public function validateRule(?string $cellValue): ?string
public function validateRule(string $cellValue): ?string
{
if (!$this->getOptionAsBool()) {
return null;
}

return parent::validateRule((string)$cellValue);
return parent::validateRule($cellValue);
}

public function getOptionAsArray(): array
Expand Down
4 changes: 2 additions & 2 deletions src/Rules/DateFormat.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,14 @@

final class DateFormat extends AbstarctRule
{
public function validateRule(?string $cellValue): ?string
public function validateRule(string $cellValue): ?string
{
$expectedDateFormat = $this->getOptionAsString();
if ($expectedDateFormat === '') {
return 'Date format is not defined';
}

if ($cellValue === null || $cellValue === '') {
if ($cellValue === '') {
return 'Date format of value "" is not valid. Expected format: "' . $expectedDateFormat . '"';
}

Expand Down
4 changes: 2 additions & 2 deletions src/Rules/ExactValue.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,9 @@

final class ExactValue extends AbstarctRule
{
public function validateRule(?string $cellValue): ?string
public function validateRule(string $cellValue): ?string
{
if ($this->getOptionAsString() !== (string)$cellValue) {
if ($this->getOptionAsString() !== $cellValue) {
return "Value \"<c>{$cellValue}</c>\" is not strict equal to " .
"\"<green>{$this->getOptionAsString()}<green>\"";
}
Expand Down
4 changes: 2 additions & 2 deletions src/Rules/IsBool.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@

final class IsBool extends AllowValues
{
public function validateRule(?string $cellValue): ?string
public function validateRule(string $cellValue): ?string
{
if (!$this->getOptionAsBool()) {
return null;
}

return parent::validateRule(\strtolower((string)$cellValue));
return parent::validateRule(\strtolower($cellValue));
}

public function getOptionAsArray(): array
Expand Down
4 changes: 2 additions & 2 deletions src/Rules/IsDomain.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,15 @@

final class IsDomain extends AbstarctRule
{
public function validateRule(?string $cellValue): ?string
public function validateRule(string $cellValue): ?string
{
if (!$this->getOptionAsBool()) {
return null;
}

$domainPattern = '/^(?!-)[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)*(\.[A-Za-z]{2,})$/';

if (\preg_match($domainPattern, (string)$cellValue) === 0) {
if (\preg_match($domainPattern, $cellValue) === 0) {
return "Value \"<c>{$cellValue}</c>\" is not a valid domain";
}

Expand Down
2 changes: 1 addition & 1 deletion src/Rules/IsEmail.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

final class IsEmail extends AbstarctRule
{
public function validateRule(?string $cellValue): ?string
public function validateRule(string $cellValue): ?string
{
if (!$this->getOptionAsBool()) {
return null;
Expand Down
4 changes: 2 additions & 2 deletions src/Rules/IsFloat.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@

class IsFloat extends AbstarctRule
{
public function validateRule(?string $cellValue): ?string
public function validateRule(string $cellValue): ?string
{
if (!$this->getOptionAsBool()) {
return null;
}

if (\preg_match('/^-?\d+(\.\d+)?$/', (string)$cellValue) === 0) {
if (\preg_match('/^-?\d+(\.\d+)?$/', $cellValue) === 0) {
return "Value \"<c>{$cellValue}</c>\" is not a float number";
}

Expand Down
4 changes: 2 additions & 2 deletions src/Rules/IsInt.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@

final class IsInt extends AbstarctRule
{
public function validateRule(?string $cellValue): ?string
public function validateRule(string $cellValue): ?string
{
if (!$this->getOptionAsBool()) {
return null;
}

if (\preg_match('/^-?\d+$/', (string)$cellValue) === 0) {
if (\preg_match('/^-?\d+$/', $cellValue) === 0) {
return "Value \"<c>{$cellValue}</c>\" is not an integer";
}

Expand Down
2 changes: 1 addition & 1 deletion src/Rules/IsIp.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

final class IsIp extends AbstarctRule
{
public function validateRule(?string $cellValue): ?string
public function validateRule(string $cellValue): ?string
{
if (!$this->getOptionAsBool()) {
return null;
Expand Down
2 changes: 1 addition & 1 deletion src/Rules/IsLatitude.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ final class IsLatitude extends IsFloat
private float $min = -90.0;
private float $max = 90.0;

public function validateRule(?string $cellValue): ?string
public function validateRule(string $cellValue): ?string
{
if (!$this->getOptionAsBool()) {
return null;
Expand Down
2 changes: 1 addition & 1 deletion src/Rules/IsLongitude.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ final class IsLongitude extends IsFloat
private float $min = -180.0;
private float $max = 180.0;

public function validateRule(?string $cellValue): ?string
public function validateRule(string $cellValue): ?string
{
if (!$this->getOptionAsBool()) {
return null;
Expand Down
2 changes: 1 addition & 1 deletion src/Rules/IsUrl.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

final class IsUrl extends AbstarctRule
{
public function validateRule(?string $cellValue): ?string
public function validateRule(string $cellValue): ?string
{
if (!$this->getOptionAsBool()) {
return null;
Expand Down
4 changes: 2 additions & 2 deletions src/Rules/IsUuid4.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,15 @@

final class IsUuid4 extends AbstarctRule
{
public function validateRule(?string $cellValue): ?string
public function validateRule(string $cellValue): ?string
{
if (!$this->getOptionAsBool()) {
return null;
}

$uuid4 = '/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89ABab][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$/';

if (\preg_match($uuid4, (string)$cellValue) === 0) {
if (\preg_match($uuid4, $cellValue) === 0) {
return 'Value is not a valid UUID v4';
}

Expand Down
2 changes: 1 addition & 1 deletion src/Rules/Max.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

final class Max extends IsFloat
{
public function validateRule(?string $cellValue): ?string
public function validateRule(string $cellValue): ?string
{
$result = parent::validateRule($cellValue);
if ($result !== null) {
Expand Down
4 changes: 2 additions & 2 deletions src/Rules/MaxDate.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@

final class MaxDate extends AbstarctRule
{
public function validateRule(?string $cellValue): ?string
public function validateRule(string $cellValue): ?string
{
$minDate = $this->getOptionAsDate();
$cellDate = new \DateTimeImmutable((string)$cellValue);
$cellDate = new \DateTimeImmutable($cellValue);

if ($cellDate->getTimestamp() > $minDate->getTimestamp()) {
return "Value \"<c>{$cellValue}</c>\" is more than the maximum " .
Expand Down
4 changes: 2 additions & 2 deletions src/Rules/MaxLength.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@

final class MaxLength extends AbstarctRule
{
public function validateRule(?string $cellValue): ?string
public function validateRule(string $cellValue): ?string
{
$minLength = $this->getOptionAsInt();
$length = \mb_strlen((string)$cellValue);
$length = \mb_strlen($cellValue);

if ($length > $minLength) {
return "Value \"<c>{$cellValue}</c>\" (length: {$length}) is too long. " .
Expand Down
2 changes: 1 addition & 1 deletion src/Rules/MaxPrecision.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

final class MaxPrecision extends Precision
{
public function validateRule(?string $cellValue): ?string
public function validateRule(string $cellValue): ?string
{
$valuePrecision = self::getFloatPrecision($cellValue);

Expand Down
4 changes: 2 additions & 2 deletions src/Rules/MaxWordCount.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@

final class MaxWordCount extends AbstarctRule
{
public function validateRule(?string $cellValue): ?string
public function validateRule(string $cellValue): ?string
{
$wordCount = $this->getOptionAsInt();
$count = \str_word_count((string)$cellValue);
$count = \str_word_count($cellValue);

if ($count > $wordCount) {
return "Value \"<c>{$cellValue}</c>\" has {$count} words, " .
Expand Down
2 changes: 1 addition & 1 deletion src/Rules/Min.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

final class Min extends IsFloat
{
public function validateRule(?string $cellValue): ?string
public function validateRule(string $cellValue): ?string
{
$result = parent::validateRule($cellValue);
if ($result !== null) {
Expand Down
4 changes: 2 additions & 2 deletions src/Rules/MinDate.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@

final class MinDate extends AbstarctRule
{
public function validateRule(?string $cellValue): ?string
public function validateRule(string $cellValue): ?string
{
$minDate = $this->getOptionAsDate();
$cellDate = new \DateTimeImmutable((string)$cellValue);
$cellDate = new \DateTimeImmutable($cellValue);

if ($cellDate->getTimestamp() < $minDate->getTimestamp()) {
return "Value \"<c>{$cellValue}</c>\" is less than the minimum " .
Expand Down
4 changes: 2 additions & 2 deletions src/Rules/MinLength.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@

final class MinLength extends AbstarctRule
{
public function validateRule(?string $cellValue): ?string
public function validateRule(string $cellValue): ?string
{
$minLength = $this->getOptionAsInt();
$length = \mb_strlen((string)$cellValue);
$length = \mb_strlen($cellValue);

if ($length < $minLength) {
return "Value \"<c>{$cellValue}</c>\" (length: {$length}) is too short. " .
Expand Down
2 changes: 1 addition & 1 deletion src/Rules/MinPrecision.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

final class MinPrecision extends Precision
{
public function validateRule(?string $cellValue): ?string
public function validateRule(string $cellValue): ?string
{
$valuePrecision = self::getFloatPrecision($cellValue);

Expand Down
4 changes: 2 additions & 2 deletions src/Rules/MinWordCount.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,10 @@

final class MinWordCount extends AbstarctRule
{
public function validateRule(?string $cellValue): ?string
public function validateRule(string $cellValue): ?string
{
$wordCount = $this->getOptionAsInt();
$count = \str_word_count((string)$cellValue);
$count = \str_word_count($cellValue);

if ($count < $wordCount) {
return "Value \"<c>{$cellValue}</c>\" has {$count} words, " .
Expand Down
4 changes: 2 additions & 2 deletions src/Rules/NotEmpty.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@

final class NotEmpty extends AbstarctRule
{
public function validateRule(?string $cellValue): ?string
public function validateRule(string $cellValue): ?string
{
if (!$this->getOptionAsBool()) {
return null;
}

if ($cellValue === null || $cellValue === '') {
if ($cellValue === '') {
return 'Value is empty';
}

Expand Down
4 changes: 2 additions & 2 deletions src/Rules/OnlyCapitalize.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@

final class OnlyCapitalize extends AbstarctRule
{
public function validateRule(?string $cellValue): ?string
public function validateRule(string $cellValue): ?string
{
if (!$this->getOptionAsBool()) {
return null;
}

if ($cellValue !== null && $cellValue !== \ucfirst($cellValue)) {
if ($cellValue !== \ucfirst($cellValue)) {
return "Value \"<c>{$cellValue}</c>\" should be in capitalize";
}

Expand Down
4 changes: 2 additions & 2 deletions src/Rules/OnlyLowercase.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@

final class OnlyLowercase extends AbstarctRule
{
public function validateRule(?string $cellValue): ?string
public function validateRule(string $cellValue): ?string
{
if (!$this->getOptionAsBool()) {
return null;
}

if ($cellValue !== null && $cellValue !== \mb_strtolower($cellValue)) {
if ($cellValue !== \mb_strtolower($cellValue)) {
return "Value \"<c>{$cellValue}</c>\" should be in lowercase";
}

Expand Down
Loading

0 comments on commit 2757bb1

Please sign in to comment.