LibCloud\Compute\Providers\Rackspace\RackspaceProvider::toNodeModelExtra PHP Method

toNodeModelExtra() private method

Populate an array, suitable for Compute\Model\Node*.extra, with the public properties of an OpenCloud\Compute\Resource entity.
private toNodeModelExtra ( object $response, array | null $exclude = null ) : array
$response object one of the OpenCloud\Compute\Resource entities
$exclude array | null an optional subset of the public properties to be exluded from the returned array
return array
    private function toNodeModelExtra($response, $exclude = null)
    {
        $extra = array();
        $rc = new \ReflectionClass($response);
        $public_props = array_map(function ($x) {
            return $x->name;
        }, $rc->getProperties(\ReflectionProperty::IS_PUBLIC));
        # desired properties are copied into the returned array
        $desired_properties = $public_props;
        if (is_array($exclude)) {
            $desired_properties = array_diff($public_props, $exclude);
        }
        # convert fields known to contain (possibly nested) stdClass objects
        $obj_properies = array_intersect(array('links', 'addresses', 'image', 'flavor'), $desired_properties);
        foreach ($obj_properies as $prop) {
            if (is_array($response->{$prop})) {
                $extra[$prop] = array();
                foreach ($response->{$prop} as $k => $obj) {
                    $extra[$prop][$k] = $this->getObjectVarsRecursively($obj);
                }
            } else {
                $extra[$prop] = $this->getObjectVarsRecursively($response->{$prop});
            }
            unset($desired_properties[array_search($prop, $desired_properties)]);
        }
        # convert metadata
        if (in_array('metadata', $desired_properties)) {
            if ($response->metadata instanceof OpenCloudMetadata) {
                $extra['metadata'] = $response->metadata->toArray();
            }
            unset($desired_properties[array_search('metadata', $desired_properties)]);
        }
        # get the rest of the desired properties
        foreach ($desired_properties as $propName) {
            $extra[$propName] = $response->{$propName};
        }
        return $extra;
    }