Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update the featured image factory to specify the file causing an exception #1409

Merged
merged 4 commits into from
Oct 28, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions RELEASE_NOTES.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ This serves two purposes:
- Updated the realtime compiler server configuration options in https://github.com/hydephp/develop/pull/1395 (backwards compatible)
- Updated the realtime compiler to generate the documentation search index each time it's requested in https://github.com/hydephp/develop/pull/1405 (fixes https://github.com/hydephp/develop/issues/1404)
- Updated the navigation menu generator to remove duplicates after running the sorting method in https://github.com/hydephp/develop/pull/1407 (fixes https://github.com/hydephp/develop/issues/1406)
- Updated the exception message caused by missing source option for featured images to include the path of the file that caused the error in https://github.com/hydephp/develop/pull/1409

### Deprecated
- for soon-to-be removed features.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,13 @@ class BlogPostDataFactory extends Concerns\PageDataFactory implements BlogPostSc
protected readonly ?PostAuthor $author;
protected readonly ?FeaturedImage $image;

private readonly string $filePath;

public function __construct(CoreDataObject $pageData)
{
$this->matter = $pageData->matter;
$this->markdown = $pageData->markdown;
$this->filePath = $pageData->sourcePath;

$this->description = $this->makeDescription();
$this->category = $this->makeCategory();
Expand Down Expand Up @@ -98,7 +101,7 @@ protected function makeAuthor(): ?PostAuthor
protected function makeImage(): ?FeaturedImage
{
if ($this->getMatter('image')) {
return FeaturedImageFactory::make($this->matter);
return FeaturedImageFactory::make($this->matter, $this->filePath);
}

return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ class FeaturedImageFactory extends Concerns\PageDataFactory implements FeaturedI

public function __construct(
private readonly FrontMatter $matter,
private readonly ?string $filePath = null,
) {
$this->source = $this->makeSource();
$this->altText = $this->getStringMatter('image.altText');
Expand Down Expand Up @@ -58,19 +59,17 @@ public function toArray(): array
];
}

public static function make(FrontMatter $matter): FeaturedImage
public static function make(FrontMatter $matter, ?string $filePath = null): FeaturedImage
{
return new FeaturedImage(...(new static($matter))->toArray());
return new FeaturedImage(...(new static($matter, $filePath))->toArray());
}

protected function makeSource(): string
{
$value = $this->getStringMatter('image') ?? $this->getStringMatter('image.source');

if (empty($value)) {
// Todo, we might want to add a note about which file caused the error.
// We could also check for these before calling the factory, and just ignore the image if it's not valid.
throw new RuntimeException('No featured image source was found');
throw new RuntimeException(sprintf('No featured image source was found in "%s"', $this->filePath ?? 'unknown file'));
}

if (FeaturedImage::isRemote($value)) {
Expand Down
Loading