Completed
Push — develop ( fbac2a...fa8907 )
by Edwin
04:58
created

ResourceCollection::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 6
ccs 4
cts 4
cp 1
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 3
nc 1
nop 2
crap 1
1
<?php
2
3
namespace ShopifyClient\Resource;
4
5
use ShopifyClient\Exception\ResourceException;
6
use ShopifyClient\Request;
7
8
class ResourceCollection
9
{
10
    private $defaultResources = [
11
        'abandonedCheckouts'  => AbandonedCheckouts::class,
12
        'blogs'               => Blog::class,
13
        'countries'           => Country::class,
14
        'customers'           => Customer::class,
15
        'fulfillmentServices' => FulfillmentService::class,
16
        'priceRules'          => PriceRule::class,
17
        'products'            => Product::class,
18
        'orders'              => Order::class,
19
        'shop'                => Shop::class,
20
        'webhooks'            => Webhook::class,
21
    ];
22
23
    /**
24
     * @var array
25
     */
26
    private $resources = [];
27
28
    /**
29
     * ResourceCollection constructor.
30
     * @param Request $request
31
     * @param array $resources
32
     */
33 5
    public function __construct(Request $request, array $resources = [])
34
    {
35 5
        $resources = array_merge($this->defaultResources, $resources);
36
37 5
        $this->loadResources($request, $resources);
38 4
    }
39
40
    /**
41
     * @param string $key
42
     * @return Resource
43
     * @throws ResourceException
44
     */
45 135
    public function getResource(string $key)
46
    {
47 135
        if (!isset($this->resources[$key])) {
48 1
            throw new ResourceException(sprintf('Resource %s does not exist.', $key));
49
        }
50
51 134
        return $this->resources[$key];
52
    }
53
54
    /**
55
     * @param Request $request
56
     * @param array $resources
57
     */
58 5
    private function loadResources(Request $request, array $resources)
59
    {
60 5
        foreach ($resources as $key => $resource) {
61 5
            $this->loadResource($request, $key, $resource);
62
        }
63 4
    }
64
65
    /**
66
     * @param Request $request
67
     * @param string $key
68
     * @param string $resource
69
     */
70 5
    private function loadResource(Request $request, string $key, string $resource)
71
    {
72 5
        $this->resources[$key] = ResourceFactory::build($request, $resource);
73 5
    }
74
}
75