Passed
Push — master ( 7cb262...fbe27d )
by Arnaud
05:21
created

Create::process()   B

Complexity

Conditions 10
Paths 6

Size

Total Lines 63
Code Lines 31

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 36
CRAP Score 10.0018

Importance

Changes 1
Bugs 1 Features 0
Metric Value
cc 10
eloc 31
c 1
b 1
f 0
nc 6
nop 0
dl 0
loc 63
ccs 36
cts 37
cp 0.973
crap 10.0018
rs 7.6666

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 (!is_iterable($this->builder->getPagesFiles()) || \count($this->builder->getPagesFiles()) == 0) {
51
            return;
52
        }
53
54 1
        $total = \count($this->builder->getPagesFiles());
55 1
        $count = 0;
56
57 1
        foreach ($this->builder->getPagesFiles() as $file) {
58 1
            $count++;
59
            // create a page from its (Markdown) file
60 1
            $page = new Page(Page::createIdFromFile($file));
61 1
            $page->setFile($file);
62
            // parse frontmatter and body
63 1
            $page->parse();
64
65
            /*
66
             * Apply a custom path to pages of a section.
67
             *
68
             * ```yaml
69
             * paths:
70
             *   - section: Blog
71
             *     path: :section/:year/:month/:day/:slug
72
             * ```
73
             */
74 1
            if (\is_array($this->config->get('pages.paths', $page->getVariable('language')))) {
75 1
                foreach ($this->config->get('pages.paths', $page->getVariable('language')) as $entry) {
76 1
                    if (isset($entry['section'])) {
77
                        /** @var Page $page */
78 1
                        if ($page->getSection() == Page::slugify($entry['section'])) {
79 1
                            if (isset($entry['path'])) {
80 1
                                $path = str_replace(
81 1
                                    [
82 1
                                        ':year',
83 1
                                        ':month',
84 1
                                        ':day',
85 1
                                        ':section',
86 1
                                        ':slug',
87 1
                                    ],
88 1
                                    [
89 1
                                        $page->getVariable('date')->format('Y'),
90 1
                                        $page->getVariable('date')->format('m'),
91 1
                                        $page->getVariable('date')->format('d'),
92 1
                                        $page->getSection(),
93 1
                                        $page->getSlug(),
94 1
                                    ],
95 1
                                    $entry['path']
96 1
                                );
97 1
                                $page->setPath(trim($path, '/'));
98
                            }
99
                        }
100
                    }
101
                }
102
            }
103
104
            // add the page to pages collection only if its language is defined in configuration
105 1
            if (\in_array($page->getVariable('language', $this->config->getLanguageDefault()), array_column($this->config->getLanguages(), 'code'))) {
106 1
                $this->builder->getPages()->add($page);
107
            }
108
109 1
            $message = \sprintf('Page "%s" created', $page->getId());
110 1
            $this->builder->getLogger()->info($message, ['progress' => [$count, $total]]);
111
        }
112
    }
113
}
114