Skip to content
This repository has been archived by the owner on Mar 8, 2023. It is now read-only.

Commit

Permalink
Improve object serialization
Browse files Browse the repository at this point in the history
  • Loading branch information
crisu83 committed Feb 24, 2018
1 parent 4755eb1 commit 4148f43
Show file tree
Hide file tree
Showing 9 changed files with 169 additions and 130 deletions.
17 changes: 0 additions & 17 deletions src/Language/AST/Builder/DocumentBuilder.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,21 +28,4 @@ public function supportsKind(string $kind): bool
{
return $kind === NodeKindEnum::DOCUMENT;
}

/**
* @param array $ast
* @return array|DefinitionNodeInterface[]
*/
protected function parseDefinitions(array $ast): array
{
$definitions = [];

if (isset($ast['definitions'])) {
foreach ($ast['definitions'] as $definitionAst) {
$definitions[] = $this->director->build($definitionAst);
}
}

return $definitions;
}
}
17 changes: 17 additions & 0 deletions src/Language/AST/Node/AbstractNode.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use Digia\GraphQL\ConfigObject;
use Digia\GraphQL\Contract\SerializationInterface;
use Digia\GraphQL\Language\Location;
use function Digia\GraphQL\Util\jsonEncode;

abstract class AbstractNode extends ConfigObject implements SerializationInterface
{
Expand Down Expand Up @@ -54,4 +55,20 @@ public function toArray(): array
'loc' => $this->getLocationAsArray(),
];
}

/**
* @return string
*/
public function toJSON(): string
{
return jsonEncode($this->toArray());
}

/**
* @return string
*/
public function __toString(): string
{
return $this->toJSON();
}
}
5 changes: 2 additions & 3 deletions src/Language/AST/Node/Behavior/DirectivesTrait.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,7 @@ public function getDirectives(): array
*/
public function getDirectivesAsArray(): array
{
return array_map(function (SerializationInterface $directive) {
return $directive->toArray();
}, $this->directives);
// TODO: Implement this method.
return [];
}
}
17 changes: 17 additions & 0 deletions src/Language/Location.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
namespace Digia\GraphQL\Language;

use Digia\GraphQL\Contract\SerializationInterface;
use function Digia\GraphQL\Util\jsonEncode;

class Location implements SerializationInterface
{
Expand Down Expand Up @@ -70,4 +71,20 @@ public function toArray(): array
'end' => $this->end,
];
}

/**
* @return string
*/
public function toJSON(): string
{
return jsonEncode($this->toArray());
}

/**
* @return string
*/
public function __toString(): string
{
return $this->toJSON();
}
}
12 changes: 2 additions & 10 deletions src/Type/Definition/Directive.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@
use Digia\GraphQL\Type\Definition\Behavior\DescriptionTrait;
use Digia\GraphQL\Type\Definition\Behavior\NameTrait;
use Digia\GraphQL\Type\Definition\Contract\DirectiveInterface;
use function Digia\GraphQL\Util\jsonEncode;

class Directive extends ConfigObject implements DirectiveInterface, SerializationInterface
class Directive extends ConfigObject implements DirectiveInterface
{

use NameTrait;
Expand Down Expand Up @@ -52,13 +53,4 @@ protected function setLocations(array $locations)

return $this;
}

/**
* @return array
*/
public function toArray(): array
{
// TODO: Implement this method.
return [];
}
}
9 changes: 9 additions & 0 deletions src/Util/helpers.php
Original file line number Diff line number Diff line change
Expand Up @@ -64,3 +64,12 @@ function toString($value): string
}
return gettype($value);
}

/**
* @param $value
* @return string
*/
function jsonEncode($value): string
{
return json_encode($value, JSON_UNESCAPED_UNICODE);
}
106 changes: 106 additions & 0 deletions tests/Functional/Language/AbstractParserTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
<?php

namespace Digia\GraphQL\Test\Functional\Language;

use Digia\GraphQL\Language\AST\Builder\ArgumentBuilder;
use Digia\GraphQL\Language\AST\Builder\BooleanBuilder;
use Digia\GraphQL\Language\AST\Builder\DirectiveBuilder;
use Digia\GraphQL\Language\AST\Builder\DocumentBuilder;
use Digia\GraphQL\Language\AST\Builder\EnumBuilder;
use Digia\GraphQL\Language\AST\Builder\FieldBuilder;
use Digia\GraphQL\Language\AST\Builder\FloatBuilder;
use Digia\GraphQL\Language\AST\Builder\FragmentDefinitionBuilder;
use Digia\GraphQL\Language\AST\Builder\FragmentSpreadBuilder;
use Digia\GraphQL\Language\AST\Builder\InlineFragmentBuilder;
use Digia\GraphQL\Language\AST\Builder\IntBuilder;
use Digia\GraphQL\Language\AST\Builder\ListBuilder;
use Digia\GraphQL\Language\AST\Builder\ListTypeBuilder;
use Digia\GraphQL\Language\AST\Builder\NameBuilder;
use Digia\GraphQL\Language\AST\Builder\NamedTypeBuilder;
use Digia\GraphQL\Language\AST\Builder\NonNullTypeBuilder;
use Digia\GraphQL\Language\AST\Builder\NullBuilder;
use Digia\GraphQL\Language\AST\Builder\ObjectBuilder;
use Digia\GraphQL\Language\AST\Builder\ObjectFieldBuilder;
use Digia\GraphQL\Language\AST\Builder\OperationDefinitionBuilder;
use Digia\GraphQL\Language\AST\Builder\SelectionSetBuilder;
use Digia\GraphQL\Language\AST\Builder\StringBuilder;
use Digia\GraphQL\Language\AST\Builder\VariableBuilder;
use Digia\GraphQL\Language\AST\Builder\VariableDefinitionBuilder;
use Digia\GraphQL\Language\ASTParser;
use Digia\GraphQL\Language\Contract\ParserInterface;
use Digia\GraphQL\Language\Reader\AmpReader;
use Digia\GraphQL\Language\Reader\AtReader;
use Digia\GraphQL\Language\Reader\BangReader;
use Digia\GraphQL\Language\Reader\BlockStringReader;
use Digia\GraphQL\Language\Reader\BraceReader;
use Digia\GraphQL\Language\Reader\BracketReader;
use Digia\GraphQL\Language\Reader\ColonReader;
use Digia\GraphQL\Language\Reader\CommentReader;
use Digia\GraphQL\Language\Reader\DollarReader;
use Digia\GraphQL\Language\Reader\EqualsReader;
use Digia\GraphQL\Language\Reader\NameReader;
use Digia\GraphQL\Language\Reader\NumberReader;
use Digia\GraphQL\Language\Reader\ParenthesisReader;
use Digia\GraphQL\Language\Reader\PipeReader;
use Digia\GraphQL\Language\Reader\SpreadReader;
use Digia\GraphQL\Language\Reader\StringReader;
use Digia\GraphQL\Test\TestCase;

abstract class AbstractParserTest extends TestCase
{
/**
* @var ParserInterface
*/
protected $parser;

public function setUp()
{
$builders = [
new ArgumentBuilder(),
new BooleanBuilder(),
new DirectiveBuilder(),
new DocumentBuilder(),
new EnumBuilder(),
new FieldBuilder(),
new FloatBuilder(),
new FragmentDefinitionBuilder(),
new FragmentSpreadBuilder(),
new InlineFragmentBuilder(),
new IntBuilder(),
new ListBuilder(),
new ListTypeBuilder(),
new NameBuilder(),
new NamedTypeBuilder(),
new NonNullTypeBuilder(),
new NullBuilder(),
new ObjectBuilder(),
new ObjectFieldBuilder(),
new OperationDefinitionBuilder(),
new SelectionSetBuilder(),
new StringBuilder(),
new VariableBuilder(),
new VariableDefinitionBuilder(),
];

$readers = [
new AmpReader(),
new AtReader(),
new BangReader(),
new BlockStringReader(),
new BraceReader(),
new BracketReader(),
new ColonReader(),
new CommentReader(),
new DollarReader(),
new EqualsReader(),
new NameReader(),
new NumberReader(),
new ParenthesisReader(),
new PipeReader(),
new SpreadReader(),
new StringReader(),
];

$this->parser = new ASTParser($builders, $readers);
}
}
102 changes: 2 additions & 100 deletions tests/Functional/Language/ParserTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,114 +3,16 @@
namespace Digia\GraphQL\Test\Functional\Language\AST;

use Digia\GraphQL\Error\SyntaxError;
use Digia\GraphQL\Language\AST\Builder\ArgumentBuilder;
use Digia\GraphQL\Language\AST\Builder\BooleanBuilder;
use Digia\GraphQL\Language\AST\Builder\DirectiveBuilder;
use Digia\GraphQL\Language\AST\Builder\DocumentBuilder;
use Digia\GraphQL\Language\AST\Builder\EnumBuilder;
use Digia\GraphQL\Language\AST\Builder\FieldBuilder;
use Digia\GraphQL\Language\AST\Builder\FloatBuilder;
use Digia\GraphQL\Language\AST\Builder\FragmentDefinitionBuilder;
use Digia\GraphQL\Language\AST\Builder\FragmentSpreadBuilder;
use Digia\GraphQL\Language\AST\Builder\InlineFragmentBuilder;
use Digia\GraphQL\Language\AST\Builder\IntBuilder;
use Digia\GraphQL\Language\AST\Builder\ListBuilder;
use Digia\GraphQL\Language\AST\Builder\ListTypeBuilder;
use Digia\GraphQL\Language\AST\Builder\NameBuilder;
use Digia\GraphQL\Language\AST\Builder\NamedTypeBuilder;
use Digia\GraphQL\Language\AST\Builder\NonNullTypeBuilder;
use Digia\GraphQL\Language\AST\Builder\NullBuilder;
use Digia\GraphQL\Language\AST\Builder\ObjectBuilder;
use Digia\GraphQL\Language\AST\Builder\ObjectFieldBuilder;
use Digia\GraphQL\Language\AST\Builder\OperationDefinitionBuilder;
use Digia\GraphQL\Language\AST\Builder\SelectionSetBuilder;
use Digia\GraphQL\Language\AST\Builder\StringBuilder;
use Digia\GraphQL\Language\AST\Builder\VariableBuilder;
use Digia\GraphQL\Language\AST\Builder\VariableDefinitionBuilder;
use Digia\GraphQL\Language\AST\Node\DocumentNode;
use Digia\GraphQL\Language\AST\Node\NamedTypeNode;
use Digia\GraphQL\Language\AST\Node\NullValueNode;
use Digia\GraphQL\Language\AST\NodeKindEnum;
use Digia\GraphQL\Language\ASTParser;
use Digia\GraphQL\Language\Contract\ParserInterface;
use Digia\GraphQL\Language\Reader\AmpReader;
use Digia\GraphQL\Language\Reader\AtReader;
use Digia\GraphQL\Language\Reader\BangReader;
use Digia\GraphQL\Language\Reader\BlockStringReader;
use Digia\GraphQL\Language\Reader\BraceReader;
use Digia\GraphQL\Language\Reader\BracketReader;
use Digia\GraphQL\Language\Reader\ColonReader;
use Digia\GraphQL\Language\Reader\CommentReader;
use Digia\GraphQL\Language\Reader\DollarReader;
use Digia\GraphQL\Language\Reader\EqualsReader;
use Digia\GraphQL\Language\Reader\NameReader;
use Digia\GraphQL\Language\Reader\NumberReader;
use Digia\GraphQL\Language\Reader\ParenthesisReader;
use Digia\GraphQL\Language\Reader\PipeReader;
use Digia\GraphQL\Language\Reader\SpreadReader;
use Digia\GraphQL\Language\Reader\StringReader;
use Digia\GraphQL\Language\Source;
use Digia\GraphQL\Test\TestCase;
use Digia\GraphQL\Test\Functional\Language\AbstractParserTest;

class ParserTest extends TestCase
class ParserTest extends AbstractParserTest
{

/**
* @var ParserInterface
*/
protected $parser;

public function setUp()
{
$builders = [
new ArgumentBuilder(),
new BooleanBuilder(),
new DirectiveBuilder(),
new DocumentBuilder(),
new EnumBuilder(),
new FieldBuilder(),
new FloatBuilder(),
new FragmentDefinitionBuilder(),
new FragmentSpreadBuilder(),
new InlineFragmentBuilder(),
new IntBuilder(),
new ListBuilder(),
new ListTypeBuilder(),
new NameBuilder(),
new NamedTypeBuilder(),
new NonNullTypeBuilder(),
new NullBuilder(),
new ObjectBuilder(),
new ObjectFieldBuilder(),
new OperationDefinitionBuilder(),
new SelectionSetBuilder(),
new StringBuilder(),
new VariableBuilder(),
new VariableDefinitionBuilder(),
];

$readers = [
new AmpReader(),
new AtReader(),
new BangReader(),
new BlockStringReader(),
new BraceReader(),
new BracketReader(),
new ColonReader(),
new CommentReader(),
new DollarReader(),
new EqualsReader(),
new NameReader(),
new NumberReader(),
new ParenthesisReader(),
new PipeReader(),
new SpreadReader(),
new StringReader(),
];

$this->parser = new ASTParser($builders, $readers);
}

/**
* @throws \Digia\GraphQL\Error\GraphQLError
* @throws \Exception
Expand Down
14 changes: 14 additions & 0 deletions tests/Functional/Language/SchemaParserTest.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?php
/**
* Created by PhpStorm.
* User: chris
* Date: 24/02/2018
* Time: 21.11
*/

namespace Digia\GraphQL\Test\Functional\Language;

class SchemaParserTest
{

}

0 comments on commit 4148f43

Please sign in to comment.