Code Duplication    Length = 78-78 lines in 2 locations

source/Spiral/ODM/Schemas/SchemaLocator.php 1 location

@@ 20-97 (lines=78) @@
17
 * Provides ability to automatically locate schemas in a project. Can be user redefined in order to
18
 * automatically include custom classes.
19
 */
20
class SchemaLocator
21
{
22
    /**
23
     * Container is used for lazy resolution for ClassesInterface.
24
     *
25
     * @var ContainerInterface
26
     */
27
    protected $container;
28
29
    /**
30
     * @param ContainerInterface $container
31
     */
32
    public function __construct(ContainerInterface $container)
33
    {
34
        $this->container = $container;
35
    }
36
37
    /**
38
     * Locate all available document schemas in a project.
39
     *
40
     * @return SchemaInterface[]
41
     */
42
    public function locateSchemas(): array
43
    {
44
        if (!$this->container->has(ClassesInterface::class)) {
45
            return [];
46
        }
47
48
        /**
49
         * @var ClassesInterface $classes
50
         */
51
        $classes = $this->container->get(ClassesInterface::class);
52
53
        $schemas = [];
54
        foreach ($classes->getClasses(DocumentEntity::class) as $class) {
55
            if ($class['abstract']) {
56
                continue;
57
            }
58
59
            $schemas[] = new DocumentSchema(
60
                new ReflectionEntity($class['name']),
61
                $this->container->get(MutatorsConfig::class)
62
            );
63
        }
64
65
        return $schemas;
66
    }
67
68
    /**
69
     * Locate all DocumentSources defined by user. Must return values in a form of
70
     * Document::class => Source::class.
71
     *
72
     * @return array
73
     */
74
    public function locateSources(): array
75
    {
76
        if (!$this->container->has(ClassesInterface::class)) {
77
            return [];
78
        }
79
80
        /**
81
         * @var ClassesInterface $classes
82
         */
83
        $classes = $this->container->get(ClassesInterface::class);
84
85
        $result = [];
86
        foreach ($classes->getClasses(DocumentSource::class) as $class) {
87
            $source = $class['name'];
88
            if ($class['abstract'] || empty($source::DOCUMENT)) {
89
                continue;
90
            }
91
92
            $result[$source::DOCUMENT] = $source;
93
        }
94
95
        return $result;
96
    }
97
}

source/Spiral/ORM/Schemas/SchemaLocator.php 1 location

@@ 20-97 (lines=78) @@
17
 * Provides ability to automatically locate schemas in a project. Can be user redefined in order to
18
 * automatically include custom classes.
19
 */
20
class SchemaLocator
21
{
22
    /**
23
     * Container is used for lazy resolution for ClassesInterface.
24
     *
25
     * @var ContainerInterface
26
     */
27
    protected $container;
28
29
    /**
30
     * @param ContainerInterface $container
31
     */
32
    public function __construct(ContainerInterface $container)
33
    {
34
        $this->container = $container;
35
    }
36
37
    /**
38
     * Locate all available document schemas in a project.
39
     *
40
     * @return SchemaInterface[]
41
     */
42
    public function locateSchemas(): array
43
    {
44
        if (!$this->container->has(ClassesInterface::class)) {
45
            return [];
46
        }
47
48
        /**
49
         * @var ClassesInterface $classes
50
         */
51
        $classes = $this->container->get(ClassesInterface::class);
52
53
        $schemas = [];
54
        foreach ($classes->getClasses(Record::class) as $class) {
55
            if ($class['abstract']) {
56
                continue;
57
            }
58
59
            $schemas[] = new RecordSchema(
60
                new ReflectionEntity($class['name']),
61
                $this->container->get(MutatorsConfig::class)
62
            );
63
        }
64
65
        return $schemas;
66
    }
67
68
    /**
69
     * Locate all DocumentSources defined by user. Must return values in a form of
70
     * Document::class => Source::class.
71
     *
72
     * @return array
73
     */
74
    public function locateSources(): array
75
    {
76
        if (!$this->container->has(ClassesInterface::class)) {
77
            return [];
78
        }
79
80
        /**
81
         * @var ClassesInterface $classes
82
         */
83
        $classes = $this->container->get(ClassesInterface::class);
84
85
        $result = [];
86
        foreach ($classes->getClasses(RecordSource::class) as $class) {
87
            $source = $class['name'];
88
            if ($class['abstract'] || empty($source::RECORD)) {
89
                continue;
90
            }
91
92
            $result[$source::RECORD] = $source;
93
        }
94
95
        return $result;
96
    }
97
}