diff --git a/src/WordPress/Blueprints/Resources/Resolver/FilesystemResourceResolver.php b/src/WordPress/Blueprints/Resources/Resolver/FilesystemResourceResolver.php index db52ca3b..ce917d2a 100644 --- a/src/WordPress/Blueprints/Resources/Resolver/FilesystemResourceResolver.php +++ b/src/WordPress/Blueprints/Resources/Resolver/FilesystemResourceResolver.php @@ -8,9 +8,9 @@ class FilesystemResourceResolver implements ResourceResolverInterface { - public function parseUrl( string $url ): ResourceDefinitionInterface|false { + public function parseUrl( string $url ): ?ResourceDefinitionInterface { if ( ! str_starts_with( $url, 'file://' ) ) { - return false; + return null; } return ( new FilesystemResource() )->setPath( $url ); @@ -24,12 +24,12 @@ public function supports( ResourceDefinitionInterface $resource ): bool { return $resource instanceof FilesystemResource; } - public function stream( ResourceDefinitionInterface $resource, Tracker $progressTracker ) { + public function stream( ResourceDefinitionInterface $resource, Tracker $progress_tracker ) { if ( ! $this->supports( $resource ) ) { throw new \InvalidArgumentException( 'Resource ' . get_class( $resource ) . ' unsupported' ); } - $progressTracker->finish(); + $progress_tracker->finish(); /** @var $resource FilesystemResource */ return fopen( $resource->path, 'r' ); diff --git a/src/WordPress/Blueprints/Resources/Resolver/InlineResourceResolver.php b/src/WordPress/Blueprints/Resources/Resolver/InlineResourceResolver.php index da66b2ef..034c887d 100644 --- a/src/WordPress/Blueprints/Resources/Resolver/InlineResourceResolver.php +++ b/src/WordPress/Blueprints/Resources/Resolver/InlineResourceResolver.php @@ -9,10 +9,10 @@ class InlineResourceResolver implements ResourceResolverInterface { - public function parseUrl( string $url ): ResourceDefinitionInterface|false { + public function parseUrl( string $url ): ?ResourceDefinitionInterface { // If url starts with "protocol://" then we assume it's not inline raw data if ( 0 !== preg_match( '#^[a-z_+]+://#', $url ) ) { - return false; + return null; } return ( new InlineResource() )->setContents( $url ); @@ -26,11 +26,11 @@ public function supports( ResourceDefinitionInterface $resource ): bool { return $resource instanceof InlineResource; } - public function stream( ResourceDefinitionInterface $resource, Tracker $progressTracker ) { + public function stream( ResourceDefinitionInterface $resource, Tracker $progress_tracker ) { if ( ! $this->supports( $resource ) ) { throw new \InvalidArgumentException( 'Resource ' . get_class( $resource ) . ' unsupported' ); } - $progressTracker->finish(); + $progress_tracker->finish(); /** @var $resource InlineResource */ $fp = fopen( "php://temp", 'r+' ); diff --git a/src/WordPress/Blueprints/Resources/Resolver/ResourceResolverCollection.php b/src/WordPress/Blueprints/Resources/Resolver/ResourceResolverCollection.php index 66cf9350..c45e4d10 100644 --- a/src/WordPress/Blueprints/Resources/Resolver/ResourceResolverCollection.php +++ b/src/WordPress/Blueprints/Resources/Resolver/ResourceResolverCollection.php @@ -2,35 +2,42 @@ namespace WordPress\Blueprints\Resources\Resolver; +use InvalidArgumentException; +use RuntimeException; use WordPress\Blueprints\Model\DataClass\ResourceDefinitionInterface; use WordPress\Blueprints\Progress\Tracker; class ResourceResolverCollection implements ResourceResolverInterface { + /** @var ResourceResolverInterface[] */ + protected array $resource_resolvers; + public function __construct( - /** @var ResourceResolverInterface[] */ - protected $ResourceResolvers + array $resource_resolvers ) { + $this->resource_resolvers = $resource_resolvers; } - static public function getResourceClass(): string { - throw new \RuntimeException( 'Not implemented' ); + public static function getResourceClass(): string { + throw new RuntimeException( 'Not implemented' ); } - public function parseUrl( string $url ): ResourceDefinitionInterface|false { - foreach ( $this->ResourceResolvers as $handler ) { - $resource = $handler->parseUrl( $url ); + public function parseUrl( string $url ): ?ResourceDefinitionInterface { + foreach ( $this->resource_resolvers as $resolver ) { + /** @var ResourceResolverInterface $resolver */ + $resource = $resolver->parseUrl( $url ); if ( $resource ) { return $resource; } } - return false; + return null; } public function supports( ResourceDefinitionInterface $resource ): bool { - foreach ( $this->ResourceResolvers as $handler ) { - if ( $handler->supports( $resource ) ) { + foreach ( $this->resource_resolvers as $resolver ) { + /** @var ResourceResolverInterface $resolver */ + if ( $resolver->supports( $resource ) ) { return true; } } @@ -39,13 +46,13 @@ public function supports( ResourceDefinitionInterface $resource ): bool { } public function stream( ResourceDefinitionInterface $resource, Tracker $progressTracker ) { - foreach ( $this->ResourceResolvers as $handler ) { - if ( $handler->supports( $resource ) ) { - return $handler->stream( $resource, $progressTracker ); + foreach ( $this->resource_resolvers as $resolver ) { + /** @var ResourceResolverInterface $resolver */ + if ( $resolver->supports( $resource ) ) { + return $resolver->stream( $resource, $progressTracker ); } } - throw new \InvalidArgumentException( 'Resource ' . get_class( $resource ) . ' unsupported' ); + throw new InvalidArgumentException( 'Resource ' . get_class( $resource ) . ' unsupported' ); } - } diff --git a/src/WordPress/Blueprints/Resources/Resolver/ResourceResolverInterface.php b/src/WordPress/Blueprints/Resources/Resolver/ResourceResolverInterface.php index beef70d3..6fc823fd 100644 --- a/src/WordPress/Blueprints/Resources/Resolver/ResourceResolverInterface.php +++ b/src/WordPress/Blueprints/Resources/Resolver/ResourceResolverInterface.php @@ -6,11 +6,11 @@ use WordPress\Blueprints\Progress\Tracker; interface ResourceResolverInterface { - public function parseUrl( string $url ): ResourceDefinitionInterface|false; + public function parseUrl( string $url ): ?ResourceDefinitionInterface; public function supports( ResourceDefinitionInterface $resource ): bool; static public function getResourceClass(): string; - public function stream( ResourceDefinitionInterface $resource, Tracker $progressTracker ); + public function stream( ResourceDefinitionInterface $resource, Tracker $progress_tracker ); } diff --git a/src/WordPress/Blueprints/Resources/Resolver/UrlResourceResolver.php b/src/WordPress/Blueprints/Resources/Resolver/UrlResourceResolver.php index 6acb2ce4..d7c6cf71 100644 --- a/src/WordPress/Blueprints/Resources/Resolver/UrlResourceResolver.php +++ b/src/WordPress/Blueprints/Resources/Resolver/UrlResourceResolver.php @@ -2,7 +2,7 @@ namespace WordPress\Blueprints\Resources\Resolver; -use WordPress\Blueprints\Model\Builder\UrlResourceBuilder; +use InvalidArgumentException; use WordPress\Blueprints\Model\DataClass\ResourceDefinitionInterface; use WordPress\Blueprints\Model\DataClass\UrlResource; use WordPress\Blueprints\Progress\Tracker; @@ -11,19 +11,22 @@ class UrlResourceResolver implements ResourceResolverInterface { - public function __construct( protected DataSourceInterface $dataSource ) { + protected DataSourceInterface $data_source; + + public function __construct( DataSourceInterface $data_source ) { + $this->data_source = $data_source; } - public function parseUrl( string $url ): ResourceDefinitionInterface|false { + public function parseUrl( string $url ): ?ResourceDefinitionInterface { if ( ! str_starts_with( $url, 'http://' ) && ! str_starts_with( $url, 'https://' ) ) { - return false; + return null; } return ( new UrlResource() )->setUrl( $url ); } - static public function getResourceClass(): string { + public static function getResourceClass(): string { return UrlResource::class; } @@ -31,25 +34,26 @@ public function supports( ResourceDefinitionInterface $resource ): bool { return $resource instanceof UrlResource; } - public function stream( ResourceDefinitionInterface $resource, Tracker $progressTracker ) { + public function stream( ResourceDefinitionInterface $resource, Tracker $progress_tracker ) { if ( ! $this->supports( $resource ) ) { - throw new \InvalidArgumentException( 'Resource ' . get_class( $resource ) . ' unsupported' ); + throw new InvalidArgumentException( 'Resource ' . get_class( $resource ) . ' unsupported' ); } - $this->dataSource->events->addListener( DataSourceProgressEvent::class, - function ( DataSourceProgressEvent $progress ) use ( $progressTracker, $resource ) { + $this->data_source->events->addListener( + DataSourceProgressEvent::class, + function ( DataSourceProgressEvent $progress ) use ( $progress_tracker, $resource ) { if ( $resource->url === $progress->url ) { // If we don't have totalBytes, we assume 5MB $totalBytes = $progress->totalBytes ?: 5 * 1024 * 1024; - $progressTracker->set( + $progress_tracker->set( 100 * $progress->downloadedBytes / $totalBytes ); } - } ); + } + ); /** @var $resource UrlResource */ - return $this->dataSource->stream( $resource->url ); + return $this->data_source->stream( $resource->url ); } - } diff --git a/src/WordPress/Blueprints/Resources/ResourceManager.php b/src/WordPress/Blueprints/Resources/ResourceManager.php index 5f9966bb..13c7afd1 100644 --- a/src/WordPress/Blueprints/Resources/ResourceManager.php +++ b/src/WordPress/Blueprints/Resources/ResourceManager.php @@ -4,17 +4,18 @@ use Symfony\Component\Filesystem\Filesystem; use WordPress\Blueprints\Compile\CompiledResource; -use WordPress\Blueprints\Model\DataClass\ResourceDefinitionInterface; -use WordPress\Blueprints\Resource\Resolver\ResourceResolverInterface; +use WordPress\Blueprints\Resources\Resolver\ResourceResolverCollection; class ResourceManager { protected Filesystem $fs; protected ResourceMap $map; + protected ResourceResolverCollection $resource_resolvers; public function __construct( - protected ResourceResolverInterface $resourceResolver + ResourceResolverCollection $resource_resolvers ) { + $this->resource_resolvers = $resource_resolvers; $this->fs = new Filesystem(); $this->map = new ResourceMap(); } @@ -22,7 +23,8 @@ public function __construct( public function enqueue( array $compiledResources ) { foreach ( $compiledResources as $compiled ) { /** @var CompiledResource $compiled */ - $this->map[ $compiled->declaration ] = $this->resourceResolver->stream( + + $this->map[ $compiled->declaration ] = $this->resource_resolvers->stream( $compiled->resource, $compiled->progressTracker ); diff --git a/src/WordPress/Blueprints/Runner/Blueprint/BlueprintRunner.php b/src/WordPress/Blueprints/Runner/Blueprint/BlueprintRunner.php index 9690395d..bdd2532d 100644 --- a/src/WordPress/Blueprints/Runner/Blueprint/BlueprintRunner.php +++ b/src/WordPress/Blueprints/Runner/Blueprint/BlueprintRunner.php @@ -7,17 +7,20 @@ use WordPress\Blueprints\Compile\CompiledBlueprint; use WordPress\Blueprints\Compile\CompiledStep; use WordPress\Blueprints\Compile\StepSuccess; -use WordPress\Blueprints\Progress\Tracker; use WordPress\Blueprints\Runtime\RuntimeInterface; class BlueprintRunner { - public readonly EventDispatcher $events; + public EventDispatcher $events; + protected RuntimeInterface $runtime; + protected $resourceManagerFactory; public function __construct( - protected RuntimeInterface $runtime, - protected $resourceManagerFactory, + RuntimeInterface $runtime, + $resourceManagerFactory ) { + $this->resourceManagerFactory = $resourceManagerFactory; + $this->runtime = $runtime; $this->events = new EventDispatcher(); } diff --git a/src/WordPress/Blueprints/Runner/Step/BaseStepRunner.php b/src/WordPress/Blueprints/Runner/Step/BaseStepRunner.php index 500a684b..908ddf84 100644 --- a/src/WordPress/Blueprints/Runner/Step/BaseStepRunner.php +++ b/src/WordPress/Blueprints/Runner/Step/BaseStepRunner.php @@ -31,7 +31,7 @@ protected function getRuntime(): RuntimeInterface return $this->runtime; } - protected function getDefaultCaption($input): ?string + public function getDefaultCaption($input): ?string { return null; }