Skip to content
Snippets Groups Projects
Select Git revision
  • 5775f80f6f27d09545dbafe53bc6217f6a121673
  • main default protected
  • v0.10
  • 0.10.6
  • 0.10.5
  • 0.10.4
  • 0.10.3
  • 0.10.2
  • 0.10.1
  • 0.10.0
  • 0.9.1
  • 0.9.0
12 results

FilesystemDefinitions.php

Blame
  • 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();
    	}
    }