ThermostatFactory::fromData()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 33
Code Lines 30

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 31
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 30
nc 1
nop 2
dl 0
loc 33
ccs 31
cts 31
cp 1
crap 1
rs 9.44
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace LauLamanApps\NestApi\Client\Factory\Device;
6
7
use DateTimeImmutable;
8
use LauLamanApps\NestApi\Client\__shared\AbstractFactory;
9
use LauLamanApps\NestApi\Client\Device\Thermostat;
10
use LauLamanApps\NestApi\Client\Device\Thermostat\HvacMode;
11
use LauLamanApps\NestApi\Client\Device\Thermostat\HvacState;
12
use LauLamanApps\NestApi\Client\Device\Thermostat\Temperature\Scale;
13
use LauLamanApps\NestApi\NestClientInterface;
14
15
final class ThermostatFactory extends AbstractFactory implements ThermostatFactoryInterface
16
{
17 2
    public function fromData(array $data, NestClientInterface $client): Thermostat
18
    {
19 2
        $scale = Scale::get($this->extractString('temperature_scale', $data));
20
21 2
        return new Thermostat(
22 2
            $client,
23 2
            $this->extractString('device_id', $data),
24 2
            $this->extractString('where_id', $data),
25 2
            $this->extractString('structure_id', $data),
26 2
            $this->extractString('name', $data),
27 2
            $this->extractString('name_long', $data),
28 2
            $scale,
29 2
            $this->extractString('locale', $data),
30 2
            $this->extractString('software_version', $data),
31 2
            $this->extractBoolean('can_heat', $data),
32 2
            $this->extractBoolean('can_cool', $data),
33 2
            $this->extractBoolean('has_fan', $data),
34 2
            $this->extractTemperature('ambient_temperature', $scale, $data),
35 2
            $this->extractTemperature('target_temperature', $scale, $data),
36 2
            $this->extractTemperature('target_temperature_high', $scale, $data),
37 2
            $this->extractTemperature('target_temperature_low', $scale, $data),
38 2
            $this->extractTemperature('locked_temp_min', $scale, $data),
39 2
            $this->extractTemperature('locked_temp_max', $scale, $data),
40 2
            $this->extractBoolean('has_leaf', $data),
41 2
            $this->extractInteger('humidity', $data),
42 2
            HvacMode::get($this->extractString('hvac_mode', $data)),
43 2
            HvacState::get($this->extractString('hvac_state', $data)),
44 2
            $this->extractBoolean('is_using_emergency_heat', $data),
45 2
            $this->extractBoolean('is_locked', $data),
46 2
            $this->extractBoolean('is_online', $data),
47 2
            $this->extractDateTimeImmutableOrNull('last_connection', $data),
48 2
            $this->extractBoolean('fan_timer_active', $data),
49 2
            new DateTimeImmutable($this->extractString('fan_timer_timeout', $data))
50
        );
51
    }
52
53 2
    private function extractTemperature(string $key, Scale $scale, array $data)
54
    {
55 2
        $key = sprintf('%s_%s', $key, strtolower($scale->getValue()));
56
57 2
        return new Thermostat\Temperature($scale, $this->extractFloat($key, $data));
58
    }
59
}
60