Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
34 / 34
HEXONET\ResponseParser
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
2 / 2
15
100.00% covered (success)
100.00%
34 / 34
 parse
100.00% covered (success)
100.00%
1 / 1
7
100.00% covered (success)
100.00%
19 / 19
 serialize
100.00% covered (success)
100.00%
1 / 1
8
100.00% covered (success)
100.00%
15 / 15
<?php
declare(strict_types=1);
/**
 * HEXONET
 * Copyright © HEXONET
 */
namespace HEXONET;
/**
 * HEXONET ResponseParser
 *
 * @package HEXONET
 */
class ResponseParser
{
    /**
     * Method to parse plain API response into js object
     * @param string $raw API plain response
     * @return array[string]string API response as hash
     */
    public static function parse($raw)
    {
        $hash = array();
        $rlist = explode("\n", preg_replace("/\r\n/", "\n", $raw));
        foreach ($rlist as $item) {
            if (preg_match("/^([^\=]*[^\t\= ])[\t ]*=[\t ]*(.*)$/", $item, $m)) {
                $attr = $m[1];
                $value = $m[2];
                $value = preg_replace("/[\t ]*$/", "", $value);
                if (preg_match("/^property\[([^\]]*)\]/i", $attr, $m)) {
                    if (!array_key_exists("PROPERTY", $hash)) {
                        $hash["PROPERTY"] = array();
                    }
                    $prop = strtoupper($m[1]);
                    $prop = preg_replace("/\s/", "", $prop);
                    if (array_key_exists($prop, $hash["PROPERTY"])) {
                        array_push($hash["PROPERTY"][$prop], $value);
                    } else {
                        $hash["PROPERTY"][$prop] = array($value);
                    }
                } else {
                    $hash[strtoupper($attr)] = $value;
                }
            }
        }
        if (!array_key_exists("DESCRIPTION", $hash)) {
            $hash["DESCRIPTION"] = "";
        }
        return $hash;
    }
    /**
     * Serialize given parsed response hash back to plain text
     * @param array[string]string $r API response as hash
     * @return string plain API response
     */
    public static function serialize($r)
    {
        $plain = "[RESPONSE]";
        if (array_key_exists("PROPERTY", $r)) {
            foreach ($r["PROPERTY"] as $key => $vals) {
                foreach ($vals as $idx => $val) {
                    $plain .= "\r\nPROPERTY[" . $key . "][" . $idx . "]=" . $val;
                }
            }
        }
        if (array_key_exists("CODE", $r)) {
            $plain .= "\r\nCODE=" . $r["CODE"];
        }
        if (array_key_exists("DESCRIPTION", $r)) {
            $plain .= "\r\nDESCRIPTION=" . $r["DESCRIPTION"];
        }
        if (array_key_exists("QUEUETIME", $r)) {
            $plain .= "\r\nQUEUETIME=" . $r["QUEUETIME"];
        }
        if (array_key_exists("RUNTIME", $r)) {
            $plain .= "\r\nRUNTIME=" . $r["RUNTIME"];
        }
        $plain .= "\r\nEOF\r\n";
        return $plain;
    }
}