DefinitionParser::parse()   A
last analyzed

Complexity

Conditions 3
Paths 2

Size

Total Lines 32

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 32
rs 9.408
c 0
b 0
f 0
cc 3
nc 2
nop 1
1
<?php
2
3
namespace Spatie\SchemaOrg\Generator\Parser;
4
5
use Spatie\SchemaOrg\Generator\Definitions;
6
use Spatie\SchemaOrg\Generator\Parser\Tasks\ParseConstant;
7
use Spatie\SchemaOrg\Generator\Parser\Tasks\ParseProperty;
8
use Spatie\SchemaOrg\Generator\Parser\Tasks\ParseType;
9
use Spatie\SchemaOrg\Generator\TypeCollection;
10
use Symfony\Component\DomCrawler\Crawler;
11
12
class DefinitionParser
13
{
14
    public function parse(Definitions $definitions): TypeCollection
15
    {
16
        $types = array_filter($definitions
17
            ->query('[typeof="rdfs:Class"]')
18
            ->each(function (Crawler $crawler) {
19
                return call_user_func(ParseType::fromCrawler($crawler));
20
            }));
21
22
        $properties = array_filter($definitions
23
            ->query('[typeof="rdf:Property"]')
24
            ->each(function (Crawler $crawler) {
25
                return call_user_func(ParseProperty::fromCrawler($crawler));
26
            }));
27
28
        $constants = [];
29
30
        foreach ($types as $type) {
31
            $constants = array_merge($constants, array_filter($definitions
32
                ->query('[typeof="'.$type->resource.'"]')
33
                ->each(function (Crawler $crawler) use ($type) {
34
                    $constant = call_user_func(ParseConstant::fromCrawler($crawler));
35
36
                    if (! is_null($constant)) {
37
                        $constant->type = $type->name;
38
                    }
39
40
                    return $constant;
41
                })));
42
        }
43
44
        return new TypeCollection($types, $properties, $constants);
45
    }
46
}
47