From 0c96b2aed127c5f9f50a47bdfd08e6250d5e17c4 Mon Sep 17 00:00:00 2001 From: Daniel Subiabre Date: Mon, 28 Apr 2025 14:16:38 +0200 Subject: [PATCH] Expose match rules as api resources --- .../Matchfunding/RuleApiResource.php | 28 ++++++++++ src/Matchfunding/Rule/RuleInterface.php | 5 ++ src/State/Matchfunding/RuleStateProvider.php | 56 +++++++++++++++++++ 3 files changed, 89 insertions(+) create mode 100644 src/ApiResource/Matchfunding/RuleApiResource.php create mode 100644 src/State/Matchfunding/RuleStateProvider.php diff --git a/src/ApiResource/Matchfunding/RuleApiResource.php b/src/ApiResource/Matchfunding/RuleApiResource.php new file mode 100644 index 0000000..009613b --- /dev/null +++ b/src/ApiResource/Matchfunding/RuleApiResource.php @@ -0,0 +1,28 @@ +ruleLocator->getOne(\sprintf( + 'App\\Matchfunding\\Rule\\%s', + $uriVariables['name'] + )); + + return $this->getApiResource($rule); + } catch (ClassNotFoundException $e) { + return null; + } + } + + $strategies = $this->ruleLocator->getAll(); + + $resources = []; + foreach ($strategies as $rule) { + $resources[] = $this->getApiResource($rule); + } + + return $resources; + } + + private function getApiResource(RuleInterface $rule): RuleApiResource + { + $resource = new RuleApiResource(); + $resource->name = self::getName($rule::class); + $resource->description = $rule::getDescription(); + + return $resource; + } + + private static function getName(string $class): string + { + return \array_slice(\explode('\\', $class), -1, 1)[0]; + } +}