Passed
Push — nested-sections ( 8e6510...91a2d5 )
by Arnaud
03:51
created

Create::process()   B

Complexity

Conditions 11
Paths 12

Size

Total Lines 66
Code Lines 33

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 34
CRAP Score 11.0207

Importance

Changes 2
Bugs 0 Features 0
Metric Value
cc 11
eloc 33
c 2
b 0
f 0
nc 12
nop 0
dl 0
loc 66
ccs 34
cts 36
cp 0.9444
crap 11.0207
rs 7.3166

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of Cecil.
7
 *
8
 * Copyright (c) Arnaud Ligny <[email protected]>
9
 *
10
 * For the full copyright and license information, please view the LICENSE
11
 * file that was distributed with this source code.
12
 */
13
14
namespace Cecil\Step\Pages;
15
16
use Cecil\Collection\Page\Collection as PagesCollection;
17
use Cecil\Collection\Page\Page;
18
use Cecil\Step\AbstractStep;
19
20
/**
21
 * Creates Pages collection from content iterator.
22
 */
23
class Create extends AbstractStep
24
{
25
    /**
26
     * {@inheritdoc}
27
     */
28 1
    public function getName(): string
29
    {
30 1
        return 'Creating pages';
31
    }
32
33
    /**
34
     * {@inheritdoc}
35
     */
36 1
    public function init(array $options): void
37
    {
38 1
        $this->builder->setPages(new PagesCollection('all-pages'));
39
40 1
        if (is_dir($this->config->getPagesPath())) {
41 1
            $this->canProcess = true;
42
        }
43
    }
44
45
    /**
46
     * {@inheritdoc}
47
     */
48 1
    public function process(): void
49
    {
50 1
        if (\count($this->builder->getPagesFiles()) == 0) {
51
            return;
52
        }
53
54 1
        $total = \count($this->builder->getPagesFiles());
55 1
        $count = 0;
56 1
        foreach ($this->builder->getPagesFiles() as $file) {
57 1
            $count++;
58
            // create a page from its (Markdown) file
59 1
            $page = new Page(Page::createIdFromFile($file));
60 1
            $page->setFile($file);
61
            // parse frontmatter and body
62 1
            $page->parse();
63
64
            /*
65
             * Apply an - optional - custom path to pages of a section.
66
             *
67
             * ```yaml
68
             * paths:
69
             *   - section: Blog
70
             *     language: fr # optional
71
             *     path: :section/:year/:month/:day/:slug
72 1
             * ```
73 1
             */
74
            if (\is_array($this->config->get('paths'))) {
75
                foreach ($this->config->get('paths') as $entry) {
76 1
                    if (isset($entry['section'])) {
77 1
                        /** @var Page $page */
78
                        if ($page->getSection() == Page::slugify($entry['section'])) {
79
                            if (isset($entry['language']) && $entry['language'] != $page->getVariable('language')) {
80
                                break;
81
                            }
82
                            if (isset($entry['path'])) {
83
                                $path = str_replace(
84
                                    [
85
                                        ':year',
86
                                        ':month',
87
                                        ':day',
88
                                        ':section',
89
                                        ':slug',
90 1
                                    ],
91 1
                                    [
92 1
                                        $page->getVariable('date')->format('Y'),
93
                                        $page->getVariable('date')->format('m'),
94 1
                                        $page->getVariable('date')->format('d'),
95 1
                                        $page->getSection(),
96
                                        $page->getSlug(),
97
                                    ],
98 1
                                    $entry['path']
99 1
                                );
100 1
                                $page->setPath(trim($path, '/'));
101 1
                            }
102 1
                        }
103 1
                    }
104 1
                }
105 1
            }
106 1
107 1
            // add the page to pages collection only if its language is defined in configuration
108 1
            if (\in_array($page->getVariable('language', $this->config->getLanguageDefault()), array_column($this->config->getLanguages(), 'code'))) {
109 1
                $this->builder->getPages()->add($page);
110 1
            }
111 1
112 1
            $message = sprintf('Page "%s" (%s) created', $page->getId(), $page->getType());
113 1
            $this->builder->getLogger()->info($message, ['progress' => [$count, $total]]);
114 1
        }
115 1
    }
116
}
117