Test Failed
Push — 2.0 ( 9e8731...0b4092 )
by Zaahid
03:06
created

ParserMessageFactory::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 17
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 7
c 1
b 0
f 0
nc 1
nop 8
dl 0
loc 17
rs 10

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
<?php
2
3
/**
4
 * This file is part of the ZBateson\MailMimeParser project.
5
 *
6
 * @license http://opensource.org/licenses/bsd-license.php BSD
7
 */
8
9
namespace ZBateson\MailMimeParser\Parser\Proxy;
10
11
use ZBateson\MailMimeParser\Message;
12
use ZBateson\MailMimeParser\Message\PartHeaderContainer;
13
use ZBateson\MailMimeParser\Message\Factory\PartHeaderContainerFactory;
14
use ZBateson\MailMimeParser\Message\Helper\MultipartHelper;
15
use ZBateson\MailMimeParser\Message\Helper\PrivacyHelper;
16
use ZBateson\MailMimeParser\Parser\IParserFactory;
17
use ZBateson\MailMimeParser\Parser\MimeParserFactory;
18
use ZBateson\MailMimeParser\Parser\NonMimeParserFactory;
19
use ZBateson\MailMimeParser\Parser\Part\ParserPartChildrenContainerFactory;
20
use ZBateson\MailMimeParser\Parser\Part\ParserPartStreamContainerFactory;
21
use ZBateson\MailMimeParser\Parser\PartBuilder;
22
use ZBateson\MailMimeParser\Stream\StreamFactory;
23
use Psr\Http\Message\StreamInterface;
24
25
/**
26
 * Responsible for creating proxied IMessage instances.
27
 *
28
 * @author Zaahid Bateson
29
 */
30
class ParserMessageFactory
31
{
32
    /**
33
     * @var StreamFactory the StreamFactory instance
34
     */
35
    protected $streamFactory;
36
37
    /**
38
     * @var PartHeaderContainerFactory
39
     */
40
    protected $partHeaderContainerFactory;
41
42
    /**
43
     * @var ParserPartStreamContainerFactory
44
     */
45
    protected $parserPartStreamContainerFactory;
46
47
    /**
48
     * @var ParserPartChildrenContainerFactory
49
     */
50
    protected $parserPartChildrenContainerFactory;
51
52
    /**
53
     * @var IParserFactory[]
54
     */
55
    protected $parserFactories;
56
57
    /**
58
     * @var MultipartHelper
59
     */
60
    private $multipartHelper;
61
62
    /**
63
     * @var PrivacyHelper
64
     */
65
    private $privacyHelper;
66
67
    public function __construct(
68
        StreamFactory $sdf,
69
        PartHeaderContainerFactory $phcf,
70
        ParserPartStreamContainerFactory $pscf,
71
        ParserPartChildrenContainerFactory $ppccf,
72
        MimeParserFactory $mpf,
73
        NonMimeParserFactory $nmpf,
74
        MultipartHelper $multipartHelper,
75
        PrivacyHelper $privacyHelper
76
    ) {
77
        $this->streamFactory = $sdf;
78
        $this->partHeaderContainerFactory = $phcf;
79
        $this->parserPartStreamContainerFactory = $pscf;
80
        $this->parserPartChildrenContainerFactory = $ppccf;
81
        $this->parserFactories = [ $mpf, $nmpf ];
82
        $this->multipartHelper = $multipartHelper;
83
        $this->privacyHelper = $privacyHelper;
84
    }
85
86
    /**
87
     * Adds an IParserFactory at the highest priority (up front).
88
     *
89
     * @param IParserFactory $pf
90
     */
91
    public function prependMessageParserFactory(IParserFactory $pf)
92
    {
93
        array_unshift($this->parserFactories, $pf);
94
    }
95
96
    /**
97
     * Loops through registered IParserFactories and returns a parser that can
98
     * parse a part for the passed headers.
99
     *
100
     * @param PartHeaderContainer $container
101
     * @return IParser
0 ignored issues
show
Bug introduced by
The type ZBateson\MailMimeParser\Parser\Proxy\IParser was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
102
     */
103
    protected function getIParser(PartHeaderContainer $container)
104
    {
105
        foreach ($this->parserFactories as $pf) {
106
            if ($pf->canParse($container)) {
107
                return $pf->newInstance();
108
            }
109
        }
110
        return null;
111
    }
112
113
    /**
114
     * Constructs a new IMessage object and returns it
115
     *
116
     * @param PartBuilder $partBuilder
117
     * @param PartHeaderContainer $headerContainer
118
     * @return ParserMimePartProxy
119
     */
120
    public function newInstance(PartBuilder $partBuilder, PartHeaderContainer $headerContainer)
121
    {
122
        // changes to headers by the user can't affect parsing which could come
123
        // after a change to headers is made by the user on the Part
124
        $copied = $this->partHeaderContainerFactory->newInstance($headerContainer);
125
        $parserProxy = new ParserMimePartProxy($copied, $partBuilder, $this->getIParser($headerContainer));
126
        $streamContainer = $this->parserPartStreamContainerFactory->newInstance($parserProxy);
127
        $childrenContainer = $this->parserPartChildrenContainerFactory->newInstance($parserProxy);
128
129
        $message = new Message(
130
            $streamContainer,
131
            $headerContainer,
132
            $childrenContainer,
133
            $this->multipartHelper,
134
            $this->privacyHelper
135
        );
136
        $parserProxy->setPart($message);
137
138
        $streamContainer->setStream($this->streamFactory->newMessagePartStream($message));
139
        $message->attach($streamContainer);
140
        return $parserProxy;
141
    }
142
143
}
144