Select Git revision
FilesystemDefinitions.php
-
Bartek Jaskulski authored
Signed-off-by:
Bart Jaskulski <bjaskulski@protonmail.com>
Bartek Jaskulski authoredSigned-off-by:
Bart Jaskulski <bjaskulski@protonmail.com>
FilesystemDefinitions.php 1.25 KiB
<?php
declare( strict_types=1 );
namespace WPDesk\Init\Binding\Loader;
use WPDesk\Init\Binding\DefinitionFactory;
use WPDesk\Init\Util\Path;
use WPDesk\Init\Loader\PhpFileLoader;
class FilesystemDefinitions implements BindingDefinitions {
/** @var Path */
private $path;
/** @var PhpFileLoader */
private $loader;
/** @var DefinitionFactory */
private $def_factory;
public function __construct( $path, ?PhpFileLoader $loader = null, ?DefinitionFactory $def_factory = null ) {
$this->path = new Path( (string) $path );
$this->loader = $loader ?? new PhpFileLoader();
$this->def_factory = $def_factory ?? new DefinitionFactory();
}
public function load(): iterable {
if ( $this->path->is_directory() ) {
foreach ( $this->path->read_directory() as $filename ) {
yield from $this->load_from_file( $filename );
}
} else {
yield from $this->load_from_file( $this->path );
}
}
private function load_from_file( Path $filename ) {
if ( ! $filename->is_file() ) {
return;
}
$hooks = $this->loader->load( (string) $filename );
if ( $filename->get_basename() !== 'index.php' ) {
$hooks = [ $filename->get_filename_without_extension() => $hooks ];
}
yield from (new ArrayBindingLoader( $hooks ) )->load();
}
}