Merge pull request #116 from leocavalcante/resolve-callables

Resolve callables by default
This commit is contained in:
Vladimir Razuvaev 2017-06-27 00:37:30 +07:00 committed by GitHub
commit 21e3445754
2 changed files with 34 additions and 2 deletions

View File

@ -913,7 +913,7 @@ class Executor
}
}
return $property instanceof \Closure ? $property($source, $args, $context) : $property;
return is_callable($property) ? $property($source, $args, $context) : $property;
}
/**

View File

@ -60,6 +60,23 @@ class ResolveTest extends \PHPUnit_Framework_TestCase
);
}
/**
* @it default function calls callables
*/
public function testDefaultFunctionCallsCallables()
{
$schema = $this->buildSchema(['type' => Type::string()]);
$_secret = 'secretValue' . uniqid();
$source = [
'test' => new ResolveTestCallableFixture($_secret)
];
$this->assertEquals(
['data' => ['test' => $_secret]],
GraphQL::execute($schema, '{ test }', $source)
);
}
/**
* @it default function passes args and context
*/
@ -114,4 +131,19 @@ class ResolveTest extends \PHPUnit_Framework_TestCase
GraphQL::execute($schema, '{ test(aInt: -123, aStr: "String!") }', 'Source!')
);
}
}
}
class ResolveTestCallableFixture
{
private $value;
public function __construct($value)
{
$this->value = $value;
}
public function __invoke($root, $args, $context)
{
return $this->value;
}
}