From 327cc52601ae98c41a023e5daa870b4408bb1f6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9miah=20VALERIE?= Date: Mon, 25 Apr 2016 11:23:10 +0200 Subject: [PATCH 1/2] Add ExecutionResult $extensions https://facebook.github.io/graphql/#sec-Response-Format --- src/Executor/ExecutionResult.php | 13 ++++++++++++- tests/Executor/ExecutionResultTest.php | 25 +++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 tests/Executor/ExecutionResultTest.php diff --git a/src/Executor/ExecutionResult.php b/src/Executor/ExecutionResult.php index 074f200..7fc7523 100644 --- a/src/Executor/ExecutionResult.php +++ b/src/Executor/ExecutionResult.php @@ -14,15 +14,22 @@ class ExecutionResult * @var Error[] */ public $errors; + + /** + * @var array[] + */ + public $extensions; /** * @param array $data * @param array $errors + * @param array $extensions */ - public function __construct(array $data = null, array $errors = []) + public function __construct(array $data = null, array $errors = [], array $extensions = []) { $this->data = $data; $this->errors = $errors; + $this->extensions = $extensions; } /** @@ -35,6 +42,10 @@ class ExecutionResult if (!empty($this->errors)) { $result['errors'] = array_map(['GraphQL\Error', 'formatError'], $this->errors); } + + if (!empty($this->extensions)) { + $result['extensions'] = (array) $this->extensions; + } return $result; } diff --git a/tests/Executor/ExecutionResultTest.php b/tests/Executor/ExecutionResultTest.php new file mode 100644 index 0000000..1c942f7 --- /dev/null +++ b/tests/Executor/ExecutionResultTest.php @@ -0,0 +1,25 @@ +assertEquals(['data' => null], $executionResult->toArray()); + } + + public function testToArrayExtensions() + { + $executionResult = new ExecutionResult(null, [], ['foo' => 'bar']); + + $this->assertEquals(['data' => null, 'extensions' => ['foo' => 'bar']], $executionResult->toArray()); + + $executionResult->extensions = ['bar' => 'foo']; + + $this->assertEquals(['data' => null, 'extensions' => ['bar' => 'foo']], $executionResult->toArray()); + } +} From de4eba707762f8b9fce05b968fc5ba2d256bd16d Mon Sep 17 00:00:00 2001 From: Jeremiah VALERIE Date: Mon, 25 Apr 2016 11:56:10 +0200 Subject: [PATCH 2/2] Fix interface implementaion when interface is extends. --- src/Type/Definition/InterfaceType.php | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/Type/Definition/InterfaceType.php b/src/Type/Definition/InterfaceType.php index 7bf37c5..dd5a6e2 100644 --- a/src/Type/Definition/InterfaceType.php +++ b/src/Type/Definition/InterfaceType.php @@ -49,8 +49,9 @@ class InterfaceType extends Type implements AbstractType, OutputType, CompositeT public static function addImplementationToInterfaces(ObjectType $impl) { self::$_lazyLoadImplementations[] = function() use ($impl) { + /** @var self $interface */ foreach ($impl->getInterfaces() as $interface) { - $interface->_implementations[] = $impl; + $interface->addImplementation($impl); } }; } @@ -66,6 +67,16 @@ class InterfaceType extends Type implements AbstractType, OutputType, CompositeT self::$_lazyLoadImplementations = []; } + /** + * Add a implemented object type to interface + * + * @param ObjectType $impl + */ + protected function addImplementation(ObjectType $impl) + { + $this->_implementations[] = $impl; + } + /** * InterfaceType constructor. * @param array $config