Code Coverage
 
Lines
Branches
Paths
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
24 / 24
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
5 / 5
CRAP
100.00% covered (success)
100.00%
1 / 1
SingleInstance
100.00% covered (success)
100.00%
24 / 24
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
6 / 6
100.00% covered (success)
100.00%
5 / 5
7
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 details
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 curlErrorNumber
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 curlErrorInfo
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 fetch
100.00% covered (success)
100.00%
20 / 20
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
3
1<?php
2namespace Dbmi\Webservice\Quake;
3
4use Dbmi\Webservice\Quake\IdStruct as DS_QuakeId;
5
6/**
7 * Get quake details
8 */
9class SingleInstance{
10    private const templateUrl = 'https://emidius.mi.ingv.it/services/macroseismic/query?eventid=%s&format=text';
11    private const validResponseLines = 2;
12
13    private DS_QuakeId $quakeId;
14    private array $details = array();
15
16    private int $curlErrNum = 0;
17    private string $curlErrInfo = '';
18
19
20    public function __construct(DS_QuakeId $quakeId){
21        $this->quakeId = $quakeId;
22    }
23
24    public function details():array{ return $this->details; } 
25
26    public function curlErrorNumber():int{ return $this->curlErrNum; }
27    public function curlErrorInfo():string{ return $this->curlErrInfo; }
28    
29    /**
30     * Get quake epicentral details
31     *
32     * @return int     found lines
33     */
34    public function fetch():int{
35        $curlSession = curl_init();
36        curl_setopt_array($curlSession, array(
37            CURLOPT_URL         => sprintf(self::templateUrl, $this->quakeId->id()),
38            CURLOPT_HEADER         => false,
39            CURLOPT_CUSTOMREQUEST    => 'GET',
40            CURLOPT_RETURNTRANSFER    => true,
41            CURLOPT_FAILONERROR     => true
42            )
43        );
44        $downloadedData = curl_exec($curlSession);
45
46        $this->curlErrNum = curl_errno($curlSession);
47        $this->curlErrInfo = curl_error($curlSession);
48        curl_close($curlSession);
49        
50        if(CURLE_OK != $this->curlErrNum){
51            // @codeCoverageIgnoreStart
52            error_log(sprintf("[%s] [CurlErr: %d] %s", __METHOD__, $this->curlErrNum, $this->curlErrInfo));
53            return -1;
54            // @codeCoverageIgnoreEnd
55        }
56
57        $rows = preg_split("/\n/", trim($downloadedData));
58
59        if( count($rows) != self::validResponseLines ){ //header+data
60            error_log(sprintf("[%s] Invalid epicenter response, see below\n'%s'", __METHOD__, $downloadedData));
61            return -2;
62        }    
63
64        $this->details = preg_split("/\|/", $rows[1]);
65
66        return 1;
67    }
68}
69
70?>
71

Branches

Below are the source code lines that represent each code branch as identified by Xdebug. Please note a branch is not necessarily coterminous with a line, a line may contain multiple branches and therefore show up more than once. Please also be aware that some branches may be implicit rather than explicit, e.g. an if statement always has an else as part of its logical flow even if you didn't write one.

SingleInstance->__construct
20    public function __construct(DS_QuakeId $quakeId){
21        $this->quakeId = $quakeId;
22    }
SingleInstance->curlErrorInfo
27    public function curlErrorInfo():string{ return $this->curlErrInfo; }
SingleInstance->curlErrorNumber
26    public function curlErrorNumber():int{ return $this->curlErrNum; }
SingleInstance->details
24    public function details():array{ return $this->details; } 
SingleInstance->fetch
35        $curlSession = curl_init();
36        curl_setopt_array($curlSession, array(
37            CURLOPT_URL         => sprintf(self::templateUrl, $this->quakeId->id()),
38            CURLOPT_HEADER         => false,
39            CURLOPT_CUSTOMREQUEST    => 'GET',
40            CURLOPT_RETURNTRANSFER    => true,
41            CURLOPT_FAILONERROR     => true
42            )
43        );
44        $downloadedData = curl_exec($curlSession);
45
46        $this->curlErrNum = curl_errno($curlSession);
47        $this->curlErrInfo = curl_error($curlSession);
48        curl_close($curlSession);
49        
50        if(CURLE_OK != $this->curlErrNum){
57        $rows = preg_split("/\n/", trim($downloadedData));
58
59        if( count($rows) != self::validResponseLines ){ //header+data
60            error_log(sprintf("[%s] Invalid epicenter response, see below\n'%s'", __METHOD__, $downloadedData));
61            return -2;
64        $this->details = preg_split("/\|/", $rows[1]);
65
66        return 1;
67    }