ResourceCollection::__construct()   A
last analyzed

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
        'users'               => User::class,
21
        'webhooks'            => Webhook::class,
22
    ];
23
24
    /**
25
     * @var array
26
     */
27
    private $resources = [];
28
29
    /**
30
     * ResourceCollection constructor.
31
     * @param Request $request
32
     * @param array $resources
33
     */
34 5
    public function __construct(Request $request, array $resources = [])
35
    {
36 5
        $resources = array_merge($this->defaultResources, $resources);
37
38 5
        $this->loadResources($request, $resources);
39 4
    }
40
41
    /**
42
     * @param string $key
43
     * @return Resource
44
     * @throws ResourceException
45
     */
46 135
    public function getResource(string $key)
47
    {
48 135
        if (!isset($this->resources[$key])) {
49 1
            throw new ResourceException(sprintf('Resource %s does not exist.', $key));
50
        }
51
52 134
        return $this->resources[$key];
53
    }
54
55
    /**
56
     * @param Request $request
57
     * @param array $resources
58
     */
59 5
    private function loadResources(Request $request, array $resources)
60
    {
61 5
        foreach ($resources as $key => $resource) {
62 5
            $this->loadResource($request, $key, $resource);
63
        }
64 4
    }
65
66
    /**
67
     * @param Request $request
68
     * @param string $key
69
     * @param string $resource
70
     */
71 5
    private function loadResource(Request $request, string $key, string $resource)
72
    {
73 5
        $this->resources[$key] = ResourceFactory::build($request, $resource);
74 5
    }
75
}
76