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

ResourceFactory::instantiateResource()   A

Complexity

Conditions 4
Paths 2

Size

Total Lines 14
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 4

Importance

Changes 0
Metric Value
dl 0
loc 14
ccs 7
cts 7
cp 1
rs 9.2
c 0
b 0
f 0
cc 4
eloc 7
nc 2
nop 2
crap 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