| @@ 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 | } |
|
| @@ 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 | } |
|