Passed
Push — custom_path ( af3c3d...7d429d )
by Arnaud
08:03 queued 04:21
created

Create::process()   B

Complexity

Conditions 11
Paths 12

Size

Total Lines 65
Code Lines 32

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 1 Features 0
Metric Value
cc 11
eloc 32
c 1
b 1
f 0
nc 12
nop 0
dl 0
loc 65
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
    public function getName(): string
29
    {
30
        return 'Creating pages';
31
    }
32
33
    /**
34
     * {@inheritdoc}
35
     */
36
    public function init(array $options): void
37
    {
38
        $this->builder->setPages(new PagesCollection('all-pages'));
39
40
        if (is_dir($this->builder->getConfig()->getPagesPath())) {
41
            $this->canProcess = true;
42
        }
43
    }
44
45
    /**
46
     * {@inheritdoc}
47
     */
48
    public function process(): void
49
    {
50
        if (count($this->builder->getPagesFiles()) == 0) {
51
            return;
52
        }
53
54
        $max = count($this->builder->getPagesFiles());
55
        $count = 0;
56
        /** @var \Symfony\Component\Finder\SplFileInfo $file */
57
        foreach ($this->builder->getPagesFiles() as $file) {
58
            $count++;
59
            /** @var Page $page */
60
            $page = new Page(Page::createId($file));
61
            $page->setFile($file)->parse();
62
63
            /*
64
             * Apply an - optional - custom path to pages of a section.
65
             *
66
             * ```yaml
67
             * paths:
68
             *   - section: Blog
69
             *     language: fr # optional
70
             *     path: :section/:year/:month/:day/:slug
71
             * ```
72
             */
73
            if (is_array($this->config->get('paths'))) {
74
                foreach ($this->config->get('paths') as $entry) {
75
                    if (isset($entry['section'])) {
76
                        /** @var Page $page */
77
                        if ($page->getSection() == Page::slugify($entry['section'])) {
78
                            if ((isset($entry['language']) && $entry['language'] != $page->getVariable('language'))) {
79
                                break;
80
                            }
81
                            if (isset($entry['path'])) {
82
                                $path = str_replace(
83
                                    [
84
                                        ':year',
85
                                        ':month',
86
                                        ':day',
87
                                        ':section',
88
                                        ':slug',
89
                                    ],
90
                                    [
91
                                        $page->getVariable('date')->format('Y'),
92
                                        $page->getVariable('date')->format('m'),
93
                                        $page->getVariable('date')->format('d'),
94
                                        $page->getSection(),
95
                                        $page->getSlug(),
96
                                    ],
97
                                    $entry['path']
98
                                );
99
                                $page->setPath(trim($path, '/'));
100
                            }
101
                        }
102
                    }
103
                }
104
            }
105
106
            // add the page to pages collection only if its language is defined in configuration
107
            if (in_array($page->getVariable('language', $this->config->getLanguageDefault()), array_column($this->config->getLanguages(), 'code'))) {
108
                $this->builder->getPages()->add($page);
109
            }
110
111
            $message = \sprintf('Page "%s" created', $page->getId());
112
            $this->builder->getLogger()->info($message, ['progress' => [$count, $max]]);
113
        }
114
    }
115
}
116