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

ResourceCollection   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 67
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 6
lcom 1
cbo 2
dl 0
loc 67
ccs 15
cts 15
cp 1
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 6 1
A getResource() 0 8 2
A loadResources() 0 6 2
A loadResource() 0 4 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