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

ProductDiscountsActionBuilder::getActions()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 3
c 0
b 0
f 0
ccs 2
cts 2
cp 1
rs 10
cc 1
eloc 1
nc 1
nop 0
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\ProductDiscounts\Command\ProductDiscountChangeIsActiveAction;
8
use Commercetools\Core\Request\ProductDiscounts\Command\ProductDiscountChangeNameAction;
9
use Commercetools\Core\Request\ProductDiscounts\Command\ProductDiscountChangePredicateAction;
10
use Commercetools\Core\Request\ProductDiscounts\Command\ProductDiscountChangeSortOrderAction;
11
use Commercetools\Core\Request\ProductDiscounts\Command\ProductDiscountChangeValueAction;
12
use Commercetools\Core\Request\ProductDiscounts\Command\ProductDiscountSetDescriptionAction;
13
use Commercetools\Core\Request\ProductDiscounts\Command\ProductDiscountSetValidFromAction;
14
use Commercetools\Core\Request\ProductDiscounts\Command\ProductDiscountSetValidUntilAction;
15
16
class ProductDiscountsActionBuilder
17
{
18
    private $actions = [];
19
20
    /**
21
     * @link https://docs.commercetools.com/http-api-projects-productDiscounts.html#change-is-active
22
     * @param ProductDiscountChangeIsActiveAction|callable $action
23
     * @return $this
24
     */
25 1
    public function changeIsActive($action = null)
26
    {
27 1
        $this->addAction($this->resolveAction(ProductDiscountChangeIsActiveAction::class, $action));
28 1
        return $this;
29
    }
30
31
    /**
32
     * @link https://docs.commercetools.com/http-api-projects-productDiscounts.html#change-name
33
     * @param ProductDiscountChangeNameAction|callable $action
34
     * @return $this
35
     */
36 1
    public function changeName($action = null)
37
    {
38 1
        $this->addAction($this->resolveAction(ProductDiscountChangeNameAction::class, $action));
39 1
        return $this;
40
    }
41
42
    /**
43
     * @link https://docs.commercetools.com/http-api-projects-productDiscounts.html#change-predicate
44
     * @param ProductDiscountChangePredicateAction|callable $action
45
     * @return $this
46
     */
47 1
    public function changePredicate($action = null)
48
    {
49 1
        $this->addAction($this->resolveAction(ProductDiscountChangePredicateAction::class, $action));
50 1
        return $this;
51
    }
52
53
    /**
54
     * @link https://docs.commercetools.com/http-api-projects-productDiscounts.html#change-sort-order
55
     * @param ProductDiscountChangeSortOrderAction|callable $action
56
     * @return $this
57
     */
58 1
    public function changeSortOrder($action = null)
59
    {
60 1
        $this->addAction($this->resolveAction(ProductDiscountChangeSortOrderAction::class, $action));
61 1
        return $this;
62
    }
63
64
    /**
65
     * @link https://docs.commercetools.com/http-api-projects-productDiscounts.html#change-value
66
     * @param ProductDiscountChangeValueAction|callable $action
67
     * @return $this
68
     */
69 1
    public function changeValue($action = null)
70
    {
71 1
        $this->addAction($this->resolveAction(ProductDiscountChangeValueAction::class, $action));
72 1
        return $this;
73
    }
74
75
    /**
76
     * @link https://docs.commercetools.com/http-api-projects-productDiscounts.html#set-description
77
     * @param ProductDiscountSetDescriptionAction|callable $action
78
     * @return $this
79
     */
80 1
    public function setDescription($action = null)
81
    {
82 1
        $this->addAction($this->resolveAction(ProductDiscountSetDescriptionAction::class, $action));
83 1
        return $this;
84
    }
85
86
    /**
87
     * @link https://docs.commercetools.com/http-api-projects-productDiscounts.html#set-valid-from
88
     * @param ProductDiscountSetValidFromAction|callable $action
89
     * @return $this
90
     */
91 1
    public function setValidFrom($action = null)
92
    {
93 1
        $this->addAction($this->resolveAction(ProductDiscountSetValidFromAction::class, $action));
94 1
        return $this;
95
    }
96
97
    /**
98
     * @link https://docs.commercetools.com/http-api-projects-productDiscounts.html#set-valid-until
99
     * @param ProductDiscountSetValidUntilAction|callable $action
100
     * @return $this
101
     */
102 1
    public function setValidUntil($action = null)
103
    {
104 1
        $this->addAction($this->resolveAction(ProductDiscountSetValidUntilAction::class, $action));
105 1
        return $this;
106
    }
107
108
    /**
109
     * @return ProductDiscountsActionBuilder
110
     */
111
    public function of()
112
    {
113
        return new self();
114
    }
115
116
    /**
117
     * @param $class
118
     * @param $action
119
     * @return AbstractAction
120
     * @throws InvalidArgumentException
121
     */
122 8
    private function resolveAction($class, $action = null)
123
    {
124 8
        if (is_null($action) || is_callable($action)) {
125 8
            $callback = $action;
126 8
            $emptyAction = $class::of();
127 8
            $action = $this->callback($emptyAction, $callback);
128
        }
129 8
        if ($action instanceof $class) {
130 8
            return $action;
131
        }
132
        throw new InvalidArgumentException(
133
            sprintf('Expected method to be called with or callable to return %s', $class)
134
        );
135
    }
136
137
    /**
138
     * @param $action
139
     * @param callable $callback
140
     * @return AbstractAction
141
     */
142 8
    private function callback($action, callable $callback = null)
143
    {
144 8
        if (!is_null($callback)) {
145
            $action = $callback($action);
146
        }
147 8
        return $action;
148
    }
149
150
    /**
151
     * @param AbstractAction $action
152
     * @return $this;
153
     */
154 8
    public function addAction(AbstractAction $action)
155
    {
156 8
        $this->actions[] = $action;
157 8
        return $this;
158
    }
159
160
    /**
161
     * @return array
162
     */
163 8
    public function getActions()
164
    {
165 8
        return $this->actions;
166
    }
167
168
    /**
169
     * @param array $actions
170
     * @return $this
171
     */
172
    public function setActions(array $actions)
173
    {
174
        $this->actions = $actions;
175
        return $this;
176
    }
177
}
178