Passed
Push — develop ( f53d0b...3a55e6 )
by Jens
09:08
created

ProjectActionBuilder::changeMessagesEnabled()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
c 0
b 0
f 0
ccs 3
cts 3
cp 1
rs 10
cc 1
eloc 2
nc 1
nop 1
crap 1
1
<?php
2
3
namespace Commercetools\Core\Builder\Update;
4
5
use Commercetools\Core\Error\InvalidArgumentException;
6
use Commercetools\Core\Request\AbstractAction;
7
use Commercetools\Core\Request\Project\Command\ProjectChangeCountriesAction;
8
use Commercetools\Core\Request\Project\Command\ProjectChangeCurrenciesAction;
9
use Commercetools\Core\Request\Project\Command\ProjectChangeLanguagesAction;
10
use Commercetools\Core\Request\Project\Command\ProjectChangeMessagesEnabledAction;
11
use Commercetools\Core\Request\Project\Command\ProjectChangeNameAction;
12
use Commercetools\Core\Request\Project\Command\ProjectSetShippingRateInputTypeAction;
13
14
class ProjectActionBuilder
15
{
16
    private $actions = [];
17
18
    /**
19
     * @link https://docs.commercetools.com/http-api-projects-project.html#change-countries
20
     * @param ProjectChangeCountriesAction|callable $action
21
     * @return $this
22
     */
23 1
    public function changeCountries($action = null)
24
    {
25 1
        $this->addAction($this->resolveAction(ProjectChangeCountriesAction::class, $action));
26 1
        return $this;
27
    }
28
29
    /**
30
     * @link https://docs.commercetools.com/http-api-projects-project.html#change-currencies
31
     * @param ProjectChangeCurrenciesAction|callable $action
32
     * @return $this
33
     */
34 1
    public function changeCurrencies($action = null)
35
    {
36 1
        $this->addAction($this->resolveAction(ProjectChangeCurrenciesAction::class, $action));
37 1
        return $this;
38
    }
39
40
    /**
41
     * @link https://docs.commercetools.com/http-api-projects-project.html#change-languages
42
     * @param ProjectChangeLanguagesAction|callable $action
43
     * @return $this
44
     */
45 1
    public function changeLanguages($action = null)
46
    {
47 1
        $this->addAction($this->resolveAction(ProjectChangeLanguagesAction::class, $action));
48 1
        return $this;
49
    }
50
51
    /**
52
     * @link https://docs.commercetools.com/http-api-projects-project.html#change-messages-enabled
53
     * @param ProjectChangeMessagesEnabledAction|callable $action
54
     * @return $this
55
     */
56 1
    public function changeMessagesEnabled($action = null)
57
    {
58 1
        $this->addAction($this->resolveAction(ProjectChangeMessagesEnabledAction::class, $action));
59 1
        return $this;
60
    }
61
62
    /**
63
     * @link https://docs.commercetools.com/http-api-projects-project.html#change-name
64
     * @param ProjectChangeNameAction|callable $action
65
     * @return $this
66
     */
67 1
    public function changeName($action = null)
68
    {
69 1
        $this->addAction($this->resolveAction(ProjectChangeNameAction::class, $action));
70 1
        return $this;
71
    }
72
73
    /**
74
     * @link https://docs.commercetools.com/http-api-projects-project.html#set-shippingrateinputtype
75
     * @param ProjectSetShippingRateInputTypeAction|callable $action
76
     * @return $this
77
     */
78 1
    public function setShippingRateInputType($action = null)
79
    {
80 1
        $this->addAction($this->resolveAction(ProjectSetShippingRateInputTypeAction::class, $action));
81 1
        return $this;
82
    }
83
84
    /**
85
     * @return ProjectActionBuilder
86
     */
87
    public function of()
88
    {
89
        return new self();
90
    }
91
92
    /**
93
     * @param $class
94
     * @param $action
95
     * @return AbstractAction
96
     * @throws InvalidArgumentException
97
     */
98 6
    private function resolveAction($class, $action = null)
99
    {
100 6
        if (is_null($action) || is_callable($action)) {
101 6
            $callback = $action;
102 6
            $emptyAction = $class::of();
103 6
            $action = $this->callback($emptyAction, $callback);
104
        }
105 6
        if ($action instanceof $class) {
106 6
            return $action;
107
        }
108
        throw new InvalidArgumentException(
109
            sprintf('Expected method to be called with or callable to return %s', $class)
110
        );
111
    }
112
113
    /**
114
     * @param $action
115
     * @param callable $callback
116
     * @return AbstractAction
117
     */
118 6
    private function callback($action, callable $callback = null)
119
    {
120 6
        if (!is_null($callback)) {
121
            $action = $callback($action);
122
        }
123 6
        return $action;
124
    }
125
126
    /**
127
     * @param AbstractAction $action
128
     * @return $this;
129
     */
130 6
    public function addAction(AbstractAction $action)
131
    {
132 6
        $this->actions[] = $action;
133 6
        return $this;
134
    }
135
136
    /**
137
     * @return array
138
     */
139 6
    public function getActions()
140
    {
141 6
        return $this->actions;
142
    }
143
144
    /**
145
     * @param array $actions
146
     * @return $this
147
     */
148
    public function setActions(array $actions)
149
    {
150
        $this->actions = $actions;
151
        return $this;
152
    }
153
}
154