Skip to content

Commit a2f47e0

Browse files
improved feed building using service provider
1 parent 69ff038 commit a2f47e0

File tree

3 files changed

+14
-34
lines changed

3 files changed

+14
-34
lines changed

src/StaticBuilder.php

Lines changed: 6 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
use Librarian\ContentType;
99
use Librarian\Exception\ContentNotFoundException;
1010
use Librarian\Provider\ContentServiceProvider;
11+
use Librarian\Provider\FeedServiceProvider;
1112
use Librarian\Provider\TwigServiceProvider;
1213
use Minicli\App;
1314
use Minicli\Config;
@@ -23,13 +24,15 @@ class StaticBuilder implements ServiceInterface
2324
{
2425
public Config $siteConfig;
2526
public ContentServiceProvider $contentProvider;
27+
public FeedServiceProvider $feedProvider;
2628
public TwigServiceProvider $twigServiceProvider;
2729
public string $outputPath;
2830
public int $postsPerPage;
2931

3032
public function load(App $app): void
3133
{
3234
$this->contentProvider = $app->content;
35+
$this->feedProvider = $app->feed;
3336
$this->twigServiceProvider = $app->twig;
3437
$this->siteConfig = $app->config;
3538
$this->outputPath = $this->siteConfig->output_path;
@@ -204,37 +207,9 @@ public function getSinglePage(Content $content): string
204207

205208
public function buildRssFeed(): void
206209
{
207-
$feed = new Feed();
208-
$channel = new Channel();
209-
$channel
210-
->title($this->siteConfig->site_name)
211-
->description($this->siteConfig->site_description)
212-
->url($this->siteConfig->site_url)
213-
->feedUrl($this->siteConfig->site_url . '/feed.rss')
214-
->language('en-US')
215-
->copyright('Copyright ' . date('Y') . ', '. $this->siteConfig->site_name)
216-
->pubDate(strtotime(date('Y-m-d H:i:s')))
217-
->lastBuildDate(strtotime(date('Y-m-d H:i:s')))
218-
->ttl(60)
219-
->appendTo($feed);
220-
221-
$content_list = $this->contentProvider->fetchAll();
222-
223-
/** @var Content $content */
224-
foreach ($content_list as $content) {
225-
$item = new Item();
226-
$item
227-
->title($content->frontMatterGet('title') ?? $content->default_title)
228-
->description('<div>'.($content->frontMatterGet('description') ?? $content->description).'</div>')
229-
->contentEncoded('<div>'.($content->frontMatterGet('description') ?? '').'</div>')
230-
->url($this->siteConfig->site_url . '/' . $content->getLink())
231-
->author($this->siteConfig->site_author)
232-
->pubDate(strtotime($content->getDate()))
233-
->guid($this->siteConfig->site_url . '/' . $content->getLink(), true)
234-
->preferCdata(true) // By this, title and description become CDATA wrapped HTML.
235-
->appendTo($channel);
236-
}
210+
$feed = $this->feedProvider->buildFeed(is_static: true);
211+
$customFeedPath = $this->feedProvider->getCustomFeedPath(is_static: true);
237212

238-
$this->saveFile($this->outputPath . '/feed.rss', $feed);
213+
$this->saveFile($this->outputPath . $customFeedPath, $feed);
239214
}
240215
}

tests/Pest.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
use Librarian\Builder\StaticBuilder;
2828
use Librarian\Provider\ContentServiceProvider;
29+
use Librarian\Provider\FeedServiceProvider;
2930
use Librarian\Provider\LibrarianServiceProvider;
3031
use Librarian\Provider\TwigServiceProvider;
3132
use Minicli\App;
@@ -60,10 +61,11 @@ function getLibrarian(): App
6061
$builder->shouldReceive('getSinglePage');
6162
$builder->shouldReceive('buildRssFeed');
6263

63-
$app->addService('builder', $builder);
6464
$app->addService('twig', new TwigServiceProvider());
6565
$app->addService('librarian', new LibrarianServiceProvider());
6666
$app->addService('content', new ContentServiceProvider());
67+
$app->addService('feed', new FeedServiceProvider());
68+
$app->addService('builder', $builder);
6769

6870
$app->librarian->boot();
6971

@@ -93,10 +95,11 @@ function getCustomIndexPageApp(): App
9395
$config['site_index_tpl'] = 'content/index.html.twig';
9496

9597
$app = new App($config);
96-
$app->addService('builder', new StaticBuilder());
9798
$app->addService('twig', new TwigServiceProvider());
9899
$app->addService('librarian', new LibrarianServiceProvider());
99100
$app->addService('content', new ContentServiceProvider());
101+
$app->addService('feed', new FeedServiceProvider());
102+
$app->addService('builder', new StaticBuilder());
100103
$app->librarian->boot();
101104

102105
return $app;

tests/Unit/StaticBuilderTest.php

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,18 @@
22

33
use Librarian\Builder\StaticBuilder;
44
use Librarian\Provider\ContentServiceProvider;
5+
use Librarian\Provider\FeedServiceProvider;
56
use Librarian\Provider\LibrarianServiceProvider;
67
use Librarian\Provider\TwigServiceProvider;
78
use Minicli\App;
89

910
beforeEach(function () {
1011
$app = new App(getDefaultAppConfig());
11-
$app->addService('builder', new StaticBuilder());
1212
$app->addService('twig', new TwigServiceProvider());
1313
$app->addService('librarian', new LibrarianServiceProvider());
1414
$app->addService('content', new ContentServiceProvider());
15+
$app->addService('feed', new FeedServiceProvider());
16+
$app->addService('builder', new StaticBuilder());
1517

1618
$app->librarian->boot();
1719
$this->app = $app;

0 commit comments

Comments
 (0)