Skip to content

Commit 2b954fd

Browse files
authored
Merge pull request #783 from murtukov/refactor/default-field-resolver
Refactor default field resolver
2 parents 5dc5b7c + 3678e94 commit 2b954fd

File tree

1 file changed

+18
-20
lines changed

1 file changed

+18
-20
lines changed

src/Resolver/FieldResolver.php

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,14 @@
1010
use function is_callable;
1111
use function is_object;
1212
use function str_replace;
13-
use function ucwords;
1413

1514
class FieldResolver
1615
{
16+
/**
17+
* Allowed method prefixes
18+
*/
19+
private const PREFIXES = ['get', 'is', 'has', ''];
20+
1721
/**
1822
* @param mixed $parentValue
1923
* @param mixed $args
@@ -24,7 +28,7 @@ class FieldResolver
2428
public function __invoke($parentValue, $args, $context, ResolveInfo $info)
2529
{
2630
$fieldName = $info->fieldName;
27-
$value = self::valueFromObjectOrArray($parentValue, $fieldName);
31+
$value = static::valueFromObjectOrArray($parentValue, $fieldName);
2832

2933
return $value instanceof Closure ? $value($parentValue, $args, $context, $info) : $value;
3034
}
@@ -36,28 +40,22 @@ public function __invoke($parentValue, $args, $context, ResolveInfo $info)
3640
*/
3741
public static function valueFromObjectOrArray($objectOrArray, string $fieldName)
3842
{
39-
$value = null;
4043
if (is_array($objectOrArray) && isset($objectOrArray[$fieldName])) {
41-
$value = $objectOrArray[$fieldName];
42-
} elseif (is_object($objectOrArray)) {
43-
if (null !== $getter = self::guessObjectMethod($objectOrArray, $fieldName, 'get')) {
44-
$value = $objectOrArray->$getter();
45-
} elseif (null !== $getter = self::guessObjectMethod($objectOrArray, $fieldName, 'is')) {
46-
$value = $objectOrArray->$getter();
47-
} elseif (null !== $getter = self::guessObjectMethod($objectOrArray, $fieldName, '')) {
48-
$value = $objectOrArray->$getter();
49-
} elseif (isset($objectOrArray->$fieldName)) {
50-
$value = $objectOrArray->$fieldName;
51-
}
44+
return $objectOrArray[$fieldName];
5245
}
5346

54-
return $value;
55-
}
47+
if (is_object($objectOrArray)) {
48+
foreach (static::PREFIXES as $prefix) {
49+
$method = $prefix.str_replace('_', '', $fieldName);
5650

57-
private static function guessObjectMethod(object $object, string $fieldName, string $prefix): ?string
58-
{
59-
if (is_callable([$object, $method = $prefix.str_replace(' ', '', ucwords(str_replace('_', ' ', $fieldName)))])) {
60-
return $method;
51+
if (is_callable([$objectOrArray, $method])) {
52+
return $objectOrArray->$method();
53+
}
54+
}
55+
56+
if (isset($objectOrArray->$fieldName)) {
57+
return $objectOrArray->$fieldName;
58+
}
6159
}
6260

6361
return null;

0 commit comments

Comments
 (0)