From 8ba341e6cf41ae0c4fc9e42409c1bf4cbafa22be Mon Sep 17 00:00:00 2001 From: Masroor Ehsan Date: Wed, 22 Jan 2025 19:09:47 +0600 Subject: [PATCH] InList --- app/Domain/Rule/MatchMode.php | 2 +- app/Services/ContentMatcher.php | 20 +++++++++++++++----- database/seeders/InstituteSeeder.php | 4 ++-- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/app/Domain/Rule/MatchMode.php b/app/Domain/Rule/MatchMode.php index 2a625e7..c96ec86 100644 --- a/app/Domain/Rule/MatchMode.php +++ b/app/Domain/Rule/MatchMode.php @@ -8,6 +8,6 @@ enum MatchMode: string case Contains = 'CONTAINS'; case StartsWith = 'STARTS_WITH'; case EndsWith = 'ENDS_WITH'; - case InArray = 'IN_ARRAY'; + case InList = 'IN_LIST'; case Regex = 'REGEX'; } diff --git a/app/Services/ContentMatcher.php b/app/Services/ContentMatcher.php index 0968eee..707705b 100644 --- a/app/Services/ContentMatcher.php +++ b/app/Services/ContentMatcher.php @@ -6,22 +6,32 @@ final class ContentMatcher { + private static function matchList(string $input, string $pattern): bool + { + $patterns = collect(explode(',', $pattern)) + ->map(fn ($s) => trim($s)) + ->filter(fn ($s) => filled($s)); + foreach ($patterns as $search) { + if (self::match($input, $search, MatchMode::Exact)) { + return true; + } + } + + return false; + } + public static function match(string $input, string $pattern, MatchMode $mode): bool { if (blank($input) || blank($pattern)) { return false; } - if ($mode !== MatchMode::Regex) { - $input = strtolower($input); - $pattern = strtolower($pattern); - } - return match ($mode) { MatchMode::Exact => strcasecmp($input, $pattern) === 0, MatchMode::Contains => str_contains($input, $pattern) , MatchMode::StartsWith => str_starts_with($input, $pattern), MatchMode::EndsWith => str_ends_with($input, $pattern), + MatchMode::InList => self::matchList($input, $pattern), MatchMode::Regex => preg_match($pattern, $input) === 1, }; } diff --git a/database/seeders/InstituteSeeder.php b/database/seeders/InstituteSeeder.php index d2afd88..73ae734 100644 --- a/database/seeders/InstituteSeeder.php +++ b/database/seeders/InstituteSeeder.php @@ -95,7 +95,7 @@ public function run(): void 'dicom_tag' => DicomTagIdentifiers::Modality->value, 'search_pattern' => 'MR,CT', 'dicom_routing_rule_id' => $rul_chev_mr->id, - 'match_mode' => MatchMode::InArray->value, + 'match_mode' => MatchMode::InList->value, 'case_sensitive' => true, ]); @@ -110,7 +110,7 @@ public function run(): void 'dicom_tag' => DicomTagIdentifiers::Modality->value, 'search_pattern' => 'CR,DX', 'dicom_routing_rule_id' => $rul_chev_xr->id, - 'match_mode' => MatchMode::InArray->value, + 'match_mode' => MatchMode::InList->value, 'case_sensitive' => true, ]);