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

ResourceFactory   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 37
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 2

Test Coverage

Coverage 100%

Importance

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

2 Methods

Rating   Name   Duplication   Size   Complexity  
A build() 0 8 2
A instantiateResource() 0 14 4
1
<?php
2
3
namespace ShopifyClient\Resource;
4
5
use ShopifyClient\Exception\ResourceException;
6
use ShopifyClient\Request;
7
8
class ResourceFactory
9
{
10
    /**
11
     * @param Request $request
12
     * @param string $resource
13
     * @return Resource
14
     * @throws ResourceException
15
     */
16 5
    public static function build(Request $request, string $resource): Resource
17
    {
18 5
        if (class_exists($resource)) {
19 5
            return self::instantiateResource(new $resource($request), $request);
20
        } else {
21 1
            throw new ResourceException(sprintf('Resource %s class does not exist.', $resource));
22
        }
23
    }
24
25
    /**
26
     * @param Resource $instance
27
     * @param Request $request
28
     * @return Resource
29
     */
30 5
    private static function instantiateResource(Resource $instance, Request $request): Resource
31
    {
32 5
        if (!empty($instance->getChildResources())) {
33 5
            foreach ($instance->getChildResources() as $property => $childResource) {
34 5
                $instance->{$property} = new $childResource($request);
35
36 5
                if (!empty($instance->{$property}->getChildResources())) {
37 5
                    self::instantiateResource($instance->{$property}, $request);
38
                }
39
            }
40
        }
41
42 5
        return $instance;
43
    }
44
}
45