src/Theme/Theme.php
private function parseThemeInfo(array $info)
    {
        $themeInfo = new ThemeInfo();

        $required = ['name', 'author', 'directory'];
        foreach ($required as $key) {
            if (!array_key_exists($key, $info)) {
                throw new ThemeInfoAttributeException($key);
            }
        }

        $themeInfo->setName($info['name']);
        $themeInfo->setAuthor($info['author']);
        $themeInfo->setDirectory(strtolower($info['directory']));

        if (isset($info['description'])) {
            $themeInfo->setDescription($info['description']);
        }
        if (isset($info['version'])) {
            $themeInfo->setVersion($info['version']);
        }
        if (isset($info['parent'])) {
            $themeInfo->setParent($info['parent']);
        }

        $themeInfo->setPath($this->findPath($info['directory']));

        return $themeInfo;
    }
private function parseThemeInfo(array $info)
    {
        $themeInfo = new ThemeInfo();

        $required = ['name', 'author', 'directory'];
        foreach ($required as $key) {
            if (!array_key_exists($key, $info)) {
                throw new ThemeInfoAttributeException($key);
            }
        }

        $themeInfo->setName($info['name']);
        $themeInfo->setAuthor($info['author']);
        $themeInfo->setDirectory(strtolower($info['directory']));

        if (isset($info['description'])) {
            $themeInfo->setDescription($info['description']);
        }
        if (isset($info['version'])) {
            $themeInfo->setVersion($info['version']);
        }
        if (isset($info['parent'])) {
            $themeInfo->setParent($info['parent']);
        }

        $themeInfo->setPath($this->findPath($info['directory']));

        return $themeInfo;
    }
Parse theme json file

@param array $info
@return ThemeInfoInterface
@throws ThemeInfoAttributeException