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

Decouple publications package #827

Merged
merged 50 commits into from
Jan 12, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
7efde93
Update deprecation message
caendesilva Jan 11, 2023
bbdcef5
Replace fixture from deprecated testing method usage with generated type
caendesilva Jan 11, 2023
08d42c4
Merge branch 'publications-feature' into decouple-publications-package
caendesilva Jan 11, 2023
8aff23b
Replace deprecated test method with local helper
caendesilva Jan 11, 2023
496cdf1
Save new object instead of copying deprecated fixture
caendesilva Jan 11, 2023
ad518f0
Rename local testing helper method
caendesilva Jan 11, 2023
94f94d2
Clean up test fixture handling
caendesilva Jan 11, 2023
f74e08d
Add deprecated attribute
caendesilva Jan 11, 2023
59ee01c
Replace deprecated method usage with successor
caendesilva Jan 11, 2023
846ccf6
Remove schema disk write for test that doesn't need it
caendesilva Jan 11, 2023
dc2487a
Create new object instead of using deprecated fixture
caendesilva Jan 11, 2023
5e8a2da
Extract method
caendesilva Jan 11, 2023
fbb991f
Inline test fixture
caendesilva Jan 11, 2023
18a8c8e
Apply fixes from StyleCI
StyleCIBot Jan 11, 2023
97ab597
Remove now unused internal deprecated test helper setupTestPublication
caendesilva Jan 11, 2023
7c44ff5
Merge branch 'decouple-publications-package' of github.com:hydephp/de…
caendesilva Jan 11, 2023
dcf4b8d
Apply fixes from StyleCI
StyleCIBot Jan 11, 2023
9dc1590
Merge branch 'create-extension-framework' into decouple-publications-…
caendesilva Jan 11, 2023
cf9083e
Create PublicationsExtension.php
caendesilva Jan 11, 2023
bd2b763
Register the publications extension
caendesilva Jan 11, 2023
939b070
Move publication page discovery logic to extension handler
caendesilva Jan 11, 2023
cdc128f
Apply fixes from StyleCI
StyleCIBot Jan 11, 2023
fbef5f8
Create PublicationDiscoveryTest.php
caendesilva Jan 11, 2023
1738417
Move publication page discovery to its own test
caendesilva Jan 11, 2023
5ac8a06
Apply fixes from StyleCI
StyleCIBot Jan 11, 2023
e5a0a87
Move test to package suite
caendesilva Jan 11, 2023
7bd7793
Inline parsing logic for publication pages
caendesilva Jan 11, 2023
abfaea8
Apply fixes from StyleCI
StyleCIBot Jan 11, 2023
8c26e01
Merge branch 'publications-feature' into decouple-publications-package
caendesilva Jan 11, 2023
94bc54c
Merge branch 'create-extension-framework' into decouple-publications-…
caendesilva Jan 11, 2023
26631a7
Clean up test by using helper methods
caendesilva Jan 11, 2023
9b024ff
Change service helper to parse via model instead of action
caendesilva Jan 11, 2023
62fe080
Apply fixes from StyleCI
StyleCIBot Jan 11, 2023
57de348
Move and decouple unit test
caendesilva Jan 11, 2023
7562283
Move internal ValidatingCommand to publications package
caendesilva Jan 11, 2023
c329ea0
Apply fixes from StyleCI
StyleCIBot Jan 11, 2023
b28f071
Move test for moved provider
caendesilva Jan 11, 2023
8af5d61
Move test for moved rule
caendesilva Jan 11, 2023
0f0a576
Move class into appropriate actions namespace
caendesilva Jan 11, 2023
968f770
Return the page classes provided by the extension
caendesilva Jan 11, 2023
da34398
Merge branch 'publications-feature' into decouple-publications-package
caendesilva Jan 11, 2023
743e982
Update extension namespace
caendesilva Jan 11, 2023
39875d8
Reset the kernel after tests
caendesilva Jan 11, 2023
0368f54
Fix up namespaces
caendesilva Jan 11, 2023
ee885ed
Apply fixes from StyleCI
StyleCIBot Jan 11, 2023
ea523c4
Fix namespace
caendesilva Jan 11, 2023
69c5550
Fix covers annotation
caendesilva Jan 12, 2023
9e3403b
Change min randomization value of seeder actions to 1
caendesilva Jan 12, 2023
0f55846
Add missing parameter type
caendesilva Jan 12, 2023
c4edeaa
Add missing paginator test
caendesilva Jan 12, 2023
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
53 changes: 0 additions & 53 deletions packages/framework/src/Foundation/PageCollection.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,6 @@
use Hyde\Pages\HtmlPage;
use Hyde\Pages\MarkdownPage;
use Hyde\Pages\MarkdownPost;
use Hyde\Pages\VirtualPage;
use Hyde\Publications\Models\PublicationListPage;
use Hyde\Publications\Models\PublicationPage;
use Hyde\Publications\Models\PublicationType;
use Hyde\Publications\PublicationService;
use Illuminate\Support\Collection;

/**
Expand Down Expand Up @@ -89,10 +84,6 @@ protected function runDiscovery(): self
$this->discoverPagesFor(DocumentationPage::class);
}

if (Features::hasPublicationPages()) {
$this->discoverPublicationPages();
}

foreach ($this->kernel->getRegisteredPageClasses() as $pageClass) {
$this->discoverPagesFor($pageClass);
}
Expand Down Expand Up @@ -127,48 +118,4 @@ protected function parsePagesFor(string $pageClass): Collection

return $collection;
}

protected function discoverPublicationPages(): void
{
PublicationService::getPublicationTypes()->each(function (PublicationType $type): void {
$this->discoverPublicationPagesForType($type);
$this->generatePublicationListingPageForType($type);
});
}

protected function discoverPublicationPagesForType(PublicationType $type): void
{
PublicationService::getPublicationsForPubType($type)->each(function (PublicationPage $publication): void {
$this->addPage($publication);
});
}

protected function generatePublicationListingPageForType(PublicationType $type): void
{
$page = new PublicationListPage($type);
$this->put($page->getSourcePath(), $page);

if ($type->usesPagination()) {
$this->generatePublicationPaginatedListingPagesForType($type);
}
}

/**
* @deprecated This method will be removed before merging into master.
*
* @internal This method will be removed before merging into master.
*/
protected function generatePublicationPaginatedListingPagesForType(PublicationType $type): void
{
$paginator = $type->getPaginator();

foreach (range(1, $paginator->totalPages()) as $page) {
$paginator->setCurrentPage($page);
$listingPage = new VirtualPage("{$type->getDirectory()}/page-$page", [
'publicationType' => $type, 'paginatorPage' => $page,
'title' => $type->name.' - Page '.$page,
], view: $type->listTemplate);
$this->put($listingPage->getSourcePath(), $listingPage);
}
}
}
22 changes: 0 additions & 22 deletions packages/framework/src/Framework/Actions/SourceFileParser.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,6 @@
use Hyde\Pages\BladePage;
use Hyde\Pages\Concerns\BaseMarkdownPage;
use Hyde\Pages\Concerns\HydePage;
use Hyde\Publications\Models\PublicationPage;
use Hyde\Publications\Models\PublicationType;
use Illuminate\Support\Str;

/**
* Parses a source file and returns a new page model instance for it.
Expand Down Expand Up @@ -46,32 +43,13 @@ protected function constructPage(string $pageClass): HydePage|BladePage|BaseMark
return $this->parseBladePage();
}

if ($pageClass === PublicationPage::class) {
return $this->parsePublicationPage();
}

if (is_subclass_of($pageClass, BaseMarkdownPage::class)) {
return $this->parseMarkdownPage($pageClass);
}

return new $pageClass($this->identifier);
}

protected function parsePublicationPage(): PublicationPage
{
/** @var \Hyde\Pages\Concerns\BaseMarkdownPage $pageClass */
$document = MarkdownFileParser::parse(
PublicationPage::sourcePath($this->identifier)
);

return new PublicationPage(
identifier: $this->identifier,
matter: $document->matter,
markdown: $document->markdown,
type: PublicationType::get(Str::before($this->identifier, '/'))
);
}

protected function parseBladePage(): BladePage
{
return new BladePage(
Expand Down
4 changes: 4 additions & 0 deletions packages/framework/tests/Feature/HydeExtensionFeatureTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,11 @@ public function testBaseClassDiscoveryHandlers()

public function testCanRegisterNewExtension()
{
HydeKernel::setInstance(new HydeKernel());

$this->kernel = HydeKernel::getInstance();
$this->kernel->registerExtension(HydeTestExtension::class);

$this->assertSame([HydeTestExtension::class], $this->kernel->getRegisteredExtensions());
}

Expand Down
43 changes: 0 additions & 43 deletions packages/framework/tests/Feature/PageCollectionTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

namespace Hyde\Framework\Testing\Feature;

use function copy;
use Hyde\Foundation\HydeKernel;
use Hyde\Foundation\PageCollection;
use Hyde\Hyde;
Expand All @@ -13,8 +12,6 @@
use Hyde\Pages\HtmlPage;
use Hyde\Pages\MarkdownPage;
use Hyde\Pages\MarkdownPost;
use Hyde\Publications\Models\PublicationListPage;
use Hyde\Publications\Models\PublicationPage;
use Hyde\Testing\TestCase;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\File;
Expand Down Expand Up @@ -183,44 +180,4 @@ public function test_pages_with_custom_source_directories_are_discovered_properl

File::deleteDirectory(Hyde::path('.source'));
}

public function test_publication_pages_are_discovered()
{
mkdir(Hyde::path('publication'));
$this->createPublication();

$collection = PageCollection::boot(Hyde::getInstance())->getPages();
$this->assertCount(4, $collection); // Default pages + publication index + publication page
$this->assertInstanceOf(PublicationPage::class, $collection->get('publication/foo.md'));

File::deleteDirectory(Hyde::path('publication'));
}

public function test_listing_pages_for_publications_are_discovered()
{
mkdir(Hyde::path('publication'));
$this->createPublication();

$this->assertInstanceOf(
PublicationListPage::class,
PageCollection::boot(Hyde::getInstance())->getPage('publication/index')
);

File::deleteDirectory(Hyde::path('publication'));
}

protected function createPublication(): void
{
copy(Hyde::path('tests/fixtures/test-publication-schema.json'), Hyde::path('publication/schema.json'));
file_put_contents(Hyde::path('publication/foo.md'),
'---
__canonical: canonical
__createdAt: 2022-11-16 11:32:52
foo: bar
---

Hello World!
'
);
}
}
16 changes: 16 additions & 0 deletions packages/framework/tests/Feature/PaginatorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -273,6 +273,22 @@ public function testGetPageLinksWithBaseRoute()
);
}

public function testFirstItemNumberOnPage()
{
$paginator = $this->makePaginator();
$this->assertSame(1, $paginator->firstItemNumberOnPage());
$this->assertSame(11, $paginator->setCurrentPage(2)->firstItemNumberOnPage());
$this->assertSame(21, $paginator->setCurrentPage(3)->firstItemNumberOnPage());
$this->assertSame(31, $paginator->setCurrentPage(4)->firstItemNumberOnPage());
$this->assertSame(41, $paginator->setCurrentPage(5)->firstItemNumberOnPage());

$paginator = $this->makePaginator(1, 100, 25);
$this->assertSame(1, $paginator->firstItemNumberOnPage());
$this->assertSame(26, $paginator->setCurrentPage(2)->firstItemNumberOnPage());
$this->assertSame(51, $paginator->setCurrentPage(3)->firstItemNumberOnPage());
$this->assertSame(76, $paginator->setCurrentPage(4)->firstItemNumberOnPage());
}

protected function makePaginator(int $start = 1, int $end = 50, int $pageSize = 10): Paginator
{
return new Paginator(range($start, $end), $pageSize);
Expand Down
21 changes: 0 additions & 21 deletions packages/framework/tests/Feature/SourceFileParserTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,12 @@

namespace Hyde\Framework\Testing\Feature;

use Hyde\Facades\Filesystem;
use Hyde\Framework\Actions\SourceFileParser;
use Hyde\Hyde;
use Hyde\Pages\BladePage;
use Hyde\Pages\DocumentationPage;
use Hyde\Pages\HtmlPage;
use Hyde\Pages\MarkdownPage;
use Hyde\Pages\MarkdownPost;
use Hyde\Publications\Models\PublicationPage;
use Hyde\Testing\TestCase;

/**
Expand Down Expand Up @@ -77,24 +74,6 @@ public function test_html_page_parser()
$this->assertEquals('<h1>Foo Bar</h1>', $page->contents());
}

public function test_publication_parser()
{
mkdir(Hyde::path('test-publication'));
copy(Hyde::path('tests/fixtures/test-publication-schema.json'), Hyde::path('test-publication/schema.json'));
copy(Hyde::path('tests/fixtures/test-publication.md'), Hyde::path('test-publication/foo.md'));

$parser = new SourceFileParser(PublicationPage::class, 'test-publication/foo');
$page = $parser->get();
$this->assertInstanceOf(PublicationPage::class, $page);
$this->assertEquals('test-publication/foo', $page->identifier);
$this->assertEquals('## Write something awesome.', $page->markdown);
$this->assertEquals('My Title', $page->title);
$this->assertEquals('My Title', $page->matter->get('title'));
$this->assertTrue($page->matter->has('__createdAt'));

Filesystem::deleteDirectory('test-publication');
}

public function test_parsed_page_is_run_through_dynamic_constructor()
{
$this->markdown('_pages/foo.md', '# Foo Bar', ['title' => 'Foo Bar Baz']);
Expand Down
6 changes: 3 additions & 3 deletions packages/publications/src/Actions/SeedsPublicationFiles.php
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ protected function getDateTimeValue(): string
));
}

protected function getTextValue($lines): string
protected function getTextValue(int $lines): string
{
$value = '';

Expand All @@ -97,7 +97,7 @@ protected function generateFieldData(PublicationFieldDefinition $field): string|
'float' => ((mt_rand() / mt_getrandmax()) * (200000)) + -100000,
'image' => 'https://picsum.photos/id/'.rand(1, 1000).'/400/400',
'integer' => rand(-100000, 100000),
'string' => substr($this->fakeSentence(10), 0, rand(0, 255)),
'string' => substr($this->fakeSentence(10), 0, rand(1, 255)),
'tag' => $this->getTags($field->tagGroup),
'text' => $this->getTextValue(rand(3, 20)),
'url' => $this->fakeUrl(),
Expand Down Expand Up @@ -208,7 +208,7 @@ private function randomMarkdownLines(int $count): string
{
$lines = [];
for ($i = 0; $i < $count; $i++) {
$lines[] = $this->fakeSentence(rand(0, 15));
$lines[] = $this->fakeSentence(rand(1, 15));
}

return implode("\n", $lines);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@

declare(strict_types=1);

namespace Hyde\Publications;
namespace Hyde\Publications\Actions;

use function array_merge;
use function collect;
use Hyde\Publications\Models\PublicationFieldDefinition;
use Hyde\Publications\Models\PublicationType;
use Hyde\Publications\PublicationFieldTypes;
use Hyde\Publications\PublicationService;
use Illuminate\Contracts\Validation\Validator;
use function validator;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@

use Closure;
use Hyde\Console\Commands\Helpers\InputStreamHandler;
use Hyde\Console\Concerns\ValidatingCommand;
use Hyde\Publications\Actions\CreatesNewPublicationPage;
use Hyde\Publications\Models\PublicationFieldDefinition;
use Hyde\Publications\Models\PublicationFieldValue;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
namespace Hyde\Publications\Commands;

use Hyde\Console\Commands\Helpers\InputStreamHandler;
use Hyde\Console\Concerns\ValidatingCommand;
use Hyde\Framework\Services\DiscoveryService;
use Hyde\Hyde;
use Hyde\Publications\Models\PublicationTags;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@

use function array_keys;
use function count;
use Hyde\Console\Concerns\ValidatingCommand;
use Hyde\Hyde;
use Hyde\Publications\Actions\CreatesNewPublicationType;
use Hyde\Publications\Models\PublicationFieldDefinition;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

namespace Hyde\Publications\Commands;

use Hyde\Console\Concerns\ValidatingCommand;
use Hyde\Publications\Actions\SeedsPublicationFiles;
use Hyde\Publications\Models\PublicationType;
use Hyde\Publications\PublicationService;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,9 @@

use function count;
use Exception;
use Hyde\Console\Concerns\ValidatingCommand;
use Hyde\Publications\Actions\ValidatesPublicationField;
use Hyde\Publications\Models\PublicationFieldDefinition;
use Hyde\Publications\PublicationService;
use Hyde\Publications\ValidatesPublicationField;
use InvalidArgumentException;
use LaravelZero\Framework\Commands\Command;
use function str_repeat;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

declare(strict_types=1);

namespace Hyde\Console\Concerns;
namespace Hyde\Publications\Commands;

use function __;
use function array_merge;
Expand Down
22 changes: 22 additions & 0 deletions packages/publications/src/Models/PublicationPage.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,14 @@

namespace Hyde\Publications\Models;

use Hyde\Framework\Actions\MarkdownFileParser;
use Hyde\Framework\Concerns\ValidatesExistence;
use Hyde\Markdown\Models\FrontMatter;
use Hyde\Markdown\Models\Markdown;
use Hyde\Pages\Concerns;
use Hyde\Pages\Contracts\DynamicPage;
use Hyde\Publications\Actions\PublicationPageCompiler;
use Illuminate\Support\Str;
use function str_starts_with;

/**
Expand All @@ -19,6 +22,8 @@
*/
class PublicationPage extends Concerns\BaseMarkdownPage implements DynamicPage
{
use ValidatesExistence;

public PublicationType $type;

public static string $sourceDirectory = '';
Expand All @@ -42,6 +47,23 @@ public function compile(): string
return $this->renderComponent();
}

public static function parse(string $identifier): self
{
static::validateExistence(static::class, $identifier);

/** @var \Hyde\Pages\Concerns\BaseMarkdownPage $pageClass */
$document = MarkdownFileParser::parse(
PublicationPage::sourcePath($identifier)
);

return new PublicationPage(
identifier: $identifier,
matter: $document->matter,
markdown: $document->markdown,
type: PublicationType::get(Str::before($identifier, '/'))
);
}

protected function renderComponent(): string
{
return PublicationPageCompiler::call($this);
Expand Down
Loading