Completed
Push — master ( b21c9c...b94996 )
by Rémi
03:43
created

MessageFactory   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 64
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 8
c 1
b 0
f 0
lcom 1
cbo 3
dl 0
loc 64
ccs 21
cts 21
cp 1
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A buildMessage() 0 16 4
A filterUsers() 0 10 2
A getLanguage() 0 4 1
1
<?php
2
3
namespace MessageApp\Message;
4
5
use MessageApp\User\ApplicationUser;
6
use MessageApp\User\UndefinedApplicationUser;
7
8
class MessageFactory
9
{
10
    /**
11
     * @var MessageTextExtractor
12
     */
13
    private $extractor;
14
15
    /**
16
     * Constructor.
17
     *
18
     * @param MessageTextExtractor $extractor
19
     */
20 18
    public function __construct(MessageTextExtractor $extractor)
21
    {
22 18
        $this->extractor = $extractor;
23 18
    }
24
25
    /**
26
     * @param  ApplicationUser[] $users
27
     * @param  object            $object
28
     * @param  string            $language
29
     * @return DefaultMessage
30
     */
31 18
    public function buildMessage(array $users, $object, $language = null)
32
    {
33 18
        $filteredUsers = self::filterUsers($users);
34
35 18
        if (count($filteredUsers) === 0) {
36 9
            return null;
37
        }
38
39 9
        $messageText = $this->extractor->extractMessage($object, ($language) ? : self::getLanguage($filteredUsers));
40
41 9
        if ($messageText === null) {
42 3
            return null;
43
        }
44
45 6
        return new DefaultMessage($filteredUsers, $messageText);
46
    }
47
48
    /**
49
     * @param  ApplicationUser[] $users
50
     * @return ApplicationUser[]
51
     */
52 18
    private static function filterUsers(array $users)
53
    {
54 18
        return array_values(
55 12
            array_unique(
56 18
                array_filter($users, function (ApplicationUser $user = null) {
57 15
                    return $user !== null && !$user instanceof UndefinedApplicationUser;
58 18
                })
59 12
            )
60 12
        );
61
    }
62
63
    /**
64
     * @param  ApplicationUser[] $users
65
     * @return string
66
     */
67 3
    private static function getLanguage(array $users)
68
    {
69 3
        return $users[0]->getPreferredLanguage();
70
    }
71
}
72