Completed
Pull Request — develop (#33)
by Michael
02:17
created

MessageBuilder::create()   B

Complexity

Conditions 5
Paths 1

Size

Total Lines 15
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 10
CRAP Score 5

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 15
ccs 10
cts 10
cp 1
rs 8.8571
cc 5
eloc 9
nc 1
nop 0
crap 5
1
<?php
2
3
namespace Crummy\Phlack\Builder;
4
5
use Crummy\Phlack\Message\AttachmentInterface;
6
use Crummy\Phlack\Message\Collection\AttachmentCollection;
7
use Crummy\Phlack\Message\Message;
8
9
class MessageBuilder implements BuilderInterface
10
{
11
    private $data = [];
12
    private $attachments;
13
    private $attachmentBuilder;
14
15
    /**
16
     * Constructor.
17
     */
18 9
    public function __construct()
19
    {
20 9
        $this->attachments = new AttachmentCollection();
21 9
    }
22
23
    /**
24
     * @throws \LogicException When create is called before text has been set
25
     */
26 4
    public function create()
27
    {
28 4
        $message = new Message(
29 4
            isset($this->data['text']) ? $this->data['text'] : null,
30 4
            isset($this->data['channel']) ? $this->data['channel'] : null,
31 4
            isset($this->data['username']) ? $this->data['username'] : null,
32 4
            isset($this->data['icon_emoji']) ? $this->data['icon_emoji'] : null
33 4
        );
34
35 4
        $message['attachments'] = clone $this->attachments;
36
37 4
        $this->refresh();
38
39 4
        return $message;
40
    }
41
42
    /**
43
     * @param string $text
44
     *
45
     * @return $this
46
     */
47 5
    public function setText($text)
48
    {
49 5
        $this->data['text'] = $text;
50
51 5
        return $this;
52
    }
53
54
    /**
55
     * @param $channel
56
     *
57
     * @return $this
58
     */
59 2
    public function setChannel($channel)
60
    {
61 2
        $this->data['channel'] = $channel;
62
63 2
        return $this;
64
    }
65
66
    /**
67
     * @param $iconEmoji
68
     *
69
     * @return $this
70
     */
71 1
    public function setIconEmoji($iconEmoji)
72
    {
73 1
        $this->data['icon_emoji'] = $iconEmoji;
74
75 1
        return $this;
76
    }
77
78
    /**
79
     * @param $username
80
     *
81
     * @return $this
82
     */
83 1
    public function setUsername($username)
84
    {
85 1
        $this->data['username'] = $username;
86
87 1
        return $this;
88
    }
89
90
    /**
91
     * Reset data to an empty message.
92
     */
93 4
    protected function refresh()
94
    {
95 4
        $this->data = [];
96 4
        $this->attachments->clear();
97 4
    }
98
99
    /**
100
     * @param AttachmentInterface $attachment
101
     *
102
     * @return $this
103
     */
104 2
    public function addAttachment(AttachmentInterface $attachment)
105
    {
106 2
        $this->attachments->add($attachment);
107
108 2
        return $this;
109
    }
110
111
    /**
112
     * @return AttachmentBuilder
113
     */
114 1
    public function createAttachment()
115
    {
116 1
        if (!$this->attachmentBuilder) {
117 1
            $this->attachmentBuilder = new AttachmentBuilder($this);
118 1
        }
119
120 1
        return $this->attachmentBuilder;
121
    }
122
}
123