Passed
Push — master ( 6e2a06...da0795 )
by Jens
14:26
created

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