PopulateElementFromResponse   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 58
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 3
lcom 1
cbo 3
dl 0
loc 58
ccs 0
cts 29
cp 0
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __invoke() 0 8 1
A populateElementFromResponse() 0 27 2
1
<?php
2
3
/**
4
 * @copyright  Copyright (c) Flipbox Digital Limited
5
 * @license    https://github.com/flipbox/hubspot/blob/master/LICENSE.md
6
 * @link       https://github.com/flipbox/hubspot
7
 */
8
9
namespace flipbox\craft\hubspot\transformers;
10
11
use craft\base\Element;
12
use craft\base\ElementInterface;
13
use flipbox\craft\hubspot\events\PopulateElementFromResponseEvent;
14
use flipbox\craft\hubspot\fields\Objects;
15
use flipbox\craft\hubspot\fields\ObjectsFieldInterface;
16
use flipbox\craft\hubspot\HubSpot;
17
use Psr\Http\Message\ResponseInterface;
18
19
/**
20
 * @author Flipbox Factory <[email protected]>
21
 * @since 1.0.0
22
 */
23
class PopulateElementFromResponse
24
{
25
    /**
26
     * An action used to assemble a unique event name.
27
     *
28
     * @var string
29
     */
30
    public $action;
31
32
    /**
33
     * @param ResponseInterface $response
34
     * @param ElementInterface $element
35
     * @param ObjectsFieldInterface $field
36
     * @return ElementInterface
37
     */
38
    public function __invoke(
39
        ResponseInterface $response,
40
        ElementInterface $element,
41
        ObjectsFieldInterface $field
42
    ): ElementInterface {
43
        $this->populateElementFromResponse($response, $element, $field);
44
        return $element;
45
    }
46
47
    /**
48
     * @param ResponseInterface $response
49
     * @param ElementInterface|Element $element
50
     * @param ObjectsFieldInterface $field
51
     * @return ElementInterface
52
     */
53
    protected function populateElementFromResponse(
54
        ResponseInterface $response,
55
        ElementInterface $element,
56
        ObjectsFieldInterface $field
57
    ): ElementInterface {
58
        /** @var Objects $field */
59
60
        $event = new PopulateElementFromResponseEvent([
61
            'response' => $response,
62
            'field' => $field
63
        ]);
64
65
        $name = $event::eventName(
66
            $field->handle,
67
            $this->action
68
        );
69
70
        HubSpot::info(sprintf(
71
            "Populate Element: Event '%s', Element '%s'",
72
            $name,
73
            $element->id . ' - ' . $element->title
74
        ), __METHOD__);
75
76
        $element->trigger($name, $event);
77
78
        return $event->sender ?: $element;
79
    }
80
}
81