Passed
Push — master ( cb005d...524863 )
by Joachim
07:48
created

Runtime   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 56
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 19
c 1
b 0
f 0
dl 0
loc 56
rs 10
wmc 9

6 Methods

Rating   Name   Duplication   Size   Complexity  
A widget() 0 3 1
A __construct() 0 4 1
A itemCode() 0 3 1
A addItems() 0 7 2
A addItem() 0 9 2
A addCartItems() 0 9 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Setono\SyliusStrandsPlugin\Twig;
6
7
use Setono\SyliusStrandsPlugin\Resolver\ItemCodeResolverInterface;
8
use Setono\SyliusStrandsPlugin\Widget\Widget;
9
use Sylius\Component\Core\Model\OrderItemInterface;
10
use Sylius\Component\Order\Context\CartContextInterface;
11
use Twig\Extension\RuntimeExtensionInterface;
12
13
final class Runtime implements RuntimeExtensionInterface
14
{
15
    /** @var ItemCodeResolverInterface */
16
    private $itemCodeResolver;
17
18
    /** @var CartContextInterface */
19
    private $cartContext;
20
21
    public function __construct(ItemCodeResolverInterface $itemCodeResolver, CartContextInterface $cartContext)
22
    {
23
        $this->itemCodeResolver = $itemCodeResolver;
24
        $this->cartContext = $cartContext;
25
    }
26
27
    public function itemCode(OrderItemInterface $item): string
28
    {
29
        return $this->itemCodeResolver->resolve($item);
30
    }
31
32
    public function widget(string $template): Widget
33
    {
34
        return new Widget($template);
35
    }
36
37
    /**
38
     * @param OrderItemInterface|string $item
39
     */
40
    public function addItem(Widget $widget, $item): Widget
41
    {
42
        if ($item instanceof OrderItemInterface) {
43
            $widget->addItem($this->itemCodeResolver->resolve($item));
44
        } else {
45
            $widget->addItem($item);
46
        }
47
48
        return $widget;
49
    }
50
51
    public function addItems(Widget $widget, iterable $items): Widget
52
    {
53
        foreach ($items as $item) {
54
            $this->addItem($widget, $item);
55
        }
56
57
        return $widget;
58
    }
59
60
    public function addCartItems(Widget $widget): Widget
61
    {
62
        $cart = $this->cartContext->getCart();
63
64
        if (count($cart->getItems()) === 0) {
65
            return $widget;
66
        }
67
68
        return $this->addItems($widget, $cart->getItems());
69
    }
70
}
71