Skip to content

Commit 515c6e5

Browse files
authored
Merge pull request #7 from librarianphp/nested-content
Support to nested content and improved test coverage
2 parents 0421e84 + 62811ec commit 515c6e5

File tree

20 files changed

+1273
-1778
lines changed

20 files changed

+1273
-1778
lines changed

.github/workflows/php.yml

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,25 @@ on:
99
jobs:
1010
build:
1111

12-
runs-on: ubuntu-latest
12+
runs-on: ubuntu-24.04
1313

1414
steps:
15-
- uses: actions/checkout@v2
15+
- name: Setup PHP
16+
uses: shivammathur/setup-php@v2
17+
with:
18+
php-version: '8.3'
19+
extensions: mbstring, dom, curl
1620

17-
- name: Validate composer.json and composer.lock
18-
run: composer validate
21+
- uses: actions/checkout@v3
1922

20-
- name: Install dependencies
21-
run: composer install --prefer-dist --no-progress
23+
- name: Validate composer.json and composer.lock
24+
run: composer validate
2225

23-
- name: Run test suite
24-
run: composer test
26+
- name: Install dependencies
27+
run: composer install --prefer-dist --no-progress
2528

26-
- name: Run php-cs-fixer
27-
run: composer csfix .
29+
- name: Check code style
30+
run: composer test:lint
31+
32+
- name: Run test suite
33+
run: composer test:unit

Command/Web/ContentController.php

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,14 @@
22

33
namespace librarianphp\Web;
44

5-
use Librarian\ContentType;
5+
use Librarian\Provider\ContentServiceProvider;
66
use Librarian\Provider\TwigServiceProvider;
77
use Librarian\Response;
8-
use Librarian\Provider\ContentServiceProvider;
98
use Librarian\WebController;
109

1110
/**
1211
* Class StaticController
1312
* Renders content from the data dirs
14-
* @package App\Command\Web
1513
*/
1614
class ContentController extends WebController
1715
{
@@ -26,40 +24,40 @@ public function handle(): void
2624
$request = $this->getRequest();
2725

2826
try {
29-
$content = $content_provider->fetch($request->getRoute() . '/' . $request->getSlug());
27+
$content = $content_provider->fetch($request->getRoute().'/'.$request->getSlug());
3028

3129
if ($content === null) {
3230
$page = 1;
3331
$limit = $this->getApp()->config->posts_per_page ?? 10;
3432
$params = $this->getRequest()->getParams();
3533

36-
if (key_exists('page', $params)) {
34+
if (array_key_exists('page', $params)) {
3735
$page = $params['page'];
3836
}
3937

4038
$start = ($page * $limit) - $limit;
41-
$contentType = $content_provider->getContentType($request->getRoute());
39+
$contentType = $content_provider->getContentType($request->getPath());
4240
$content_list = $content_provider->fetchFrom($contentType, $start, $limit);
4341
$response = new Response($twig->render('content/listing.html.twig', [
4442
'content_list' => $content_list,
4543
'total_pages' => $content_provider->fetchTotalPages($limit),
4644
'current_page' => $page,
4745
'base_url' => $request->getRoute(),
48-
'content_type' => $contentType
46+
'content_type' => $contentType,
4947
]));
5048

5149
$response->output();
50+
5251
return;
5352
}
5453
} catch (\Exception $e) {
5554
Response::redirect('/notfound');
5655
}
5756

5857
$output = $twig->render('content/single.html.twig', [
59-
'content' => $content
58+
'content' => $content,
6059
]);
6160

62-
6361
$response = new Response($output);
6462
$response->output();
6563
}

Command/Web/FeedController.php

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,8 @@
22

33
namespace librarianphp\Web;
44

5-
use Librarian\Content;
65
use Librarian\Provider\FeedServiceProvider;
76
use Librarian\WebController;
8-
use Librarian\Provider\ContentServiceProvider;
9-
use Suin\RSSWriter\Channel;
10-
use Suin\RSSWriter\Feed;
11-
use Suin\RSSWriter\Item;
127

138
class FeedController extends WebController
149
{

Command/Web/IndexController.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@
22

33
namespace librarianphp\Web;
44

5+
use Librarian\Provider\ContentServiceProvider;
56
use Librarian\Provider\TwigServiceProvider;
6-
use Librarian\Request;
7-
use Librarian\WebController;
87
use Librarian\Response;
9-
use Librarian\Provider\ContentServiceProvider;
8+
use Librarian\WebController;
109

1110
class IndexController extends WebController
1211
{
@@ -23,10 +22,11 @@ public function handle(): void
2322
$content = $content_provider->fetch($this->getApp()->config->site_index);
2423
if ($content) {
2524
$response = new Response($twig->render($indexTpl, [
26-
'content' => $content
25+
'content' => $content,
2726
]));
2827

2928
$response->output();
29+
3030
return;
3131
}
3232
}
@@ -35,7 +35,7 @@ public function handle(): void
3535
$limit = $this->getApp()->config->posts_per_page ?? 10;
3636
$params = $request->getParams();
3737

38-
if (key_exists('page', $params)) {
38+
if (array_key_exists('page', $params)) {
3939
$page = $params['page'];
4040
}
4141

@@ -44,9 +44,9 @@ public function handle(): void
4444
$content_list = $content_provider->fetchAll($start, $limit);
4545

4646
$output = $twig->render('content/listing.html.twig', [
47-
'content_list' => $content_list,
47+
'content_list' => $content_list,
4848
'total_pages' => $content_provider->fetchTotalPages($limit),
49-
'current_page' => $page
49+
'current_page' => $page,
5050
]);
5151

5252
$response = new Response($output);

Command/Web/TagController.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
namespace librarianphp\Web;
44

5+
use Librarian\Provider\ContentServiceProvider;
56
use Librarian\Provider\TwigServiceProvider;
67
use Librarian\Response;
7-
use Librarian\Provider\ContentServiceProvider;
88
use Librarian\WebController;
99

1010
class TagController extends WebController
@@ -22,15 +22,15 @@ public function handle(): void
2222

2323
$request = $this->getRequest();
2424

25-
if (!$request->getSlug()) {
25+
if (! $request->getSlug()) {
2626
Response::redirect('/notfound');
2727
}
2828

2929
$page = 1;
3030
$limit = $this->getApp()->config->posts_per_page ?: 10;
3131
$params = $this->getRequest()->getParams();
3232

33-
if (key_exists('page', $params)) {
33+
if (array_key_exists('page', $params)) {
3434
$page = $params['page'];
3535
}
3636

@@ -42,15 +42,15 @@ public function handle(): void
4242
Response::redirect('/notfound');
4343
}
4444

45-
if (!$content_list) {
45+
if (! $content_list) {
4646
Response::redirect('/notfound');
4747
}
4848

4949
$output = $twig->render('content/listing.html.twig', [
5050
'content_list' => $content_list,
5151
'tag_name' => $request->getSlug(),
5252
'total_pages' => $content_provider->fetchTagTotalPages($request->getSlug(), $limit),
53-
'current_page' => $page
53+
'current_page' => $page,
5454
]);
5555

5656
$response = new Response($output);

composer.json

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,22 @@
1111
}
1212
},
1313
"require": {
14-
"minicli/minicli": "^4.0",
15-
"librarianphp/librarian-core": "^4.0"
14+
"minicli/minicli": "^4.2.0",
15+
"librarianphp/librarian-core": "^4.5.0"
1616
},
1717
"require-dev": {
18-
"pestphp/pest": "^2.4",
19-
"friendsofphp/php-cs-fixer": "^3.16",
20-
"mockery/mockery": "^1.5"
18+
"pestphp/pest": "^3.2",
19+
"laravel/pint": "^1.1",
20+
"mockery/mockery": "^1.6"
2121
},
2222
"scripts": {
23-
"test" : ["pest"],
24-
"csfix": ["php-cs-fixer fix"]
23+
"lint": ["pint"],
24+
"test:unit" : ["pest"],
25+
"test:lint": ["pint --test"],
26+
"test" : [
27+
"@test:lint",
28+
"@test:unit"
29+
]
2530
},
2631

2732
"config": {

0 commit comments

Comments
 (0)