ChangelogValidator   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 70
Duplicated Lines 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
wmc 5
eloc 30
c 3
b 0
f 0
dl 0
loc 70
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A formatMessages() 0 5 1
A validateForPackage() 0 30 3
A __construct() 0 8 1
1
<?php
2
/**
3
 * Copyright © Vaimo Group. All rights reserved.
4
 * See LICENSE_VAIMO.txt for license details.
5
 */
6
namespace Vaimo\ComposerChangelogs\Validators;
7
8
use Composer\Package\PackageInterface as Package;
9
use Symfony\Component\Console\Output\OutputInterface as Output;
10
11
use Vaimo\ComposerChangelogs\Results\ValidationResult as Result;
12
13
class ChangelogValidator
14
{
15
    /**
16
     * @var \Vaimo\ComposerChangelogs\Loaders\ChangelogLoader
17
     */
18
    private $changelogLoader;
19
20
    /**
21
     * @var string[]
22
     */
23
    private $messageFormats;
24
25
    /**
26
     * @var \Vaimo\ComposerChangelogs\Extractors\ErrorExtractor
27
     */
28
    private $errorExtractor;
29
30
    /**
31
     * @param \Vaimo\ComposerChangelogs\Loaders\ChangelogLoader $changelogLoader
32
     * @param array $messageFormats
33
     */
34
    public function __construct(
35
        \Vaimo\ComposerChangelogs\Loaders\ChangelogLoader $changelogLoader,
36
        array $messageFormats = array()
37
    ) {
38
        $this->changelogLoader = $changelogLoader;
39
        $this->messageFormats = $messageFormats;
40
41
        $this->errorExtractor = new \Vaimo\ComposerChangelogs\Extractors\ErrorExtractor();
42
    }
43
44
    public function validateForPackage(Package $package, $verbosity = Output::VERBOSITY_NORMAL)
45
    {
46
        $formats = array_replace(array(
47
            'failure' => '%s',
48
            'success' => '%s'
49
        ), $this->messageFormats);
50
51
        try {
52
            $this->changelogLoader->load($package);
53
        } catch (\Exception $exception) {
54
            if ($verbosity > Output::VERBOSITY_VERBOSE) {
55
                throw $exception;
56
            }
57
58
            $messages = array_merge(
59
                array(sprintf('The changelog of %s is invalid due to:', $package->getName())),
60
                $this->errorExtractor->extractMessages($exception)
61
            );
62
63
            return new Result(
64
                false,
65
                $this->formatMessages($messages, $formats['failure'])
66
            );
67
        }
68
69
        return new Result(
70
            true,
71
            $this->formatMessages(
72
                array(sprintf('The changelog of %s is valid', $package->getName())),
73
                $formats['success']
74
            )
75
        );
76
    }
77
78
    private function formatMessages(array $messages, $format)
79
    {
80
        return array_map(function ($message) use ($format) {
81
            return sprintf($format, $message);
82
        }, $messages);
83
    }
84
}
85