Code Duplication    Length = 33-35 lines in 4 locations

src/Frontend/Builder/Definition/EnumBuilder.php 1 location

@@ 22-55 (lines=34) @@
19
/**
20
 * Class EnumBuilder
21
 */
22
class EnumBuilder extends DefinitionBuilder
23
{
24
    /**
25
     * @param Readable $file
26
     * @param RuleInterface|EnumDefinitionNode $ast
27
     * @return \Generator|mixed
28
     */
29
    public function build(Readable $file, RuleInterface $ast)
30
    {
31
        $enum = new TypeDefinition($ast->getFullName());
32
        $enum->in($file, $ast->getOffset());
33
34
        $enum->type = Type::ENUM;
35
        $enum->description = $ast->getDescription();
36
37
        yield from $this->loadEnumValues($ast, $enum);
38
39
        return $enum;
40
    }
41
42
    /**
43
     * @param EnumDefinitionNode $ast
44
     * @param TypeDefinition $enum
45
     * @return \Generator
46
     */
47
    protected function loadEnumValues(EnumDefinitionNode $ast, TypeDefinition $enum): \Generator
48
    {
49
        $enum->values = [];
50
51
        foreach ($ast->getEnumValueNodes() as $values) {
52
            $enum->values[] = yield $values;
53
        }
54
    }
55
}
56

src/Frontend/Builder/Definition/InputBuilder.php 1 location

@@ 22-55 (lines=34) @@
19
/**
20
 * Class InputBuilder
21
 */
22
class InputBuilder extends DefinitionBuilder
23
{
24
    /**
25
     * @param Readable $file
26
     * @param RuleInterface|InputDefinitionNode $ast
27
     * @return \Generator|mixed
28
     */
29
    public function build(Readable $file, RuleInterface $ast)
30
    {
31
        $input = new TypeDefinition($ast->getFullName());
32
        $input->in($file, $ast->getOffset());
33
34
        $input->type = Type::INPUT_OBJECT;
35
        $input->description = $ast->getDescription();
36
37
        yield from $this->loadInputFields($ast, $input);
38
39
        return $input;
40
    }
41
42
    /**
43
     * @param InputDefinitionNode $ast
44
     * @param TypeDefinition $input
45
     * @return \Generator
46
     */
47
    protected function loadInputFields(InputDefinitionNode $ast, TypeDefinition $input): \Generator
48
    {
49
        $input->fields = [];
50
51
        foreach ($ast->getInputFieldNodes() as $field) {
52
            $input->fields[] = yield $field;
53
        }
54
    }
55
}
56

src/Frontend/Builder/Definition/SchemaBuilder.php 1 location

@@ 24-58 (lines=35) @@
21
/**
22
 * Class SchemaBuilder
23
 */
24
class SchemaBuilder extends DefinitionBuilder
25
{
26
    /**
27
     * @param Readable $file
28
     * @param RuleInterface|SchemaDefinitionNode $ast
29
     * @return \Generator|mixed
30
     */
31
    public function build(Readable $file, RuleInterface $ast)
32
    {
33
        // TODO detach from reflection component
34
        $schema = new TypeDefinition($ast->getFullName() ?: SchemaDefinition::DEFAULT_SCHEMA_NAME);
35
        $schema->in($file, $ast->getOffset());
36
37
        $schema->type = Type::SCHEMA;
38
        $schema->description = $ast->getDescription();
39
40
        yield from $this->loadSchemaFields($ast, $schema);
41
42
        return $schema;
43
    }
44
45
    /**
46
     * @param SchemaDefinitionNode $ast
47
     * @param TypeDefinition $schema
48
     * @return \Generator
49
     */
50
    protected function loadSchemaFields(SchemaDefinitionNode $ast, TypeDefinition $schema): \Generator
51
    {
52
        $schema->fields = [];
53
54
        foreach ($ast->getSchemaFields() as $field) {
55
            $schema->fields[] = yield $field;
56
        }
57
    }
58
}
59

src/Frontend/Builder/Definition/UnionBuilder.php 1 location

@@ 23-55 (lines=33) @@
20
/**
21
 * Class UnionBuilder
22
 */
23
class UnionBuilder extends DefinitionBuilder
24
{
25
    /**
26
     * @param Readable $file
27
     * @param RuleInterface|UnionDefinitionNode $ast
28
     * @return \Generator|mixed
29
     */
30
    public function build(Readable $file, RuleInterface $ast)
31
    {
32
        $union = new TypeDefinition($ast->getFullName());
33
        $union->in($file, $ast->getOffset());
34
35
        $union->type = Type::UNION;
36
        $union->description = $ast->getDescription();
37
38
        $this->loadUnionDefinitions($ast, $union);
39
40
        return $union;
41
    }
42
43
    /**
44
     * @param UnionDefinitionNode $ast
45
     * @param TypeDefinition $union
46
     */
47
    protected function loadUnionDefinitions(UnionDefinitionNode $ast, TypeDefinition $union): void
48
    {
49
        $union->definitions = [];
50
51
        foreach ($ast->getUnionDefinitions() as $definition) {
52
            $union->definitions[] = $definition;
53
        }
54
    }
55
}
56